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.
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.
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?