0
$\begingroup$

Rosanswers logo

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!


Originally posted by PeteMakesThings on ROS Answers with karma: 40 on 2019-08-26

Post score: 1


Original comments

Comment by Mat_ROS on 2020-04-07:
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.

Thank you in advance.

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

(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 that) into something compatible with the combined_robot_hw variant of hardware_interfaces. That would allow you to expose all joints of the gantry+robot as a single set to the joint_trajectory_controller. ur_modern_driver was not written with this in mind, so that may not be straightforward.

An asynchronous setup should be relatively easy to achieve, so that may be something to try first.

Final comment: you don't describe what you will be using this setup for, but "gantry" implies large and dangerous. Be sure to take proper safety measures and don't rely on MoveIt's collision avoidance only.


Originally posted by gvdhoorn with karma: 86574 on 2019-08-26

This answer was ACCEPTED on the original site

Post score: 1


Original comments

Comment by gvdhoorn on 2019-08-26:
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.

Comment by PeteMakesThings on 2019-08-28:
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 point to it, and I'll need to look into how a composite xacro works.

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

Comment by gvdhoorn on 2019-08-29:\

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

Take a look at Optimization Motion Planning with Tesseract and TrajOpt for Industrial Applications (slides).

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.

Comment by gvdhoorn on 2019-08-29:
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.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.