微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

对于基础扭矩驱动,我之前曾尝试将带有驱动器的伪链接连接到基础 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 举报,一经查实,本站将立刻删除。