Solvers#

Kinematic solvers map joint positions to end-effector poses (forward kinematics, FK) and find joint positions for target poses (inverse kinematics, IK). Use MotionGenerator when you need a timed trajectory between poses.

Choose a solver#

Solver

Use it for

PytorchSolver

Numerical IK with batched PyTorch computation and multiple seeds.

DifferentialSolver

Jacobian-based joint updates for differential pose control.

PinkSolver

Optimization with frame tasks and null-space posture objectives.

PinocchioSolver

Single-target numerical IK using Pinocchio.

OPWSolver

Analytical IK for 6-DOF arms matching the OPW parameterization.

SRSSolver

Analytical IK for 7-DOF spherical-rotational-spherical arms.

URSolver

Analytical IK for supported Universal Robots models.

NeuralIKSolver

Experimental learned IK with a trained Franka Panda checkpoint.

Analytical solvers require matching robot geometry. Numerical solvers support more general chains but depend on seed quality and convergence settings. For differentiable training and task-parameter optimization, use the standalone Torch IK layer.

Shared FK/IK conventions#

Configure the robot model, joint order, root link, end link, and optional TCP through the solver’s configuration. Joint positions use radians; pose matrices are homogeneous transforms. Direct solver calls use the solver’s root/TCP conventions. For simulation targets, use the robot’s IK methods and their documented pose frame; they handle conversion to the solver root frame.

For solvers that support batches, joint inputs have shape (B, DOF) and pose inputs have shape (B, 4, 4). A basic FK-to-IK call is:

target_pose = solver.get_fk(qpos_seed)
success, solutions = solver.get_ik(
    target_xpos=target_pose,
    qpos_seed=qpos_seed,
)

get_ik() returns validity/success first and joint solutions second. Check success before using a solution. Output shapes and the meaning of return_all_solutions differ by solver; the pages below document these exceptions. PinocchioSolver currently solves one target per call.

For full signatures and configuration fields, see the solver API.