使用广义力代替致动器扭矩通过直接转录进行轨迹优化

问题描述

我正在尝试为连接到自由浮动底座的机械臂执行轨迹优化(以模拟航天器-机械臂场景)。

对于基础扭矩驱动,我之前曾尝试将带有驱动器的伪链接连接到基础 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...