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.