问题描述
我正在尝试为连接到自由浮动底座的机械臂执行轨迹优化(以模拟航天器-机械臂场景)。
对于基础扭矩驱动,我之前曾尝试将带有驱动器的伪链接连接到基础 CoM,但这些方法不起作用(请参阅 this)。最后,我决定使用广义力来控制系统而不是执行器,因为它们似乎更能代表我对太空机器人的使用(参见 here)。对于线性化,我手动更改 B(驱动)矩阵以包括基础扭矩驱动器(反作用轮)。
在此背景下,我尝试使用 Direct Transcription 执行轨迹优化,我的目标是找到 u(t),在我的情况下,它是广义力而不是致动器力。我添加了使某些广义力为零(Base CoM 上的平移力)的约束,以更好地表示真实系统(反作用轮)。
现在,当我为 DirectTransciption
参数使用 input_port_index
函数时,我提供 input_port_index=plant.get_applied_generalized_force_input_port().get_index()
以使用广义力而不是致动力来查找轨迹。
但是,在运行 Solve()
时,出现以下错误:
RuntimeError: Actuation input port for model instance planarSC must be connected.
这个错误是有道理的,因为我确实没有连接驱动输入端口。但是在我使用 plant.get_actuation_input_port().FixValue(plant.CreateDefaultContext(),np.zeros((plant.num_actuators(),1)))
将驱动输入端口设置为零后错误仍然存在。
有没有办法对广义力执行 DirectTranscription
作为 u(t) 而不是驱动力?
更新:我已更正了提供给 DirectTranscription
的上下文。 python 脚本现在具有以下代码,但仍然给出有关未连接驱动端口的相同错误:
trajOptContext = plant.CreateDefaultContext()
jointAcutation = np.zeros((plant.num_actuators(),1))
plant.get_actuation_input_port().FixValue(trajOptContext,jointAcutation)
prog = DirectTranscription(plant,trajOptContext,N,input_port_index=plant.get_applied_generalized_force_input_port().get_index())
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)