将 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
实现。
考虑现有的 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
实现。