# Using Moveit with a robot arm on a gantry

I am trying out using moveit with a robot arm mounted on an xyz gantry. But I'm new to moveit and am unsure how best to build the model. The robot is an off the shelf UR-10 which I have a model for, the gantry is custom made and uses clearpath servos which already have ROS support. The UR-10 has an existing model and ROS driver which I have working.

Can Moveit plan a path for a robot arm on a gantry, or is that too many links?

Should I modify the URDF for the robot to include the gantry, or is there a way/reason to make them two separate things.

Will a system this complex be able to avoid self colliding in moveit?

Also I don't know how to incorporate the gantry servos even once I build a model in moveit. Any hints on where to start with that would be great. Basically I'm looking for direction here. I know no one is going to provide me the whole solution but letting me know if this can be done and what tools to use, or any other pointers, would really help.

thanks!

edit retag close merge delete

Hi PeteMakesThings,

I am currently completing a final year engineering research project, and my design includes the modelling and simulation and of a xyz gantry robot. As I have come from a mechanical engineering background I am completely new to the world of ROS and robotics. Thus, I would greatly appreciate all the help I can get.

Would it be possible if you shared the urdf files for your gantry system? So that I can have a look at and gain a better understanding of how to implement my 3D model in urdf format.

( 2020-04-07 03:35:48 -0500 )edit

Sort by » oldest newest most voted

(disclaimer: I'll use a few very definite looking "yes" and "no" answers here. These are all based on the rather minimal description of your system. Please keep that in mind when reading this answer)

Can Moveit plan a path for a robot arm on a gantry

Yes.

There is no difference between a gantry, a robot or a gantry + robot as far as MoveIt is concerned. It's just a collection of links and joints that happen to have a kinematic relationship. MoveIt (ultimately) plans in joint space, so any set of joints can be planned for.

or is that too many links?

No. There is no assumption on or limit to the nr of links and joints a model can contain (other than practical ones (ie: memory, CPU (planning time) and things like IK solver availability (if you want to plan for Cartesian goals)).

Should I modify the URDF for the robot to include the gantry,

No. Never add something to an existing model. Use composition where possible.

or is there a way/reason to make them two separate things.

I wouldn't make them "two separate things". As I wrote above: use composition:

• create the model of your gantry as a xacro macro. Make sure to take things such as prefixes into account.
• define a sane 'attachment' or 'tool' point for your gantry (likely the last link in its kinematic chain)
• create a composite xacro macro that combines the models of your gantry and the UR10
• create a workcell (or whatever you want to call it) xacro macro that places the composite structure (ie: gantry + robot) in its working environment (ie: model the workcell)

Making the composites macros themselves is not strictly needed, but is a nice convenience when you want to reuse those as composable parts. I always do it. If there is nothing to compose further, you create a top-level xacro file that just includes the highest-level composite and then instantiates it.

Minimal example of this approach: Working with ROS-Industrial Robot Support Packages/Example: adding an end-effector to a robot.

Will a system this complex be able to avoid self colliding in moveit?

Yes.

This is not complex at all.

The composite robot that is. You haven't described your environment, which could add significant complexity.

Also I don't know how to incorporate the gantry servos even once I build a model in moveit.

My suggestion would be to somehow wrap the "clearpath servos" in a FollowJointTrajectory action server. MoveIt can interface with that directly (using a MoveItSimpleControllerManager) making the whole system almost trivial to integrate (if you're using ur_modern_driver for the UR10, that also has a FollowJointTrajectory action server). Use ros_control for the servo interface, then configure it with a joint_trajectory_controller.

One thing to keep in mind is that with two action servers, motions will not be synchronised between the gantry and the UR10.

If that would be desired/required, you would have to probably convert ur_modern_driver (assuming you're using ...

more

Btw: knowing clearpath, they may already have a ros_control compatible hardware_interface for whatever controller is used with the servos you mention.

I would advise you to contact them and ask before doing anything yourself.

( 2019-08-26 12:12:10 -0500 )edit

Thanks for the help. I don't know how to do all of this but at least I know what to look for. I'm a controls engineer so the gantry is safe, it has current limits, a keep out zone, an E-stop, and the robot collision stop is tied into the servo E-brake. I just don't know much about ROS or Moveit.

So the goal is that this robot will be spraying a substance onto the surface of objects. I can't go into much detail beyond that. The objects will not change during run time. But different objects will be loaded between runs and it will need to plan a path that covers them without hitting the object or itself.

So, lots of follow up questions. I think I can make a xacro macro of the gantry, I don't know how to add a tool mounting ...(more)

( 2019-08-28 16:51:55 -0500 )edit

different objects will be loaded between runs and it will need to plan a path that covers them without hitting the object or itself.

So the goal is that this robot will be spraying a substance onto the surface of objects. I can't go into much detail beyond that.

In the end all applications are 98% the same. There's very little that makes it a unique application, but that's ok.

I'll probably need to do a whole other question about converting the UR modern driver to support them.

you wouldn't be changing ur_modern_driver to support the gantry servos. I would not recommend that.

( 2019-08-29 02:15:15 -0500 )edit

PS: normally I wouldn't really care, but I'm curious: I noticed the answer was upvoted first, and that upvote is now gone. Again: I don't care about the 10 points, but I am curious as to what changed.

( 2019-08-29 02:20:48 -0500 )edit