ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I don't have the time to find and link the sources I came across back then, but the last time I considered using multiple robots via their own robot_description, my conclusion was that ROS1 is simply not made for it. MoveIt and probably some other tools do not consider a namespaced robot_description. The same goes for joint_states and other topics. The underlying assumption is always a single robot system and no namespace.

The most common solution for using multiple robots seems to be to add a prefix to each robot (e.g. a_bot_, b_bot_. Most URDF macros have a prefix parameter for this) so that their names are unique*, and then place the robots in the scene that is robot_description. Then you can define a separate planning group for each robot in MoveIt, which is practically identical to having multiple robots. You just have to think of robot_description as the description of your robot system, which contains all the robots you control.

For almost all** use cases with multiple robots, this is the method I would suggest. It is probably not impossible to make multiple robot_description and joint_states topics work, but is it worth the hassle? Consider all of the parts you may need to fix to accommodate this change. Do you plan to use a custom gripper? Its driver needs to publish to a different joint_states topic as well. Does Rviz accept joint_states input from multiple topics? I don't even know. MoveIt does not.

* This might not be important for you because your robots are not identical. However, all of the joint and frame names also need to be unique, so prefixes may be a good idea anyway.

** For cases where you don't know the number of robots, or they have to go on-/offline on the fly (swarm management), it sounds like ROS2 will be more suitable.

I don't have the time to find and link the sources I came across back then, but the last time I considered using multiple robots via their own robot_description, my conclusion was that ROS1 is simply not made for it. MoveIt and probably some other tools do not consider a namespaced robot_description. The same goes for joint_states and other topics. The underlying assumption is always a single robot system and no namespace.

The most common solution for using multiple robots seems to be to add a prefix to each robot (e.g. a_bot_, b_bot_. Most URDF macros have a prefix parameter for this) so that their names are unique*, and then place the robots in the scene URDF that is published to robot_description. Then you can define a separate planning group for each robot in MoveIt, which is practically identical to having multiple robots. You just have to think of robot_description as the description of your robot system, which contains all the robots you control.

For almost all** use cases with multiple robots, this is the method I would suggest. It is probably not impossible to make multiple robot_description and joint_states topics work, but is it worth the hassle? Consider all of the parts you may need to fix to accommodate this change. Do you plan to use a custom gripper? Its driver needs to publish to a different joint_states topic as well. Does Rviz accept joint_states input from multiple topics? I don't even know. MoveIt does not.

* This might not be important for you because your robots are not identical. However, all of the joint and frame names also need to be unique, so prefixes may be a good idea anyway.

** For cases where you don't know the number of robots, or they have to go on-/offline on the fly (swarm management), it sounds like ROS2 will be more suitable.

I don't have the time to find and link the sources I came across back then, but the last time I considered using multiple robots via their own robot_description, my conclusion was that ROS1 is simply not made for it. MoveIt and probably some other tools do not consider a namespaced robot_description. The same goes for joint_states and other topics. The underlying assumption is always a single robot system and no namespace.

The most common solution for using multiple robots seems to be to add a prefix to each robot (e.g. a_bot_, b_bot_. Most URDF macros have a prefix parameter for this) so that their names are unique*, and then place the robots in the URDF that is published to robot_description. Then you can define a separate planning group for each robot in MoveIt, which is practically identical to having multiple robots. You just have to think of robot_description as the description of your robot system, which contains all the robots you control.

For almost all** use cases with multiple robots, this is the method I would suggest. It is probably not impossible to make multiple robot_description and joint_states topics work, but is it worth the hassle? Consider all of the parts you may need to fix to accommodate this change. Do you plan to use a custom gripper? Its driver needs to publish to a different joint_states topic as well. Does Rviz accept joint_states input from multiple topics? I don't even know. MoveIt does not.not, at least not in the ways that you would want and expect it to.

* This might not be important for you because your robots are not identical. However, all of the joint and frame names also need to be unique, so prefixes may be a good idea anyway.

** For cases where you don't know the number of robots, or they have to go on-/offline on the fly (swarm management), it sounds like ROS2 will be more suitable.