feat(falcon): v0.5.0 — position controller + waypoint mission#16
Conversation
Full outer-loop cascade closes in pure-Rust SITL. Vehicle starts at NED origin, flies to a 10 m north waypoint, settles within centimetres. Five layers of control (POS → ATT → RATE → MIX → plant with translational dynamics) closing in one bench. What lands: Crates - relay-pos — cascaded P-PI position controller. 50 Hz outer loop, NED frame. Position P + velocity PI with bounded integral; small- angle accel→tilt map; thrust from vertical accel; yaw hold or follow. NaN-safe sanitisation throughout. 13 unit + proptest cases. Example - examples/falcon-sitl-hover gains a `mission` scenario + the plant gains translational dynamics. Vehicle from NED origin to (10,0,0). Achieved: convergence to <0.5 m in 4.045 s, final distance 0.010 m, RMS-steady 0.015 m. Loop wall time 1.3 ms for 12000 samples. 2 added integration tests. Rivet - FV-FALCON-POS-001 with 5 extractable fields.steps. Falcon gate goes 7 → 8 artifacts, 26 → 31 steps. - FEAT-FALCON-v0.5 bumped pending → approved with achieved metrics. Verification posture - cargo test --workspace: 61 test suites green (was 59 in v0.4) - python3 scripts/run-falcon-verification.py: ✅ 8/8 artifacts, 31/31 steps green - rivet validate: 0 broken cross-references - cargo run -p falcon-sitl-hover --release: PASS on all 5 scenarios (step, disturbance, hover, attitude, mission) Honestly deferred to v0.6 - host/relay-gps host service (v0.5 plant feeds position directly to POS; POS-P03 source-agnostic interface is the v0.6 hook for real GPS noise/latency) - cFS-DNA stored-command mission via relay-sc + relay-tbl - cargo-mutants on full cascade - Sanitizer pass (ASAN / TSAN / Miri) - Gazebo Harmonic SITL (v0.7; pure-Rust SITL still covers v0.5's verification needs) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
running 13 tests test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 13 tests test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 13 tests test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.60s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s --- scenario: step --- running 33 tests test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 33 tests test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 33 tests test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.40s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 9 tests test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s [falcon-hello-demo] building release binary... running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s --- scenario: attitude --- running 13 tests test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 13 tests test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 13 tests test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s --- scenario: mission --- running 9 tests test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 9 tests test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 9 tests test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 16 tests test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 16 tests test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 16 tests test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.81s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 5 tests test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s --- noise=0 (deterministic) --- running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s running 10 tests test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s falcon verification gate (filter: (has-tag "falcon"))8 artifact(s) matched: FV-FALCON-RATE-001, FV-FALCON-MAVLINK-001, FV-FALCON-WORLD-001, FV-FALCON-ATT-001, FV-FALCON-POS-001, FV-FALCON-EKF-STUB-001, FV-FALCON-EKF-001, FV-FALCON-MIX-001[ PASS] ( 7.84s) FV-FALCON-RATE-001: cargo test -p relay-rate ✅ Rivet verification gate — falcon8/8 passed
Source of truth: |
Summary
The full outer-loop cascade closes. Vehicle flies from NED origin to a 10 m north waypoint in pure-Rust SITL, settles within centimetres. Five layers (POS → ATT → RATE → MIX → plant with translational dynamics) closing in one bench.
What's in
crates/relay-pos— cascaded P-PI position controller, 50 Hz, NED. 13 unit + proptest cases.examples/falcon-sitl-hovermissionscenario — plant gains translational dynamics; new scenario commands a 10 m waypoint. 2 added integration tests.FV-FALCON-POS-001verification artifact, 5 extractable steps.FEAT-FALCON-v0.5bumpedpending→approvedwith achieved metrics inline.Achieved bench metrics
cargo test --workspacecargo test -p relay-poscargo test -p falcon-sitl-hovercargo run -p falcon-sitl-hoverrivet validateTest plan
cargo run -p falcon-sitl-hover --releasePASSes all 5 scenarioscargo run -p falcon-sitl-hover --release -- --scenario missionprints "final distance 0.010 m"After merge
Honestly deferred to v0.6
host/relay-gpshost service (v0.5 plant feeds position directly; POS-P03 source-agnostic interface is the v0.6 hook for real GPS noise + latency)relay-sc+relay-tbl(the dual-DNA showcase)cargo-mutantson full cascade🤖 Generated with Claude Code