pydrake:如何从一个工厂的不同系统中聚合多个List[ExternalyAppliedSpatialForce]



我正在测试一些简单的控制器,并想知道如何聚合List[ExternallyAppliedSpatialForce],特别是提供给MultibodyPlant.get_applied_spatial_force_input_port()

如果我试图将两个输出都连接到它,我会得到以下错误:

RuntimeError: Input port is already wired.

为了了解更多情况,我正在研究双边控制,并希望最终能够研究独立控制器之间延迟的影响。在这种情况下,我只是在尝试漂浮体作为";主";以及";次级";驱动部件。

浮体控制器的粗略示例:
https://gist.github.com/EricCousineau-TRI/f774b936aa930cf29777ed411815bbce#file-simple_floating_body_controller-py

我所知道的几种方法(到目前为止(,其中有一些注意事项:

1.将外力列表聚合为一个中间系统

这可以相对容易地完成。请参阅此处的粗略示例系统:
https://gist.github.com/EricCousineau-TRI/f774b936aa930cf29777ed411815bbce#file-外部强制聚集器系统

2.连接控件本身

获取引用并为同一系统中的两个对象生成输入——这将生成一个力列表。

FWIW,我最终可能会为了理想化的双边控制而这样做,但这样做可能会损害使用复合系统(例如ZeroOrderHold(轻松研究延迟的能力。

3.考虑使用广义力(更容易聚合/添加(

当涉及实际的操纵器/机械臂时,这可能是更常见的用例;(


顺便说一句,双边对照可以在更简单的环境中进行研究(例如一个DoF(,正如文献中所做的那样,例如[1],第3.4节,第47页。

[1] J.G.Park,"用模型和任务改进远程操作",博士论文,斯坦福大学,2010年。[在线]。可用:https://stacks.stanford.edu/file/druid:ph465qm8083/dissertation-增强.pdf

以下PR已合并并提供ExternallyAppliedSpatialForceMultiplexer
drake#18171

最新更新