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

CLI

The caliper-cli face exposes the engine as a command-line tool. Each subcommand parses its arguments and dispatches to the engine — no math lives in the CLI.

Subcommands

The full verb set (from the clap Cmd enum in crates/caliper-cli/src/main.rs):

CommandPurpose
infoPrint engine version / build info.
loadLoad and summarize a URDF model.
fkForward kinematics for a joint vector.
ikInverse kinematics to a target pose (--analytic for the closed-form 6R solver).
analyzeSingularity / manipulability analysis at a configuration (--json).
moveJerk-limited MOVE_J / MOVE_L / MOVE_C (--via); --topp for time-optimal retiming.
dynDynamics at a configuration (RNEA / CRBA / forward).
simTime-step the passive/forced dynamics (q + energy trace).
runDeterministic control-loop rollout on a physical sim to a goal.
teleopLeader–follower teleoperation demo (pure sim).
record / replayLeRobotDataset record (v3.0 default, --format v21) / replay.
collideSelf/world collision check at a configuration (--contacts for EPA depth, --json).
planCollision-free planning: RRT-Connect, --optimal (RRT*), --prm.
calibrateJoint-zero offset calibration from measured tip poses (--self-test).
reachCollision-aware reachability of a Cartesian pose (--json).
reportCycle-time + path-quality report plus the trajectory lint (T001T009); --strict exits non-zero on Error findings.
mjcfExport the robot as an MJCF (MuJoCo XML) model.
graphrun / validate a .caliper-graph.json dataflow graph.
doctorAsset doctor: diagnose a URDF/xacro (A001A014); --repair writes a repaired copy.
data doctorDataset doctor: pre-training diagnostics over a LeRobotDataset v3.0 (D001D015).
data delete / split / merge / tagDataset edit: offline episode surgery + the caliper tags sidecar (atomic rewrite, always lerobot-loadable).

See Doctors & trajectory lint for the full check catalogs.

doctor — asset doctor

# diagnose only: plain-English findings, most-severe first
cargo run -p caliper-cli -- doctor robot.urdf

# machine-readable
cargo run -p caliper-cli -- doctor robot.urdf --json

# apply every mechanical repair to a COPY (robot.repaired.urdf next to the
# input; the input file is never modified), then re-diagnose the copy
cargo run -p caliper-cli -- doctor robot.urdf --repair

# computed inertials at a custom uniform density (kg/m^3; default 1000)
cargo run -p caliper-cli -- doctor robot.urdf --repair --density 2700 --out fixed.urdf

Findings never change the exit code — the report is the product. The command only errors when the file cannot even be inspected.

data doctor — dataset doctor

# the root is the directory containing meta/ and data/
cargo run -p caliper-cli -- data doctor ~/datasets/pick_place
cargo run -p caliper-cli -- data doctor ~/datasets/pick_place --json

Deterministic: the same dataset bytes always produce the same report. A healthy dataset reports zero findings.

data delete / split / merge / tag — dataset edit

The offline edit ops (caliper-dataset::edit, the same engine behind the Python dataset_* functions and Studio's Data-mode edit bar). Every op rewrites through the native v3.0 writer into a sibling temp dir and swaps in atomically, so the result is always lerobot-loadable; survivors are renumbered densely, tasks remapped, stats recomputed, tags remapped.

# delete episodes 0 and 3 (refuses to delete ALL episodes)
cargo run -p caliper-cli -- data delete ~/datasets/pick_place --episodes 0,3

# split episode 2 at local frame 150 (both halves keep task + tags)
cargo run -p caliper-cli -- data split ~/datasets/pick_place --episode 2 --frame 150

# merge adjacent episodes 4 and 5 (tasks unioned; timestamps continue 1/fps)
cargo run -p caliper-cli -- data merge ~/datasets/pick_place --first 4 --second 5

# tags sidecar (meta/caliper_tags.json — a caliper extension lerobot ignores)
cargo run -p caliper-cli -- data tag ~/datasets/pick_place                          # list
cargo run -p caliper-cli -- data tag ~/datasets/pick_place --episode 2 --add good,retry
cargo run -p caliper-cli -- data tag ~/datasets/pick_place --episode 2 --remove retry
cargo run -p caliper-cli -- data tag ~/datasets/pick_place --episode 2 --clear

report — path report + trajectory lint

# two-segment MOVE_J with a ground plane, near-miss margin 2 cm, CI-strict
cargo run -p caliper-cli -- report robot.urdf \
  --goal 0.5,0.2,-0.3,0,0,0 --goal 0,0,0,0,0,0 \
  --ground 0.0 --clearance 0.02 --strict

Examples

cargo run -p caliper-cli -- info
cargo run -p caliper-cli -- fk    robot.urdf --joints 0.1,0.2,0.0,0.0,0.0,0.0
cargo run -p caliper-cli -- ik    robot.urdf --target 1,0,0,0,1,0,0,0,1,0.3,0.0,0.2
cargo run -p caliper-cli -- move  robot.urdf --target 1,0,0,0,1,0,0,0,1,0.3,0.0,0.2
cargo run -p caliper-cli -- plan  robot.urdf --goal 0.5,0.2,-0.3,0,0,0 --ground 0.0
cargo run -p caliper-cli -- graph run robot.urdf my.caliper-graph.json
cargo run -p caliper-cli -- doctor robot.urdf --repair
cargo run -p caliper-cli -- data doctor ~/datasets/pick_place