将 Drake 系统中的某些状态转换为输入

Turning some of the states in a Drake system into inputs

考虑现有的 Drake System(例如 MultibodyPlant)。有没有一种方法可以将 System 包装在 Diagram 中,从而将内部 System 的某些状态转换为输入,即直接从输入端口设置外层 Diagram?

动机主要是改变建模决策。例如,四旋翼 sometimes considered 将其 angular 速率和集体推力作为输入,而不是集体推力和 body 力矩(或类似地,单个旋翼命令)。

在一个更复杂的系统中,也许我可能会假设我可以瞬时控制某些速度(例如内部,fully-actuated 具有快速动态的关节),但仍然想对整个多 body 建模根据科里奥利项等考虑当前速度选择的系统动力学

我得到的结果实际上与 Flat-Plate Glider Model 中电梯的建模选择非常相似 - 但我想避免手动实现 LeafSystem,因为我的系统具有非平凡的 multibody 动态.

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

提前致谢!

我同意你的分析。最简单的答案是“否”——声明状态的系统不能 post-hoc 展开以让该状态来自输入端口。但是对于你提到的具体例子,有一些可能性/相关的想法。

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

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

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

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