Files
kaptan/docs/src/sitl.md
T

2.1 KiB

Host SITL

Host SITL is Kaptan's deterministic closed-loop simulation tier. Gazebo sends simulated IMU and declared noisy local position/velocity observations over a private loopback protocol. The Rust process runs the ESKF, safety supervisor, trajectory, controller, and allocator, then returns four virtual motor fractions to Gazebo.

It is a pre-bench software gate, not a physical-flight validation.

Run the closed loop

cd firmware
docker compose -f tools/sitl/compose.yaml up -d --build
tools/sitl/kaptan-sim ready
tools/sitl/kaptan-sim move 5 3 1 --wait
tools/sitl/kaptan-sim land 0 0 --wait
docker compose -f tools/sitl/compose.yaml down

For the reproducible command-path gate, use:

cd firmware
tools/sitl/e2e-smoke.sh

The smoke scenario verifies ascent, translation, descent, landing, flat-plane proximity, and zero applied motor fractions after landing. Its reference world contains only a visual landing pad; the pad has no collision geometry and never contributes a controller or truth observation.

Open https://app.gazebosim.org/visualization, connect to ws://localhost:9002, and leave authorization blank to view the world.

Quad-X profile

SITL starts through the same central ConfigManager composition used by the host protocol tests. Create and validate a private host profile file with:

kaptan-sitl config write-default kaptan-sitl.cbor
kaptan-sitl config validate kaptan-sitl.cbor
kaptan-sitl serve --config kaptan-sitl.cbor

The file selects the restart-only profile used to build the estimator, controller, allocator envelope, safety supervisor, and optional log filter at process start. It is not the raw GCS upload blob. kaptan-sitl serve retains the central manager for that boot but does not yet open a MAVLink config/log endpoint; see Configuration for the exact upload groundwork and safety boundary.

Limits

This model does not validate terrain, vision, flow/range sensing, wind, vibration, battery/ESC behavior, sensor latency/jitter, actuator faults, or physical touchdown sensing. Add those only as a reviewed sensor/contact model, not as a display-only shortcut.