ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Using a joint with motor on other than parent link thru Transmission

asked 2016-02-10 03:54:06 -0500

Bas gravatar image

updated 2016-02-15 06:23:13 -0500

I have made a custom robot arm and I'm making an URDF file for that. situation:

  • lower arm, mounted on base
  • upper arm mounted on lower arm
  • motor for upper arm mounted on base
  • motor and upper arm connected via belt.

I've searched in the tutorials on URDF and "transmissions" came up.

Are there some examples or best practices on how to set up this situation in the URDF model so I can have correct behaviour in Moveit etc?

edit: With correct behaviour I mean generated trajectories that match the situation

Thanks in advance, Bas

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2016-02-15 07:00:22 -0500

gvdhoorn gravatar image

Tbh: I don't think you necessarily need to use transmissions for this.

Transmissions can be useful, but I'm not sure how useful if you have a simple position controlled manipulator that you wish to make ROS-compatible.

The level at which most control nodes / ros_control controllers interact with hardware of this kind is at the (abstract) joint level, where the specifics about how that joint is finally controlled (and through which mechanism) isn't necessarily available / important. As long as the set of joints you model in your URDF (and thus 'expose' to the rest of ROS (ie: MoveIt, etc)) can be controlled in some way to execute the planned motion, things should just worktm.

Things to check / take care of (off the top of my head):

  • make sure all axis definitions in joints correspond to your hardware (ie: 1 for "positive angle increase maps to positive rotation of frame" and -1 for the inverse)
  • have a controller capable of consuming JointTrajectory messages that is able to map between URDF joint names and your hardware / lower level controller (either something custom or using any one of the available abstractions (ros_control fi))
  • make sure origins of URDF joints correspond with their locations in your real system (don't just assume things are ok because your EEF frame ends up in the right Cartesian location)
  • define position, velocity, acceleration and effort limits correctly: MoveIt fi uses those to not only avoid planning invalid paths, but also when populating the velocity, acceleration and effort members of JointTrajectoryPoint messages
edit flag offensive delete link more


the reason I look into this, is that the positions of the JointTrajectoryPoint need to be postprocessed otherwise. For example when the lower arm (+ all above) rotate, the angle of the upper arm wrt the lower arm doesn't change. But physically not rotating the motor while moving the lower arm does.

Bas gravatar image Bas  ( 2016-02-15 07:32:24 -0500 )edit

Sounds similar to joint-2-3 coupling of some industrial robots (see this question fi). One approach would be to handle this in your lower-level controller, and expose only 'clean' joints to ROS.

gvdhoorn gravatar image gvdhoorn  ( 2016-02-15 08:30:32 -0500 )edit

Also: I'm not sure transmissions can be used to express that relationship (but I'm by no means an expert). This sounds like something a mimic joint could do, but afaik those cannot actually be actuated. Hence the approach to abstract such relationships and delegate to lower-level controllers.

gvdhoorn gravatar image gvdhoorn  ( 2016-02-15 08:33:57 -0500 )edit

Thanks, Although it feels a bit unnatural I'll use yout proposed approach and do the math in the low level controller. I'll leave the other possibilities (and lack of transmission examples) for another time.

Bas gravatar image Bas  ( 2016-02-15 15:29:07 -0500 )edit

Well another approach could be to handle the joint linkages in a custom ros_control controller or the hardware interface plugin. Personally I'd put it at the lowest level of abstraction that can comfortably deal with it, so as to shield it from higher layers. Let's you reuse as much as possible.

gvdhoorn gravatar image gvdhoorn  ( 2016-02-15 15:35:49 -0500 )edit

Question Tools



Asked: 2016-02-10 03:52:10 -0500

Seen: 744 times

Last updated: Feb 15 '16