July 22, 2022 MoveIt Servo Inverse Kinematics Improvements

MoveIt Servo Inverse Kinematics Improvements

by Wyatt Rees

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.