Skip to main content
LeRobot includes specialized processors for robot kinematics, end-effector control, and coordinate transformations. These processors are used to convert between joint space and Cartesian space, apply safety bounds, and handle robot-specific conventions.

Overview

Robot processors handle transformations specific to physical robots:
  • Kinematic transformations: Forward/inverse kinematics between joints and end-effector
  • Safety bounds: Workspace limits and velocity constraints
  • Delta actions: Relative vs absolute position commands
  • Gripper control: Velocity to position conversion
These processors are typically used in the robot’s action pipeline, converting policy outputs to robot commands.

Forward Kinematics

Convert joint positions to end-effector pose:
See lerobot/robots/so_follower/robot_kinematic_processor.py:426 for the implementation.

Inverse Kinematics

Convert end-effector pose to joint positions:
See lerobot/robots/so_follower/robot_kinematic_processor.py:252 for the implementation.

IK Configuration

RobotKinematics
required
Robot kinematics model loaded from URDF
list[str]
required
List of motor names in order (excluding gripper)
bool
default:"true"
Use current joint positions as IK initial guess. If False, uses previous IK solution.

Delta Actions

Convert relative (delta) commands to absolute end-effector poses:
See lerobot/robots/so_follower/robot_kinematic_processor.py:37 for the implementation.

Delta Action Configuration

dict
required
Scaling factors for delta commands (meters per unit). Keys: “x”, “y”, “z”
bool
default:"true"
If True, latch reference pose when action is first enabled. If False, always use current pose as reference.
bool
default:"false"
Use IK solution from complementary data instead of measured joints

Safety Bounds

Apply workspace limits and velocity constraints:
See lerobot/robots/so_follower/robot_kinematic_processor.py:185 for the implementation.

Safety Configuration

dict
required
Dictionary with “min” and “max” keys containing [x, y, z] bounds
float
default:"0.05"
Maximum allowed position change per step (meters). Larger movements are scaled down.

Gripper Control

Convert gripper velocity to position:
See lerobot/robots/so_follower/robot_kinematic_processor.py:341 for the implementation.

Discrete Gripper Mode

Handle discrete gripper actions (open/close/stay):

Complete Pipeline Example

Combine robot processors for end-effector control:

Custom Robot Processor

Create a processor for your robot:

Best Practices

1. Reset State Between Episodes

Many robot processors maintain state that should be reset:

2. Handle Singularities

Inverse kinematics can fail near singularities:

3. Validate Kinematics Model

Verify forward/inverse kinematics consistency:

API Reference

ForwardKinematicsJointsToEE

See lerobot/robots/so_follower/robot_kinematic_processor.py:492
RobotKinematics
Robot kinematics model
list[str]
Joint names (excluding gripper)

InverseKinematicsEEToJoints

See lerobot/robots/so_follower/robot_kinematic_processor.py:252
RobotKinematics
Robot kinematics model
list[str]
Joint names (excluding gripper)
bool
Use current joints as IK initial guess

EEReferenceAndDelta

See lerobot/robots/so_follower/robot_kinematic_processor.py:37
dict
Scaling for delta commands {"x": float, "y": float, "z": float}
bool
Latch reference on enable vs always use current

EEBoundsAndSafety

See lerobot/robots/so_follower/robot_kinematic_processor.py:185
dict
Workspace bounds {"min": array, "max": array}
float
Maximum position change per step (meters)