Configure Inverse Kinematics
MoveIt Pro ships with a highly optimized pose inverse kinematics solver, called PoseIK
.
This document describes PoseIK
and how to configure it as the default IK solver.
PoseIK
PoseIK is a highly efficient implementation of a Jacobian-based Newton-Raphson Inverse Kinematics Solver, using native MoveIt! types and algorithms.
The solver shows significant performance gains compared to KDL
and TRAC_IK
. These are the average solve times, in milliseconds, for three common robots:
Solve times (ms) | KDL | TRAC_IK | PoseIK |
---|---|---|---|
panda | 1.58 | 0.306 | 0.0421 |
fanuc | 3.28 | 0.489 | 0.0416 |
Kinova Gen3 | 1.073 | 0.386 | 0.0321 |
These numbers were obtained using the ik_benchmarking package on a 12th Gen Intel(R) Core(TM) i7-12700H, 2.7 GHz, under the same conditions.
Use PoseIK as the default solver
To use this solver as the default IK solver in MoveIt Pro, update your kinematics config files (e.g. kinematics.yaml
, servo_kinematics.yaml
, etc.) to use this solver for a given planning group:
manipulator:
kinematics_solver: pose_ik_plugin/PoseIKPlugin
solve_mode: "first_found" # See solve modes below.
target_tolerance: 0.001 # Maximum error in meters allowed for the solution.
For an example, check out the lab_sim
config.
Solve modes
Two solve modes are implemented:
first_found
: In this mode the solver will return as soon as a solution is found. It won't try to optimize for any cost. Use this mode if you care about solve speed and don't have a preference on the solution.optimize_distance
: In this mode the solver will always run for a given period of time, in order to find better solutions, even if one was found already. The solver will prefer solutions closer to the seed (initial joint configuration) in joint-space. Use this mode if your application can afford spending additional time in IK in exchange for better solutions.
The solve mode can be configured via the solve_mode
config parameter, to be included in the YAML config file (see example above).