Command Reference
Every request is a length-prefixed msgpack dict with a "cmd" key (see Protocol & Wire Format for the framing and worked examples). This page lists every command the server understands.
The "Blocked during mission" column refers to the trajectory mission running. "yes" = the server returns an error or otherwise refuses; "no" = always works; "n/a" = command belongs to a plugin that doesn't interact with the trajectory mission. Plugins are chosen at startup with --plugins (default: manual_move); several can be enabled at once.
| Command | Additional keys | Blocked during mission | Description |
|---|---|---|---|
| — Core protocol — | |||
help |
-- | no | List available commands |
connect |
-- | no | Promote a stateless socket to a robot-controlling channel; server replies with assigned id |
sim_get_info |
-- | no | {"control_loop_rate_hz": int} plus rolling physics/render tick timings (physics_tick_s, render_tick_s, each {window, p50}) |
sim_get_state |
-- | no | Full scene state as a dict (world + cameras + plugins; same shape as on-disk save) |
sim_load_state |
state: dict |
yes | Load scene from a state dict (no disk roundtrip) |
sim_reset |
-- | yes | Restore the initial scene state |
robot_get_state |
robot_ix: int |
no | Robot entity dump: {"components": [...], "data": {pose, velocity, ...}, "connected": bool} |
robot_get_state_with_camera |
robot_ix: int |
no | Robot dump + top-level fpv_compressed (zlib RGBA) + fpv_shape + fpv_frame_id |
— ManualMovePlugin (--plugins manual_move, the default) — |
|||
move |
control_input: list[float] (length 6, the robot's DoF) |
yes | Apply one control input. While a mission is running, robot 0's move is overridden by the mission and the response is move_not_applied. |
— TrajectoryMissionPlugin (--plugins trajectory_mission) — |
|||
mission_get_state |
-- | no | Mission state, progress, or final error |
mission_add_via_point |
-- | yes* | Record current robot 0 pose as a via-point |
mission_clear_via_points |
-- | yes* | Drop all via-points |
mission_start |
trajectory: list[list[float]] (shape N × 6) |
yes* | Start mission with the supplied trajectory |
— RacePlugin (--plugins race) — |
|||
race_start |
-- | n/a | Start the race (one-shot, no restart) |
race_status |
-- | n/a | Current race state: flag positions, per-robot next-flag index, start/end timestamps, winner |
* Not hard-enforced server-side. mission_add_via_point / mission_clear_via_points still reset the mission phase to not-started mid-run (silently cancelling an in-flight mission), and mission_start validates its input but does not refuse while a mission runs (it just restarts). Clients should treat the mission as exclusive. (Tracked by task 97, folded into the ECS mission port #143; the guard itself is still TODO.)
For the response envelope (timestamps, the "error" key) and which commands are answered straight from the TCP thread, see Protocol & Wire Format. Commands are registered by plugins — see Plugins for how a plugin declares the commands it owns.