Motion planning algorithms

The builtin motion service plans in two stages. It first generates inverse kinematics (IK) solutions for the goal pose and checks whether the arm can reach one along a straight line through joint space. When no straight-line path clears collisions and constraints, it falls back to the cBiRRT search algorithm. When you need to change how the motion service plans, this page tells you what runs in each stage, what the defaults are, and where each tunable lives. For how the two stages work, their limits, and what to try when planning fails, see How motion planning works.

Planning strategy

StageWhat runsOutcome
1. Direct interpolationIK solution generation plus a straight-line joint-space collision checkReturns the straight-line path when a low-cost IK solution passes the check
2. cBiRRT fallbackSampling-based bidirectional tree search seeded with the stage-1 IK solutionsReturns a smoothed path, or an error when no path exists within the planning timeout

cBiRRT

FieldValue
NamecBiRRT (Constrained Bidirectional Rapidly-Exploring Random Tree)
RoleFallback when no low-cost IK solution has a valid straight-line path
Source coderdk/motionplan/armplanning/cBiRRT.go
Source paperBerenson et al., Manipulation planning on constraint manifolds, 2009
PropertiesSampling-based, bidirectional, probabilistic

Planning defaults

The full default set is documented in Motion service configuration. The planner-relevant entries are:

ParameterDefault
Planning timeout300 seconds
Resolution2.0 (mm or degrees/step)
Max IK solutions100
Direct-path cost gate3x the joint travel of the best IK solution
Smoothing iterations (cBiRRT paths)3 passes of sizes 10, 3, 1
Collision buffer1e-8 mm (effectively zero)

Tuning surfaces

Callers override a default in one of two places: persistently in the motion service config, or per call through the extra map on a Move request. The table below shows which tunables live where.

WhereScopeExample tunables
Motion service config (attributes)Persistent, per-servicenum_threads, input_range_override, planner-diagnostic flags
extra map on a Move requestPer-requestcollision_buffer_mm, max_ik_solutions, timeout

See Motion service configuration for the full list of configuration attributes.

What’s next