Moveit! For Moving An Object Attached to Multiple Arms Simultaneously
I have a box attached to the end effectors of three delta robots. I have managed to get the delta robots working with Moveit! by "chaining " all links in a serial way.
Setup: The box frame is placed at the centroid of the three robots' end effectors (the platform at the top of each robot), but the box as a whole is attached to all three of them at the same time.
Challenge: I would like to have the robots plan together for moving the box to a desired goal pose.
At this moment, I am able to
- plan for all robots individually at the same time. (Done by putting all three robots as subgroups into a super group and planning through movegroupinterface. Also I can see an interactive marker at each end-effector. )
I would like to have
- A box with an interactive marker attached to all three robots at the same. When I drag the interactive marker to a desired pose, all robots should move accordingly on Rviz. (This is what I'm not sure about)
Without adding the box (since I'm still not clear about the best way to add it), an illustration is below. Any idea how to achieve the above points?
Asked by RicoJ on 2020-11-11 21:52:25 UTC
Answers
So I have figured out a way to accomplish this:
- In URDF, add a subgroup called
object_arm
with a kinematic chain of "dummy joints and links" to allow for 6 dof motion of the object: 3 prisimatic joints, 3 revolute joints and 6 links - Attach a collision object to
object_arm
- In Rviz, make sure each robot works with Moveit! like shown above, enable
allow_external_comm
in the planning section. - In your
move_group_interface
, set up a subscriber to/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/update
to listen for marker position updates ofobject_arm
end effector. - In the subscriber callback, calculate the three robot's end-effector position given an update of
object_arm
end effector. - In the same subscriber callback, update each robot's end-effector goal query pose by calling
/rviz/moveit/move_marker/goal_*
. This is the best way that I found to update goal queries in the Rviz plugin.
I hope this will be helpful to people who are looking to plan with multiple robots simultaneously using Moveit! Also, please let me know if there are other alternatives.
Asked by RicoJ on 2020-11-14 18:10:18 UTC
Comments
What do you mean by "both arms" when there seem to be 3 delta robots with 3 arms each? I am confused about where the box is supposed to go and rotate, and what the actual question is. What of this have you tried implementing, and where are you now?
Asked by fvd on 2020-11-12 02:21:30 UTC
Hi, Thanks for your comment. I edited my question again to make it clear. I hope now it's clear in terms of the setup of the box and what the task is!
Asked by RicoJ on 2020-11-12 10:30:33 UTC
Asked by fvd on 2020-11-13 00:16:49 UTC
Hi, thanks again for raising these points. I just made some edits to my questions accordingly. 1. Yes, it's more accurate to call them "delta robot". 2. It is not directly related to this problem, but I will explain as a side note. A Moveit! group has to be in a "chain" structure (i.e, no close loop). So for parallel platforms like Delta Robots, the URDF needs to be modified. By "chaining the links" in URDF, I meant "adding extra joints and links so that the parallel platform links can be connected in a serial way, like a chain". This is how I made each Delta Robot working with Moveit!
Asked by RicoJ on 2020-11-14 17:56:35 UTC
I am not personally affected, but I think a more detailed explanation might be helpful for someone somewhere. If you want to post something like a MoveIt tutorial, a personal blog post or a ROS Answers post you answer yourself, please feel free :)
Asked by fvd on 2020-11-27 01:15:58 UTC