0

我正在尝试在 Gazebo 中模拟多个机器人(KUKA、UR5 和 Franka Panda)。在一个 URDF 文件中包含所有用于模拟的机器人,并使用 Moveit 制作了所有三个机器人的独立手臂组。使用 Moveit 指挥器,我可以控制机器人,并且工作正常。问题是当我尝试使用 Moveit 指挥官同时控制所有机器人时。如果一个机器人正在工作,那么即使我命令另一个机器人也不会工作。有什么办法可以同时工作所有三个机器人。

4

2 回答 2

1

我对 MoveIt 不是很熟悉。但是我知道在单个 roscore 上运行多个系统时需要小心。这里有一些要考虑的事情:

  1. 您要确保所有主题都被分离出来,并且每个节点都订阅和发布到适当的主题。
  2. 对于 TF,所有消息都在一个主题上,这里您需要确保从世界框架自上而下到每个机器人只有一棵有效的树。如果树不正确,那么它会分解其他不相关的东西。
  3. 根据我的经验,您有两种选择,或者使用multimaster将所有不同的机器人分成不同的 roscore 。完成此操作后,每个人都可以拥有自己的 TF,并且您只能共享所需的消息。或者,您需要确保 TF 树被适当地分离出来以使节点正常工作。

希望这可以帮助...

于 2019-03-03T14:45:04.383 回答
0

希望这仍然与我写这个的人有关。我已经处理这个问题很长一段时间了,我已经设法让两个机器人同时工作,但是它们在 TF 树中没有分开,这是一个非常重要的部分,正如Vik提到的,我仍然挣扎着。

但是对于同时工作的机器人来说,你需要的是每个机器人都有一个单独的 move_group 和 . 就我而言,我在启动文件中执行此操作,其中我有以下代码的一个版本:

<group ns="robot_1">

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
        
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="true" output="screen" />
  
  <include file="$(find directory)/launch/move_group.launch" />
 
</group>

<group ns="robot_2">

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
        
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="true" output="screen" />
  
  <include file="$(find directory)/launch/move_group.launch" />
 
</group>

然后,当启动一些 C++ 执行代码时,您需要在 robots 命名空间中启动,例如在终端中,如下所示:

ROS_NAMESPACE=robot_1 rosrun movegroup_interface robot_one_move

或者这也可以在单独的 .launch 文件中执行!

祝你好运!

于 2021-02-02T10:09:21.027 回答