MoveIt! with multiple robots?

2,077 views
Skip to first unread message

Steve Levine

unread,
Feb 11, 2014, 11:34:19 PM2/11/14
to moveit...@googlegroups.com
Hi all,

MoveIt! seems to work great for a single robot, and we'd love to use it in scenarios with multiple robots at once. Is this possible?

If so, we weren't quite sure how to set things up. Would we need multiple robot_descriptions on the parameters server (in different namespaces), or multiple instances of the move_group node running at once? I imagine multiple move_groups could mess things up with the planning scene, however.

I suppose we could have one giant URDF that imports all of our individual robots, and give each its own move group - and then run just one move_group node. Does anyone know of a more modular / cleaner way, however?

Thanks so much!

Cheers,
Steve

Adolfo Rodríguez Tsouroukdissian

unread,
Feb 12, 2014, 3:07:20 AM2/12/14
to Steve Levine, moveit-users
On Wed, Feb 12, 2014 at 5:34 AM, Steve Levine <sjlev...@gmail.com> wrote:
Hi all,

MoveIt! seems to work great for a single robot, and we'd love to use it in scenarios with multiple robots at once. Is this possible?

If so, we weren't quite sure how to set things up. Would we need multiple robot_descriptions on the parameters server (in different namespaces), or multiple instances of the move_group node running at once? I imagine multiple move_groups could mess things up with the planning scene, however.

Multiple appropriately namespaced robot setups (nodes, ROS APIs, the whole thing) should work, although I've never tried it. It would allow you to independently plan for each robot, but AFAIK not for multiple robots together.
 

I suppose we could have one giant URDF that imports all of our individual robots, and give each its own move group - and then run just one move_group node. Does anyone know of a more modular / cleaner way, however?

This would allow you to plan for multiple robots together, but does not scale very well.

Cheers,

Adolfo.

Thanks so much!

Cheers,
Steve



--
Adolfo Rodríguez Tsouroukdissian
Senior robotics engineer
adolfo.r...@pal-robotics.com
http://www.pal-robotics.com

PAL ROBOTICS S.L
c/ Pujades 77-79, 4º4ª
08005 Barcelona, Spain.
Tel. +34.93.414.53.47
Fax.+34.93.209.11.09
Skype: adolfo.pal-robotics
Facebook - Twitter - PAL Robotics YouTube Channel

AVISO DE CONFIDENCIALIDAD: Este mensaje y sus documentos adjuntos, pueden contener información privilegiada y/o confidencial que está dirigida exclusivamente a su destinatario. Si usted recibe este mensaje y no es el destinatario indicado, o el empleado encargado de su entrega a dicha persona, por favor, notifíquelo inmediatamente y remita el mensaje original a la dirección de correo electrónico indicada. Cualquier copia, uso o distribución no autorizados de esta comunicación queda estrictamente prohibida.

CONFIDENTIALITY NOTICE: This e-mail and the accompanying document(s) may contain confidential information which is privileged and intended only for the individual or entity to whom they are addressed.  If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution or use of this e-mail and/or accompanying document(s) is strictly prohibited.  If you have received this e-mail in error, please immediately notify the sender at the above e-mail address.

Steve Levine

unread,
Feb 12, 2014, 9:53:58 AM2/12/14
to moveit...@googlegroups.com, Steve Levine, adolfo.r...@pal-robotics.com
Thanks a lot for your advice, Adolfo.

I'm still confused, however, how a move_group node could "know about" the other robots controlled by other move_group nodes running in different name spaces. Suppose for example that I have two robots in different name spaces, each controlled by a separate move_group node. I'd like to make a plan for robot 1 that avoids colliding with robot 2 (i.e., treats robot 2 as some kind of collision object). However, unless I am mistaken, I don't see how this is possible using the planning scene. It appears that the planning scene only supports a single robot, and aside from manually adding every mesh of the robot 2 into robot 1's planning scene in the right location, it's not clear to me how to get robot 2 into robot 1's planning scene so that a collision-free path is planned. Might anyone have ideas on how to do this?

Thanks again!

Cheers,
Steve

Acorn (Nathan) Pooley

unread,
Feb 12, 2014, 12:49:12 PM2/12/14
to moveit...@googlegroups.com
Multiple robots is not well supported in MoveIt! right now.

One way you can do it is to combine multiple robots into a single URDF file.  This way MoveIt! thinks about the robots as a single robot and will do the correct self collision checks.  You can attach the base link of each robot to a "dummy" world-attached link (typically with a floating or planar joint).  Obviously this is a bit of a hack, but if you need to use MoveIt with multiple robots this is one option that you can try.

-Acorn

Dave Hershberger

unread,
Feb 12, 2014, 4:28:33 PM2/12/14
to moveit...@googlegroups.com
ROS people (myself included) have thought about multiple robots a bunch but never really solved it nicely (as far as I know).

Here is a link to the "multimaster" special interest group page: http://wiki.ros.org/sig/Multimaster

With multimaster, the idea is to run each robot in/with its own ROS master and then have another master which sort of bridges them together.  The point being to only export from each robot's master those topics and services really needed by whatever external entity needs to know about multiple robots, and avoid publishing high-bandwidth topics like TF and pointclouds back and forth between robots.  I don't know if there is a canonical, well-established ros multimaster solution out there yet.  The SIG link above has pointers to various efforts.

If you really want to do close coordination between robots, like having two robot arms manipulate the same object, then you might want to go for something like Acorn suggests, and put them both into the same URDF file.  You might use xacro (an xml-macro tool) to combine them instead of simply copy-pasting them together.  Xacro is commonly used with URDF files already.

Dave

Dave Hershberger

unread,
Feb 12, 2014, 4:48:19 PM2/12/14
to moveit...@googlegroups.com
As far as I've seen, the PlanningScene class supports exactly one robot.

If you want to keep one robot static while another robot moves, then you can run a separate move_group instance for each robot and either sense the other robot with a camera and avoid it via an octomap, or you can listen to the TF for the "static" robot and enter its meshes into the moving robot's planning scene as scene objects to be avoided.

However, if you really want to plan motions that involve both robots moving at the same time and have the planner avoid robot/robot collisions during the planned motion, the only direct solution I know of is what Acorn said, which is to put both robots into a single URDF and treat them as a single robot.  I don't know much about the controller side of things, but clearly you would have some work to do to separate out the commanded joint motions and send the appropriate parts to each physical robot.

Dave

Steve Levine

unread,
Feb 12, 2014, 10:14:02 PM2/12/14
to Dave Hershberger, moveit...@googlegroups.com
Thanks a lot for your advice, Acorn and Dave - it's very useful. I agree that using a tool like xacro to generate a multi-robot URDF is probably the best way to go right now.

Thanks again,
Steve


Reply all
Reply to author
Forward
0 new messages