ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
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.
2 | No.2 Revision |
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.
3 | No.3 Revision |
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.