A real-time motion planner?

This is just a discussion of if and how to integrate real-time motion planners in MoveIt!

Currently the jog_arm package does this with a Jacobian-based jogger – it subscribes to joystick commands or force feedback commands to calculate a trajectory. I’m OK keeping this as a separate package but there are lots of advantages to moving under the MoveIt! umbrella, I think.

Of course, it’s also worth considering how future real-time planners might fit in…

Pros of the real-time Jacobian planner, in comparison to the current MoveIt! planners:

  • Determinism (if starting from the same pose, with the same target, its motion will be repeatable)
  • ~0 planning time
  • No reconfigurations, i.e. sudden, wild swings of the arm
  • The trajectory can be altered in real-time

Drawbacks of the Jacobian planner:

  • Trajectories can’t be previewed in RViz
  • The planner takes a straight line – it doesn’t know how to plan around obstacles, singularities, or joint limits
  • This Jacobian technique is generally only useful over short distances.

Thanks!

1 Like

Hi Andy,

Can you please edit your post above with links to the said packages e.g. jog_arm?

Do you think the functionality in this realtime motion planner mimics some of the capabilities in the RobotState:computeCartesianPath() functions in MoveIt! already? Can we have them share the same code?

How does jog_api connect to the low level controllers? This is the biggest question I ask myself. The FollowJointTrajectory action interface might not be fast enough - it wasn’t for me but I know others have had success with it by changing the TCIP stack. But that isn’t for the faint of heart IMHO.

I would like to see this added into the ros-planning/moveit repo, in the https://github.com/ros-planning/moveit/tree/kinetic-devel/moveit_experimental package for now.

OK, thanks for the feedback.

The FollowJointTrajectory action interface might not be fast enough

You might be right for some robot models/controller setups. On UR robots it’s fine. Velocity control helps in that regard. I think the other two who have used it on custom robots are doing:

  • Position control

  • They are not using ros_control but have written their own low-level controllers. I will have to confirm this for @machinekoder 's case.

I believe it’s also being used on a Motoman arm, so I’ll check for details there as well.

It does mimic some of the capabilities of computeCartesianPath but I don’t think you can achieve smooth compliance or teleoperation with computeCartesianPath() and an OMPL planner. I have tried and it wasn’t fast enough. Yep, it would be good if code could be shared… I’ll work on that.

BTW I added a library for compliance into the devel branch. I would like to get to the point where DARPA Challenge tasks like turning a valve with two grippers, with compliance, is supported just as well as MoveIt! supports point-to-point motion.

I’ve looked through the code and I think it would be great to see this merged into the experimental package! Perhaps open a Github pull request and we can continue discussion there?

This package looks quite interesting. I was wondering if the merge into experimental package is done and what’s the github address for that.

@hooman The merging is still happening at https://github.com/ros-planning/moveit/pull/1360. There’s been a lot of iteration since these last posts though, it should be close to merging.

thanks for sharing the pull request address.