MoveIt Servo Inverse Kinematics Improvements

Singularity avoidance with new servo IK

A new, exciting improvement has made it into MoveIt Servo! Until now, MoveIt Servo has used the inverse Jacobian method for computing inverse kinematics. While this may work in many situations, a significant portion of robotics research has been dedicated to more performant algorithms for computing inverse kinematics. A primary focus of this research is redundancy resolution, in which robots with redundant degrees of freedom may utilize alternative joint configurations to achieve the same end-effector pose. By doing so, robots may be enabled to better avoid singularities, avoid collisions, and lower power consumption, to name a few benefits.

In order to take advantage of these ongoing innovations in inverse kinematics, MoveIt Servo now has the capability to use a plugin architecture for computing inverse kinematics. If you have an idea for a new way to compute inverse kinematics, you can now easily integrate it into MoveIt! Given the modularity of a plugin architecture, MoveIt can be agnostic to exactly how the inverse kinematics is computed—allowing each user to decide what’s best for their application.

Where can I find one of these kinematics plugins?

MoveIt comes packaged with a few kinematics plugins:

  • Cached IK Kinematics Plugin: Use a persistent cache to speed up similar inverse kinematics calculations

  • IKFast: automatically analyze any complex kinematic chain for common patterns that allow for an analytic solution

  • KDL, LMA: Wrappers around the numerical inverse kinematics solver provided by Orocos

  • SRV: A client for querying for IK solutions from a ROS service.

Another popular inverse kinematics plugin, external to MoveIt, is bio_ik, which was recently ported to ROS 2.

This plugin provides the ability to specify cost functions that can prioritize certain solutions to the inverse kinematics problem, as well as provide custom position & orientation constraints. These cost functions provide a rich set of ways one can specify their priorities when solving inverse kinematics. Additionally, it has been shown to outperform other inverse kinematics solvers in singularity avoidance. One may also specify cost functions that explicitly penalize robot configurations that are close to a singularity. If you struggle with running into singularities when teleoperating your robot with MoveIt Servo, bio_ik could be for you. We expect it to be the most common choice for Servo in the future.

11 Likes

Great job! Is there a paper describing the comparisons to other IKs?

The only option that really makes sense with MoveIt Servo is bio_ik.

The other IK plugins mentioned here probably only make sense for trajectories. I mean, KDL will work for Servo but it doesn’t really bring any benefits.

TracIK has some good performance comparison data vs KDL: Bitbucket
(TracIK isn’t available in MoveIt2 quite yet)

There are similar stats out there for bio_ik but I can’t find them a.t.m.

3 Likes