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

Capability matrix

Everything the system can do, capability by capability, against where you can do it. Compiled by reading the actual surfaces — the clap verb enum in crates/caliper-cli/src/main.rs, the typed Python surface in crates/caliper-py/python/caliper/__init__.pyi, the sidecar exports in learn/caliper_learn/__init__.py (+ its caliper-learn console script), and the Studio modes/store in apps/studio/src — not from memory. A ✗ is an honest gap: the engine can do it, that face does not expose it (yet).

Faces: CLI · Python · Studio. Engine column links to the capability page.

Model & assets

CapabilityEngineCLIPythonStudio
Load URDF / xacro, summarize structurecaliper-model (architecture)loadRobot.from_urdf, .name/.ndof/.joint_names/.joint_limits/.frame_names/.tip_frame/.has_inertiaOpen URDF… / samples / recents, ⌘O
Asset doctor — diagnose A001A016caliper-doctordoctordoctor(path)automatic on every load (error-banner findings)
Asset repair — repaired copy, never in-placecaliper-doctordoctor --repair [--density] [--out]doctor(path, repair=True, density=…)Repair & reload button
MJCF (MuJoCo XML) export (+ hull-mesh assets)caliper-sim-mujoco::mjcfmjcf (--hull-meshes)model_to_mjcf (no hull-mesh export — primitive colliders only)
Robot zoo — fetch a vendored real URDFcaliper-cli::zoofetch <name> / fetch --list

Kinematics & analysis

CapabilityEngineCLIPythonStudio
Forward kinematics (every frame)caliper-kinematicsfkRobot.fklive in every mode (Jog sliders drive it)
Geometric Jacobian (world/body)caliper-kinematicsRobot.jacobian✗ (internal to the HUD analysis)
Iterative IK (DLS/LM, restarts)caliper-ikikRobot.ikJog tip gizmo (singularity-governed)
Analytic 6R IK (branch set)caliper-ik::analyticik --analyticRobot.analytic_ik
Singularity / manipulability analysiscaliper-kinematicsanalyzeRobot.analyze / manipulability / ellipsoidsingularity HUD + manipulability ellipsoid
Redundancy: nullspace step, resolved-ratecaliper-kinematicsRobot.nullspace_step / Robot.resolved_rate
SE(3) log/exp mapscaliper-spatiallog6 / exp6

Motion

CapabilityEngineCLIPythonStudio
MOVE_J (jerk-limited S-curve)caliper-motionmove --goalRobot.move_jMotion mode / palette "Plan move to home" / poses
MOVE_L (Cartesian line)caliper-motionmove --targetRobot.move_lMotion mode (gizmo target)
MOVE_C (circular arc via a point)caliper-motionmove --target --viaRobot.move_c
Waypoint retimingcaliper-motionPlanner.plan_trajectory (plan → retimed Trajectory)
Time-optimal (TOPP) retimingcaliper-motionmove --time-optimalRobot.retime_time_optimal
Named pose librarycaliper-motion::PoseLibraryMotion mode (save/plan-to/delete poses)
Trajectory lint T001T007caliper-kinematics::lint_pathreportlint_path
Collision lint T008/T009CLI-side over caliper-collisionreport --ground/--obstacle/--clearance [--strict]
Cycle-time + path-quality reportcaliper-kinematics::path_reportreport

Dynamics & simulation

CapabilityEngineCLIPythonStudio
RNEA / CRBA / forward dynamics / gravitycaliper-dynamicsdynRobot.rnea / crba / forward_dynamics / gravity_torque✗ ¹
Passive/forced time-stepped simulationcaliper-dynamics::SimulatorsimSimulator (step/rollout/energy)Simulate: gravity drop
MuJoCo contact simulation (props, ground)caliper-sim-mujoco✗ (use mjcf + MuJoCo)Simulate: contact drop / hold / drive-to (mujoco builds)
Live sim session — fixed-1 ms stepped loop, PD hold target, pause/deterministic-reset/stop, ~60 Hz state streamStudio backend over caliper-hal + caliper-sim-mujoco (Studio-internal IPC, not a public API)Simulate: live session — mujoco builds get contacts + props + live contact count; default builds fall back to the builtin gravity integrator; drivable by hand (sliders / IK gizmo / keyboard jog / gamepad tip drive, Space = freeze); teleop takes record straight into LeRobotDataset v3.0 at exact tick decimation (verified to load in lerobot 0.6.0)
Contact material presets (Rigid/Rubber/Foam/Steel/Wood/Custom)caliper-sim-mujoco::mjcf✗ (mjcf has no material flag)model_to_mjcf(material=…) — preset name or custom dict
Contact stability linter C001C003caliper-sim-mujoco::lintautomatic after every contact bake (findings under the Simulate badges; mujoco builds)
Convex-decomposition seam (identity impl)caliper-sim-mujoco

Collision & planning

CapabilityEngineCLIPythonStudio
Self/world collision querycaliper-collisioncollideCollisionModel.querySimulate: Check collision
EPA penetration contactscaliper-collisioncollide --contactsCollisionModel.contacts
RRT-Connect (+ shortcut smoothing)caliper-planningplanPlanner.plan / verifySimulate: Plan to home (RRT)
RRT* (asymptotically optimal)caliper-planningplan --optimalPlanner.plan_optimal
PRM roadmap planningcaliper-planningplan --prmPlanner.plan_prm
Plan to a Cartesian posecaliper-planningplan --targetPlanner.plan_to_pose
CHOMP-style trajectory optimizationcaliper-trajopt✗ (engine-only)
Collision-aware reachabilitycaliper-planning::reachreachReachChecker.status / reachable✗ ¹

