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 A001–A016caliper-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-kinematics✗Robot.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-kinematics✗Robot.nullspace_step / Robot.resolved_rate✗
SE(3) log/exp mapscaliper-spatial✗log6 / 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-motion✗Planner.plan_trajectory (plan → retimed Trajectory)✗
Time-optimal (TOPP) retimingcaliper-motionmove --time-optimalRobot.retime_time_optimal✗
Named pose librarycaliper-motion::PoseLibrary✗✗Motion mode (save/plan-to/delete poses)
Trajectory lint T001–T007caliper-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 C001–C003caliper-sim-mujoco::lint✗✗automatic 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-dataset✗DatasetReaderV3 / 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 D001–D016caliper-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 interop✗export_lerobot_calibration✗
robomimic HDF5 exportPython interop✗export_robomimic_hdf5✗
BC learning (BC-MLP / ACT-lite / DDPM)learn/caliper_learn sidecar✗separate 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, E001–E003, 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 predicates — lifted / 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 profile — L001–L003, honest achievable Hzcaliper_learn.profile✗ ³ (caliper-learn profile)profile_rollout✗ ³
Policy deploy debugger P001–P008caliper_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.randomize✗RandomizationSpec / 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_env✗VecSimEnv / reach_task / rollout_random✗
Sim-camera collector (offscreen → image dataset)caliper_learn.sim_camera✗SimCameraScene / collect_camera_dataset✗
MP4 video features (dtype video, lerobot-exact; metadata native in the Rust writer)caliper_learn.video + caliper-dataset✗encode_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.