如何在Drake中利用初始猜测便捷评估符号表达式?
解决Drake中用初始猜测值评估符号表达式的类型错误问题
错误原因
Expression.Evaluate() 要求传入**Dict[pydrake.symbolic.Variable, float]类型的环境字典**,但prog.GetInitialGuess(self.F)返回的是numpy数组,类型不匹配导致报错。
简便解决方案
不需要逐个变量调用prog.InitialGuess,以下两种方法可以快速完成评估:
方法1:生成变量-值字典
将变量数组与初始猜测值数组配对,生成符合要求的环境字典:
# 将二维变量数组转为一维列表 f_vars = self.F.flatten() # 获取初始猜测值数组 f_guess = prog.GetInitialGuess(self.F) # 生成环境字典 eval_env = {var: val for var, val in zip(f_vars, f_guess)} # 评估表达式 result = sum_torques[0][0].Evaluate(eval_env)
方法2:使用pydrake.symbolic.Bind(推荐)
Drake的Bind函数支持直接将变量向量与数值向量绑定,批量处理更高效:
from pydrake.symbolic import Bind # 绑定单个表达式 bound_expr = Bind(sum_torques[0][0], self.F, prog.GetInitialGuess(self.F)) result = float(bound_expr) # 批量绑定整个矩阵(如果sum_torques是矩阵形式) bound_sum_torques = Bind(sum_torques, self.F, prog.GetInitialGuess(self.F)) result_array = np.array(bound_sum_torques, dtype=float)
说明
两种方法都能一次性完成所有变量的初始猜测值绑定,避免了逐个变量处理的繁琐操作,完全适配Drake的符号表达式评估要求。
内容的提问来源于stack exchange,提问作者HoliInn
相关产品推荐
相关产品推荐

