如何在单个系统中为不同的机器人运行多个move_group

时间:2019-02-28 13:24:55

标签: ros moveit

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

2 个答案:

答案 0 :(得分:0)

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

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

希望这对您有帮助...

答案 1 :(得分: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 文件中!

祝你好运!