Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configuration Reference

All configuration structs, fields, and presets.

PlannerConfig

Controls motion planner behavior. Used by all planners through the Planner facade.

Fields

FieldTypeDefaultDescription
timeoutDuration50msMaximum planning time before timeout
max_iterationsusize10,000Upper bound on sampling/expansion iterations
collision_marginf640.02Minimum clearance from obstacles (meters)
shortcut_iterationsusize100Number of random-shortcut passes
smoothbooltrueApply B-spline smoothing after shortcutting
workspace_boundsOption<[f64; 6]>None[min_x, min_y, min_z, max_x, max_y, max_z]

Presets

PlannerConfig::default() – General purpose.

#![allow(unused)]
fn main() {
PlannerConfig {
    timeout: Duration::from_millis(50),
    max_iterations: 10_000,
    collision_margin: 0.02,
    shortcut_iterations: 100,
    smooth: true,
    workspace_bounds: None,
}
}

PlannerConfig::realtime() – Low-latency planning (10ms budget).

#![allow(unused)]
fn main() {
PlannerConfig {
    timeout: Duration::from_millis(10),
    max_iterations: 2_000,
    collision_margin: 0.01,
    shortcut_iterations: 20,
    smooth: false,
    workspace_bounds: None,
}
}

PlannerConfig::offline() – Thorough offline planning (500ms budget).

#![allow(unused)]
fn main() {
PlannerConfig {
    timeout: Duration::from_millis(500),
    max_iterations: 100_000,
    collision_margin: 0.02,
    shortcut_iterations: 500,
    smooth: true,
    workspace_bounds: None,
}
}

IKConfig

Controls inverse kinematics solver behavior.

Fields

FieldTypeDefaultDescription
solverIKSolverAutoSolver selection (Auto, DLS, FABRIK, OPW, Subproblem, Subproblem7DOF)
modeIKModeFull6DFull6D, PositionOnly, or PositionFallback
max_iterationsusize100Max iterations for iterative solvers
position_tolerancef641e-4Position convergence tolerance (meters)
orientation_tolerancef641e-3Orientation convergence tolerance (radians)
check_limitsbooltrueEnforce joint limits
seedOption<Vec<f64>>NoneStarting configuration (uses mid-config if None)
null_spaceOption<NullSpace>NoneNull-space objective for redundant robots
num_restartsusize0Random restart count for escaping local minima

Solver Options

SolverConstructorBest For
AutoIKConfig::default()Automatic selection based on robot geometry
DLSIKConfig::dls()General purpose, any DOF
FABRIKIKConfig::fabrik()Position-focused tasks
OPWIKConfig::opw()6-DOF spherical wrist robots
SubproblemDirect construction6-DOF intersecting wrist axes
Subproblem7DOFDirect construction7-DOF robots

Convenience Constructors

#![allow(unused)]
fn main() {
IKConfig::dls()             // DLS with default damping 0.05
IKConfig::fabrik()          // FABRIK solver
IKConfig::opw()             // OPW analytical solver
IKConfig::position_only()   // Position-only mode
IKConfig::with_fallback()   // Try Full6D, fall back to PositionOnly
}

ServoConfig

Controls the reactive servo controller for teleoperation and tracking.

Fields

FieldTypeDefaultDescription
rate_hzf64500.0Control loop rate
input_typeInputTypeTwistTwist, JointJog, or PoseTracking
collision_check_hzf64100.0Collision check frequency
singularity_thresholdf640.02Manipulability threshold
slowdown_distancef640.15Distance to start decelerating (meters)
stop_distancef640.03Emergency stop distance (meters)
velocity_limitsVec<f64>[]Per-joint vel limits (empty = use robot)
acceleration_limitsVec<f64>[]Per-joint accel limits (empty = defaults)
pose_tracking_gainf645.0Proportional gain for pose tracking
singularity_dampingf640.05Damping for singularity-robust pseudoinverse
max_delta_per_tickf640.02Max position change per tick (radians)

Presets

ServoConfig::teleop() – General teleoperation (joystick, spacemouse). Uses Twist input, generous collision margins, moderate precision.

ServoConfig::tracking() – Pose tracking (following a moving target). Higher tracking gain (10.0), tighter collision checking (200 Hz), PoseTracking input mode.

ServoConfig::precise() – Precise manipulation (assembly, insertion). Small movements per tick (0.005 rad), tight singularity avoidance, fine collision checking (250 Hz).

GpuConfig

Controls GPU-accelerated trajectory optimization.

Fields

FieldTypeDefaultDescription
num_seedsu32128Number of parallel trajectory seeds
timestepsu3232Waypoints per trajectory
iterationsu32100Gradient descent iterations
collision_weightf32100.0SDF collision cost weight
smoothness_weightf321.0Jerk minimization weight
goal_weightf3250.0Goal-reaching cost weight
step_sizef320.01Gradient descent step size
sdf_resolutionf320.02SDF voxel resolution (meters)
workspace_bounds[f32; 6][-1,-1,-0.5,1,1,1.5]SDF workspace bounds
seed_perturbationf320.3Random perturbation magnitude (radians)
warm_startOptionNoneInitial trajectory from RRT

Presets

GpuConfig::balanced() – Default, good balance of speed and quality. 128 seeds, 32 timesteps, 100 iterations.

GpuConfig::speed() – Fast optimization for real-time replanning. 32 seeds, 24 timesteps, 30 iterations, coarse SDF (0.05m).

GpuConfig::quality() – High-quality offline optimization. 512 seeds, 48 timesteps, 200 iterations, fine SDF (0.01m).

ExecutionConfig

Controls trajectory execution on hardware.

Fields

FieldTypeDefaultDescription
rate_hzf64500.0Command streaming rate
position_tolerancef640.1Max position deviation (radians)
velocity_tolerancef640.5Max velocity deviation (rad/s)
timeout_factorf642.0Abort if execution exceeds expected_time * factor
joint_limitsOptionNone[(lower, upper)] for pre-execution validation
command_timeout_msu64100Per-command timeout
require_feedbackboolfalseRequire FeedbackSource for monitoring
watchdogOptionNoneSafety watchdog configuration

Presets

ExecutionConfig::default() – Simulation and testing. Relaxed tolerances, no feedback required, no watchdog.

ExecutionConfig::safe(&robot) – Production deployment. Auto-populates joint limits from URDF, enables feedback requirement, configures safety watchdog (50ms timeout, ZeroVelocity action).

#![allow(unused)]
fn main() {
let config = ExecutionConfig::safe(&robot);
}