Support for tool changing
This is probably more of a question for ROS-Industrial type applications, but with ROS what would be the best way to support the ability to load and unload a tool on the end of a robotic arm? Specifically to do with the dynamic plannning and collision geometry constraints.
To use a tool changer I believe the following is required;
- Use a single IK fast generated kinematics solver for the robot arm + tool change mount. (as this won't change)
- Load tools with transforms to the tool tip and collision geometry from either a URDF, yaml or database
- Calculate IK solutions with modified end effector tool tip
- Enable and disable the collision geometries associated with each gripped tool
- Provide ability to adjust tool transforms at run-time after calibration routines
As far as I can tell robot_model doesn't really support such behavior. Has anyone managed to enable or disable specific end effectors and their associated collision geometry at runtime?
We have managed to prove that we can apply tool offset transform to the low level IK code and tie this into the planners.
One option is to treat the gripped tools like grasped objects, but this seems a bit hacky.
Has anyone had a similar use case?
I have found the following with similar scenarios;
- UW biorobotics Raven 2 surgical robot;
- https://github.com/uw-biorobotics/rav...
- Suggest using dynamic reconfigure / service to modify tools
USARSimROS using KUKA KR60 robot as example for their simulation bridge
- http://sourceforge.net/p/usarsimros/w...
- Suggest that the robot urdf and generated ikfast IK should only be up to the tool changer mount.
- "A robot with a toolchanger effector does not need a new URDF for each end effector that can be attached. The URDF should contain only a reference to the toolchanger, and will handle attaching/detaching end effectors from it as it runs."
Other tool changer question
- http://answers.ros.org/question/49818...
- Suggests loading tool urdfs separately and using node to publish transforms of tools to robot
- Is this compatible with collision checking?
Jeremy, ros answers won't allow me to up vote this more than once :( I'm not aware of a clean solution to this problem, but one is needed (especially for ROS-I applications). Thanks for asking!
Thanks for the upvote Shaun. We are going to try a few things, I'll let you know how it goes.
Hi Jeremy, did you find a solution for your issue? It is indeed a hard requirement for any Industrial application...
Thanks
+1 This is something we have recently begun trying to figure out as well...
Something that should be possible with the current state of ROS / MoveIt would probably involve a 'bare' robot URDF (ie: sans EEF), and attaching the EEF as a collision object using the appropriate MoveIt APIs. For visualisation this wouldn't be too nice, but it should make planning work, with EEF.
Awesome; thanks for the comment gvdhoorn! This is the approach we are currently exploring so it is nice to get some confirmation that we are on the right path.
Note that I haven't verified that too extensively yet.
Also note that you'd probably have to transform any EEF pose back to the
tool0
(or whatever link you have configured as the last link of your chain) before asking MoveIt to plan for it. But that depends on some factors.It would be interesting to hear an update from people who have attempted this. We have a similar use case (and I am sure many others will, too).