可视化多个机器人的运动

时间:2019-08-02 22:57:16

标签: drake

我正在尝试添加多个机器人实例并可视化它们的动作。我尝试了几种方法来执行此操作,但遇到错误/问题。它们如下:

创建系统后,我尝试添加另一个模型实例。

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。第二个机器人卡在原点附近,而第一个机器人按预期运行得很好,没有任何问题。

我需要一些帮助,也许还需要一些示例,以使我更好地了解多个机器人的运动。

1 个答案:

答案 0 :(得分:1)

[更新]请参阅底部的注释。

drake::systems::DrakeVisualizer(我假设您是用来发布可视化消息的)旨在与drake::systems::RigidBodyPlantstate_output_port连接。根据{{​​1}}的{​​{3}},

  

状态向量x由广义位置和广义速度组成。

也就是说, all 模型实例的广义位置早于广义速度。当与RigidBodyPlantRigidBodyPlant一起使用时,此顺序会自动处理。

但是,根据您的问题,我认为您有适用于四旋翼和指南针步态模型的单独的专用系统(根据各自的示例)。这些系统中的每个系统都将其状态输出为[q,v],其中q是广义位置矢量,而v是广义速度矢量。在这种情况下,您将需要使用documentationdrake::systems::Demultiplexer来拆分四旋翼和罗盘步态系统的输出,并按要求的顺序重新组装它们:

DrakeVisualizer

注意+---------------+ +-------------+ q +-------------+ | | | +-------->+ | | Compass-gait +-->+Demultiplexer| | | | | | +-----+ v | | +---------------+ +-------------+ | | | +----->+ | +-----------------+ | | | | | | | | | Multiplexer +-->+ DrakeVisualizer | q| | | | | | | +-->+ | +-----------------+ +---------------+ +-------------+ | | | | | | +--+ | | | Quadrotor +-->+Demultiplexer| | | | | | +---+---->+ | +---------------+ +-------------+ v +-------------+ drake::systems::Multiplexerassociated classesdrake::multibody::MultibodyPlant取代。有关在专门的工厂中使用这些新工具的示例,请参见drake::geometry::SceneGraph