Do I really need to build up splines based on the waypoints or can I tell MoveIt to sample the trajectory with 1ms?
If I recall correctly, MoveIt sort-of assumes a lower-level controller that accepts JointTrajectory
messages exists, and that that lower-level controller will do all the 'heavy lifting' to execute the trajectory. In the case of the PR2 that is the whole real-time capable pr2_controllers infrastructure. That is not really usable with other robots though.
You might be able to re-use the controllers in the ros_control package. One of the supported interfaces is a JointTrajectoryAction
server, which internally runs PID (or custom, more advanced) controllers to take joints through the trajectory points it receives. The ros_control
nodes are capable of running in real-time as well. Be sure to watch the presentation Adolfo gave on ROSCon14, it provides a much more in-depth picture of what is going on then the documentation currently does.
Note that ros_control
by default does not expose a ROS-Industrial compatible motion interface, but that can be solved by remapping a few topics.
Edit: you might also be interested in the ongoing work in the kuka_experimental repository of the ROS-Industrial Github organisation, and the ros-sig-kuka mailing list. The kuka_experimental
repository has an open PR for a ros_control
based driver using RSI. Perhaps you can use it as an example of how to implement a similar system for FRI.
Contacting either the ROS-Industrial mailing list and / or the ros-sig-kuka
would be a good idea anyway: there are a number of projects currently underway (CentroEPiaggio/kuka-lwr being one of them), and it would be nice to avoid redoing existing work.
There is a ROS Industrial Trajectory Filter for exactly this problem. It a ROS Type Wrapper for the KDL Velocity Profile Spline to sample it down to n-parts or duration.