0

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

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

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 和滚动俯仰和偏航导数。这是预期的行为吗?当我添加 2 个指南针步态模型并尝试使它们遵循相同的路径时,我遇到了类似的事情。即使我给端口 14-27 提供与我给 0-13 相同的输入。第二个机器人卡在原点附近,而第一个机器人按预期正常移动,没有任何问题。

我需要一些帮助或一些示例,以便更好地了解如何可视化多个机器人的运动。

4

1 回答 1

1

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

drake::systems::DrakeVisualizer(我假设您正在使用它来发布您的可视化消息)旨在连接到state_output_portdrake ::systems::RigidBodyPlant。根据文档RigidBodyPlant_

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

也就是说,所有模型实例的广义位置都在广义速度之前。使用时RigidBodyPlantDrakeVisualizer此排序将自动处理。

但是,根据您的问题,我了解到您的四旋翼和罗盘步态模型(根据它们各自的示例)具有单独的专用系统。这些系统中的每一个都将其状态输出为 [q, v],其中 q 是广义位置向量,v 是广义速度向量。在这种情况下,您将需要使用drake::systems::Demultiplexerdrake::systems::Multiplexer拆分四旋翼和罗盘步态系统的输出,并按所需顺序重新组装它们:

+---------------+   +-------------+   q     +-------------+
|               |   |             +-------->+             |
|  Compass-gait +-->+Demultiplexer|         |             |
|               |   |             +-----+ v |             |
+---------------+   +-------------+     |   |             |
                                     +----->+             |   +-----------------+
                                     |  |   |             |   |                 |
                                     |  |   | Multiplexer +-->+ DrakeVisualizer |
                                    q|  |   |             |   |                 |
                                     |  +-->+             |   +-----------------+
+---------------+   +-------------+  |      |             |
|               |   |             +--+      |             |
|     Quadrotor +-->+Demultiplexer|         |             |
|               |   |             +---+---->+             |
+---------------+   +-------------+   v     +-------------+

注意RigidBodyPlant相关的类被替换为drake::multibody::MultibodyPlantand drake::geometry::SceneGraph。请参阅run_quadrotor_lqr.cc,了解将这些新工具用于专业工厂的示例。

于 2019-08-05T13:36:45.233 回答