首页 > 解决方案 > 将 Drake 系统中的一些状态转换为输入

问题描述

考虑现有的 Drake System(例如MultibodyPlant)。有没有办法将其包装System在 aDiagram中,以便将内部的一些状态转换System为输入,即直接从外部的输入端口设置Diagram

动机本质上是改变建模决策。例如,四旋翼有时被认为将其角速率和集体推力作为输入,而不是集体推力和机身力矩(或类似地,单独的转子命令)。

在一个更复杂的系统中,也许我可以假设我可以瞬时控制某些速度(例如,具有快速动力学的内部、完全驱动的关节),但仍想对整个多体系统的动力学进行建模,以考虑当前速度选择科里奥利术语等

我所得到的实际上与平板滑翔机模型中电梯的建模选择非常相似——但我想避免手动实现 LeafSystem,因为我的系统具有非平凡的多体动力学。

我的感觉是,这可能是不可能的,因为我不知道 a 有任何方式Diagram干扰 a 的内部动态System,因此“删除”一个状态并将其提升为输入似乎是不可能的。但我认为可能有一些聪明的方法可以做到这一点。

提前致谢!

标签: drake

解决方案


我同意你的分析。最简单的答案是“不”——声明状态的系统不能事后分解以使该状态来自输入端口。但是对于您提到的具体示例,有一些可能性/相关想法。

第一个是规定运动约束的概念——例如,可以MultibodyPlant直接设置关节的位置/速度。不幸的是,我们还没有实现它,但这是一个我们偶尔讨论过的合理请求(这里有一个例子:https ://github.com/RobotLocomotion/drake/issues/14694 )。

正如您所说,您可以在系统外部实施一个 PD 控制器以达到预期的效果。这与我们在内部实现规定的运动约束的方式之间唯一真正的区别是我们可以很好地选择增益并直接通知求解器该约束。

另一种可能性是实现一个在工厂“内部”工作并接受输入端口的力元件。这将允许您施加力来实现您的建模想法,即使是通过不可能的方式actuation_input_port(例如,通过声明的执行器无法实现)。

您链接的滑翔机示例是一个很好的示例。在那种情况下,我非常担心有一个模型甚至避免将电梯的速度声明为状态(因为我们的验证方法会随着状态空间的维度而增加复杂性)。目前,这仍然需要编写一个定制的LeafSystem实现。


推荐阅读