Control, data & learning

CapabilityEngineCLIPythonStudio
Computed-torque control loopcaliper-halrunControlLoop (run_to / rollout_to / step_with_target / run_stream)Simulate: Drive to home (control)
Safety monitor (limits gate, e-stop)caliper-halinside run ²SafetyMonitorinside the control rollout ²
Leader–follower teleopcaliper-halteleopLeaderFollower
Dataset record (LeRobotDataset)caliper-datasetrecord (v3.0 / --format v21)RecorderV3 / Recorder
Dataset replay through a sim backendcaliper-dataset + caliper-halreplay✗ (readers only)
Dataset read / browse / plotcaliper-datasetDatasetReaderV3 / DatasetReader (incl. images)Data mode (table, channel plots, thumbnails)
Dataset edit: delete / split / merge / tagscaliper-dataset::editdata delete / data split / data merge / data tagdataset_delete_episodes / dataset_split_episode / dataset_merge_episodes / dataset_read_tags / dataset_write_tagsData mode edit bar + tag chips
Dataset doctor D001D016caliper-dataset::analyzedata doctordata_doctorData mode: Doctor button (episode-jump findings)
Joint-offset calibration (Gauss-Newton)caliper-calibcalibrate (incl. --self-test)calibrate_joint_offsets
lerobot calibration-file exportPython interopexport_lerobot_calibration
robomimic HDF5 exportPython interopexport_robomimic_hdf5
BC learning (BC-MLP / ACT-lite / DDPM)learn/caliper_learn sidecarseparate caliper_learn package (on top of these bindings)
Deploy a lerobot checkpoint — safetensors-only loader + closed-loop sim runnercaliper_learn.hub/runner✗ ³load_lerobot_policy / LoadedPolicy / run_policy✗ ³
Seeded policy eval — Wilson-95, E001E003, checkpoint sweepcaliper_learn.eval✗ ³ (caliper-learn eval)evaluate / sweep / reach_eval_task✗ ³
Task artifact*.caliper-task.json v1 (scene + zones + gripper + success + horizon), stability-contract covered, Rust/Python parity-testedcaliper-sim-mujoco::task✗ ³ (caliper-learn eval/autopsy --task)caliper_learn.load_task / VecSimEnv.from_taskOpen task… (robot + scene + zones + live SUCCESS badge)
Policy-in-the-loop drive — trained checkpoint drives the live sim over a stdio JSON bridgecaliper_learn.bridge✗ ³ (caliper-learn drive)drive_loop / load_drive_policySimulate: connect policy… (live session; state-based policies)
Manipulation success predicateslifted / placed_in_zone / combinators, exact JSON schemacaliper_learn.success✗ ³Lifted / PlacedInZone / AllOf / AnyOf / VecSimEnv(success=) / EvalTask.success_predicate✗ (Studio grasps via the live weld channel)
Deploy-loop latency profileL001L003, honest achievable Hzcaliper_learn.profile✗ ³ (caliper-learn profile)profile_rollout✗ ³
Policy deploy debugger P001P008caliper_learn.debugger✗ ³ (caliper-learn debug)analyze_policy✗ ³
Policy Autopsy — D+P+E+L under one verdictcaliper_learn.autopsy✗ ³ (caliper-learn autopsy)autopsy✗ ³
Domain randomization (CI-diffable seeded draws)caliper_learn.randomizeRandomizationSpec / sample_randomization / apply_to_mjcf / apply_to_env / VecSimEnv(randomization=)
Coverage generator (doctor→generator loop)caliper_learn.coverage_gen✗ ³ (caliper-learn coverage)generate_coverage
Vectorized sim env (gym-vector semantics)caliper_learn.vec_envVecSimEnv / reach_task / rollout_random
Sim-camera collector (offscreen → image dataset)caliper_learn.sim_cameraSimCameraScene / collect_camera_dataset
MP4 video features (dtype video, lerobot-exact; metadata native in the Rust writer)caliper_learn.video + caliper-datasetencode_episode_video / VideoRecorder / RecorderV3(video_features=…) (attach_video_metadata = repair tool)

Dataflow graph

CapabilityEngineCLIPythonStudio
Run a graphcaliper-graphgraph runrun_graphGraph mode: Run (+ live scopes)
Validate a graph (types, cycles, topo)caliper-graphgraph validatevalidate_graphGraph mode: Validate (inline node/edge errors)
Edit a graph visually— (frontend)Graph mode editor (⌘D duplicate, delete, fit, app-data save/load, file import/export)

Misc

CapabilityEngineCLIPythonStudio
Engine version / build infocaliper::VERSIONinfo / --versionversion() / __version__toolbar readout
First-run guided tour— (frontend)6-step overlay + palette "Show tour"
Lightweight benchmark harness— (scripts)✗ (a shell script, not a verb: scripts/measure_lightweight.sh drives the CLI)

¹ The Studio backend registers dynamics_at / reach_check commands, but no UI control invokes them yet — counted as ✗ until a panel drives them.

² The safety monitor runs inside the control loop on these faces; only Python exposes it as a standalone object.

³ Policy inference is Python-side (torch + the safetensors-only hub loader), so the Rust CLI and Studio cannot host these. The sidecar ships its own console face instead: caliper-learn debug|autopsy|eval|profile (each takes --json; exit code 1 on any error-severity finding) — see Verdicts.