我正在尝试添加多个机器人实例并可视化它们的动作。我尝试了几种方法来执行此操作,但遇到错误/问题。它们如下:
创建系统后,我尝试添加另一个模型实例。
parsers::urdf::AddModelInstanceFromUrdfFileToWorld(
FindResourceOrThrow("path/CompassGait.urdf"),
multibody::joints::kRollPitchYaw, tree.get());
parsers::urdf::AddModelInstanceFromUrdfFileToWorld(
FindResourceOrThrow("path/quadrotor.urdf"),
multibody::joints::kRollPitchYaw, tree.get());
正如预期的那样,在可视化器中可以看到两个机器人,并且系统中有26个输出端口。但是我无法想象四旋翼所需的运动。它似乎遵循了作为指南针步态输出端口输入的x,y,z和滚动俯仰和偏航导数。这是预期的行为吗? 当我添加两个指南针步态模型并尝试使它们遵循相同的路径时,我会遇到类似的情况。即使我给端口14-27一样的输入,也给0-13。第二个机器人卡在原点附近,而第一个机器人按预期运行得很好,没有任何问题。
我需要一些帮助,也许还需要一些示例,以使我更好地了解多个机器人的运动。
答案 0 :(得分:1)
[更新]请参阅底部的注释。
drake::systems::DrakeVisualizer
(我假设您是用来发布可视化消息的)旨在与drake::systems::RigidBodyPlant的state_output_port
连接。根据{{1}}的{{3}},
状态向量x由广义位置和广义速度组成。
也就是说, all 模型实例的广义位置早于广义速度。当与RigidBodyPlant
和RigidBodyPlant
一起使用时,此顺序会自动处理。
但是,根据您的问题,我认为您有适用于四旋翼和指南针步态模型的单独的专用系统(根据各自的示例)。这些系统中的每个系统都将其状态输出为[q,v],其中q是广义位置矢量,而v是广义速度矢量。在这种情况下,您将需要使用documentation和drake::systems::Demultiplexer
来拆分四旋翼和罗盘步态系统的输出,并按要求的顺序重新组装它们:
DrakeVisualizer
注意:+---------------+ +-------------+ q +-------------+
| | | +-------->+ |
| Compass-gait +-->+Demultiplexer| | |
| | | +-----+ v | |
+---------------+ +-------------+ | | |
+----->+ | +-----------------+
| | | | | |
| | | Multiplexer +-->+ DrakeVisualizer |
q| | | | | |
| +-->+ | +-----------------+
+---------------+ +-------------+ | | |
| | | +--+ | |
| Quadrotor +-->+Demultiplexer| | |
| | | +---+---->+ |
+---------------+ +-------------+ v +-------------+
和drake::systems::Multiplexer
被associated classes和drake::multibody::MultibodyPlant
取代。有关在专门的工厂中使用这些新工具的示例,请参见drake::geometry::SceneGraph
。