ReviewOS

stacks/drone

Air vehicles: add fixed-wing, VTOL and helicopter simulation profiles

#12
Open chris opened this 8 days ago ·
8 days ago

What to build

Complete a fixed-wing mission through the shared planner and owned vehicle-control contracts, then explicitly inventory VTOL, helicopter and other airframe gaps.

Current published VTOL status, October 23

Main f90a68e, including #83 and #84, now exposes the same 14 modeled lift-and-cruise cases through native Buddy, the copied standalone CLI and the common stx mission workspace. These share one case factory and actual runtime execution, with phase-bound failures, recovery/abort outcomes, captured mode acknowledgements and optional electrical playback. The native-command/workspace acceptance item below is complete for this experimental profile.

Exact combined-source Linux CI passed all five jobs and required steps: 1,796 passes, 41 skips, zero failures and 500,360 assertions across 1,837 tests in 212 files. Eleven standalone reports have matched outcomes and neutral inhibited outputs. The local 237-test/10,403-assertion suite, 48 copied/Buddy cases, 48 actual-parent byte comparisons and actual 375px/320px STX checks are retained separately.

The sections below retain earlier milestone history. Their earlier hover-only or unpublished status descriptions describe those earlier revisions. Current support remains fictional development simulation. Wind/envelope campaigns, fresh-process restoration, broader recovery/abort behavior, identified hybrid physics, other VTOL mechanisms/airframes, native control, HIL and physical acceptance remain open. No broader checkbox changes or full parity claim are made.

Acceptance criteria

  • Separate vehicle-specific dynamics, allocation, transition, airspeed and energy management from common missions.
  • Demonstrate fixed-wing navigation and landing with wind and stall constraints in simulation.
  • Track VTOL transitions, TECS/soaring, helicopters, blimps/airships and experimental spacecraft as separate evidence-gated extensions.

Blocked by

  • #5 Multirotor control: stabilize the first simulated quadcopter
  • #6 Authority: verify arming, manual override and independent failsafes
  • #10 Mission engine: run and resume an owned waypoint mission

Implemented air slice

  • A force/torque aerodynamic trainer, relative airspeed/differential-pressure measurements, post-stall lift loss, pressure-dependent surface control, runway steering/braking and bounded energy/altitude/heading policy.
  • Explicit takeoff, survey and runway landing mission. Nominal and 2 m/s crosswind fixtures complete; airspeed/position loss, RC takeover, kill and host loss inhibit outputs. Stall, excessive bank, reverse airflow, runway overshoot and airborne landing pause have focused regression coverage.
  • Native air:simulate and the common stx /missions viewer.

Read air model and limits and shared vehicle contract.

Remaining gates and airframe extensions

  • Measured aerodynamic/propulsion/landing gear identification, calibrated airspeed/heading, reviewed flight envelopes and tuning.
  • Native allocation/control port, HIL and supervised physical takeoff, stall, crosswind and landing campaigns.
  • VTOL transitions and allocation, with transition abort/energy tests.
  • Full TECS and soaring with measured energy/polar models.
  • Helicopter rotor dynamics and swashplate/collective control.
  • Blimp/airship buoyancy and envelope dynamics.
  • Experimental spacecraft-specific dynamics, authority and acceptance evidence.

Shared runtime and evidence

Implemented in 8dde96a and its preceding commits. Every profile uses the owned raw IMU/GNSS sensor pipeline, estimator, versioned vehicle mission policy, shared authority lifecycle and independent typed output leases. Per-execution sessions isolate mutable controller, payload and sensor state. Physical endpoints remain inhibited.

The integrated suite passed 320 Bun tests, 22,849 assertions, 13 Python bridge tests, Buddy lint, application/runtime/view typechecks, roadmap/parity gates and native standalone CLI checks outside the checkout. Independent Standards and Spec reviews passed after sampler authority/scope, session isolation, estimator/clock epochs, scenario binding and landing-pause fixes. Browser QA verified nominal and recovery playback, correlated payload ACKs, host-loss versus stale host snapshots, numeric timeline controls and zero horizontal overflow at 320/375 px.

All evidence is owned physics simulation. It does not establish native controller execution, external firmware SITL, HIL or physical vehicle acceptance. CI for this pushed commit passed, including all Linux standalone CLI scenarios and both neutral-only Pico 2 cross-builds.

Next owned VTOL implementation

Source inspection established the following boundaries. The fictional hover prerequisite is now published; full transition control remains missing:

  • VehicleKind now includes the hover-only VTOL development profile. It reuses per-execution plant/controller factories and independent output leases.
  • The air plant has one propeller, three aerodynamic surfaces and wheel brakes. It has no vertical lift rotors, and surface moments vanish at zero airspeed.
  • The air controller rejects airborne speed below 8 m/s. Wrapping it does not implement hover or transition control.
  • The vehicle mission graph now records explicit mode requests and correlated initial-hover observations. Actual front/cruise/back controller qualification remains separate in #78; reaching a waypoint never implies a successful flight-mode transition.

The next owned simulation slice should implement a lift-and-cruise profile through the existing raw IMU/GNSS, estimator, mission, authority and independent modeled board loop. Its acceptance cases are tracked below:

  • Model four vertical rotors, their motor response/allocation and an independent pusher/surfaces in one rigid body with relative-airflow forces. Declare the fictional model and limits.
  • Record explicit hover, front-transition, cruise and back-transition requests and fresh observed outcomes. Bind them to the mission, estimator reference and monotonic epochs; preserve replay and existing profile compatibility.
  • Complete vertical takeoff, qualified front transition, cruise, back transition and vertical landing. Ground speed or elapsed time alone must not certify sufficient wing-borne airspeed.
  • Exercise bounded acceleration/airspeed failure, altitude sag, attitude limits, transition timeout and reserve handling. Retain a distinct abort or bounded recovery result; no automatic retry until a passing transition appears.
  • Cover pause/recovery in every phase, stale/replayed sensors, reference/clock loss, RC takeover, kill and host loss. No authority regain or claimed safe landing from neutral outputs alone.
  • Account for peak hybrid power and the complete worst-case mission, including supported abort and landing demand. Keep session state isolated and model truth out of controller inputs.
  • Expose the same implementation through native Buddy commands, the copied standalone CLI outside the checkout and the common stx mission workspace with phase and failure evidence.

Primary comparison references: PX4 v1.17 transition configuration, PX4 v1.17 back-transition behavior, and ArduPilot QuadPlane transitions. These identify behavior to account for; they do not establish parity or provide coefficients for our model. No upstream controller source is copied.

This slice does not complete #12. Tiltrotor/tailsitter allocation, full TECS/soaring, helicopters, buoyant aircraft, experimental spacecraft, native board execution and measured hardware acceptance remain required under this parent. The pinned upstream VTOL control inventory remains linked to #5 as well.

Published hover prerequisite #76 in 48f411c: a fictional lift-and-cruise rigid body, collective-priority allocation and estimator-driven hover on the shared raw sensor, mission, authority and independent output-lease runtime. The development mission takes off vertically, reaches a nearby hover waypoint and lands with fresh contact evidence. Seven distinct nominal/loss/manual/host scenarios run through native vtol:hover in Buddy and the copied standalone CLI. All seven copied CLI reports exactly match Buddy; short and unsupported cruise inputs retain failure exits. Native lint, app/runtime types, docs and roadmap/parity gates pass. Independent Spec and Standards reviews pass for each milestone.

The complete local suite passed 1,578 tests, 27 skips, zero failures and 489,990 assertions. Exact-source Linux CI passed all five jobs with 1,564 tests, 41 skips, zero failures and 489,967 assertions, including standalone hover and host-loss reports. The main integration has an identical source tree to the qualified CI head. Read the hover-only guide for fictional coefficients and scope.

Front/cruise/back controllers, correlated mode outcomes in the runtime, hybrid energy, transition abort/recovery and the common VTOL mission workspace remain unfinished. The first model criterion above is the only newly completed VTOL criterion. Full transitions and physical vehicle support are not claimed.

Published initial hover acknowledgement

PR #77 is merged and published on main in 03cedae: explicit mode request/observation policy, replay/capture watermarks and actual initial-hover acknowledgement delivery through the shared runtime. It requires matching captured positions, the oldest post-request source epoch, and 200 ms on both decision time and source coverage. Legacy recording shapes stay unchanged; the hover adapter explicitly aborts cruise requests. Declared bounded contact friction settles the modeled skids without an airborne braking or physical landing claim.

Native lint/app/runtime types, 139 focused tests / 4,179 assertions, CLI checks and the 90-page docs build pass. Independent Spec and Standards reviews are clean. The exact-source local full suite passed 1,596 tests, 27 skips, zero failures and 490,313 assertions across 205 files, with source and pinned Bun bytes unchanged. Exact-head Linux CI passed all five jobs with 1,582 passes, 41 skips, zero failures and 490,290 assertions; original logs verify both standalone VTOL reports. The earlier two disk preflights launched no child; the eventual full run passed without restart. Published by normal fast-forward as Chris, without coauthors. Automatic main CI is a separate pending run.

Full transition controllers, hybrid energy, bounded transition abort/landing and the common workspace remain unfinished on main. No VTOL acceptance checkbox changes with this initial-hover prerequisite.

Experimental full-route library milestone, pending qualification

Draft PR #78, e95871f, builds on #77 with original force-aware front/cruise/back control through the shared raw sensor, estimator, mission, authority and independent modeled output loop. Actual nominal and turning routes reach wing-supported cruise, return to captured position and heading, and land vertically. Delayed airflow uses its qualified capture attitude; acknowledgements retain every consumed oldest-source epoch. Observed hover heading must remain within 0.1 rad for the full 500 ms dwell. The finite 45-second back allowance is charged to the complete 131,520 ms / 43.84 Wh declared plan; the original short back budget still fails without retry.

Retained failing regressions cover the missing back controller, turning height breach, oldest-source overclaim and wrong-heading hover acknowledgement. The final focused suite passes 175 tests / 4,870 assertions across 14 files, including 24 actual modeled runtime loss/manual/host campaigns across four phases. Native lint, app/runtime types, 90-page docs build and both independent reviews pass. Exact-head Linux CI failed: GitHub reported hosted-runner communication loss during the full test step, and the check log is absent from the original downloaded archive. Four other jobs passed. The exact cause and test completion are unknown; this is not a full-suite pass. The original failure and incomplete archive are retained without rerun or log refetch. An installed Buddy file-filter invocation accidentally launched the full suite and was deliberately stopped after 47 seconds; its output is retained, with no full-suite success claim.

This is a library experiment pending main publication. Phase pause/recovery, explicit bounded abort/landing, complete hybrid electrical power/reserve, full-transition native CLI/common workspace, wind/envelope qualification and measured board/HIL/physical evidence remain open. No acceptance checkbox changes and no full VTOL or ArduPilot/PX4 parity claim.

Stable-phase lifecycle and documentation milestone, pending qualification

Draft PR #79, d8046f0, includes #78 and adds bounded, captured operator schedules through the existing shared runtime. Stable hover holds position, wing-borne pause captures a clockwise 60 m circle with complete 400 m envelope containment, and qualified stopped contact remains neutral. Explicit resume continues the route. Task time pauses while global endurance and energy continue. Pending transitions retain uncertain-outcome refusal; this does not implement controlled recovery or abort landing.

Actual runtime campaigns cover straight/banked cruise pause, post-back airborne/contact pause, same-session recover/resume, source/manual/host loss, input validation before resources, caller mutation, unchanged legacy reports, energy/endurance and near-fence refusal. Native lint/app/runtime types, 200 focused tests / 5,108 assertions across 15 files, and the 90-page docs build pass. Runtime and supplemental docs each received separate clean Spec and Standards reviews. README, sidebar, introduction, shared guide and feature matrix now distinguish the hover-only native command from the experimental library and remaining work.

Exact new CI is pending on the original full workflow. This is qualification of new reviewed source, not a rerun of the failed #78 workflow. No main publication, full VTOL completion, physical/SITL parity or acceptance checkbox change is claimed. Fresh-process recovery, controlled front/back recovery/abort landing, complete hybrid electrical power/reserve, native full-transition CLI/common workspace and broader wind/envelope qualification remain open.

Published full-route library and stable-phase lifecycle

PR #79 and its included #78 are merged. Main is d8046f0, published by normal fast-forward as Chris without coauthors. The exact qualified source completes bounded modeled nominal/turning front/cruise/back/vertical-contact routes, records correlated source-qualified observations and replay, and supports stable-phase pause/resume. The two corresponding simulation acceptance criteria are now checked.

Exact-head full Linux CI passed all five jobs and required steps: 1,643 passes, 41 skips, zero failures and 491,219 assertions, 1,684 tests across 207 files. The original single-download archive verifies standalone hover and host-loss outcomes, neutral board outputs, expired leases and physical actuation disabled. Local focused/native/docs evidence is separate; no exact d804 macOS full-suite pass is claimed. The original #78 runner-communication failure and missing check log remain retained and are not converted into a pass. Automatic main CI is a separate new run.

README, documentation navigation, vehicle introduction and coverage matrix are aligned with the published experimental library. The native CLI remains hover-only; common workspace VTOL selection is absent. Controlled pending-transition recovery/abort landing is new, uncommitted work after this main revision. Complete hybrid electrical power/reserve, broader wind/envelope qualification, full-transition native CLI/common workspace and measured board/HIL/physical evidence remain open. This does not complete #12 or establish full autopilot parity.

8 days ago

The declared VTOL recovery milestone is now committed as Chris, without coauthors, in 7ebeca5, draft PR #80. Main remains qualified d8046f0.

Opt-in failure edges are counted in the existing finite DAG/time/reserve preflight. A fresh hover replacement cancels the controller-owned request; pause/recover qualify hover before an explicit resume follows landing, and abort reports a distinct aborted result only after modeled contact. Initial-hover/pre-dispatch boundaries, malformed routes, source/manual/host loss, late feedback and bounded replay are covered. Landing holds approach height until aligned. Both independent round 2 reviews are clean, native lint/app/runtime types and 90-page docs pass, and all 39 new recovery cases passed.

The combined local run is 244 pass, 1 retained timeout, not a full pass. The unchanged land/rcOverride callback exceeded the unchanged 5,000 ms limit at 5,112.03 ms. One instrumented exact-case diagnostic passed at 841.12 ms; this does not identify the original cause or resolve #68. Exact-head original full Linux CI is running and required before main publication. No acceptance checkbox changes. Full recovery envelopes, hybrid electrical power/reserve, native full-transition CLI/common workspace and physical qualification remain open.

8 days ago

The declared recovery and landing routes from #80 are now published on main at 04e25d0, as Chris without coauthors. Exact-source full Linux CI passed all five jobs and required steps: 1,682 passes, 41 skips, zero failures and 499,136 assertions across 208 files. Original archive inspection verified both standalone VTOL reports and the browser renewal artifact. Earlier timeout/browser failures remain retained; the precise historical browser transport trigger is unproven.

Draft #81, 9fd0425, adds opt-in electrical accounting to the owned per-session VTOL plant and native vtol:hover --electrical. Independent lagged rotor/pusher loads, surfaces, auxiliaries and battery series loss produce delayed capture-qualified battery observations. A derived 1061 W simultaneous source bound participates in the existing whole-path reserve gate before allocation. Invalid or cutoff measurements cannot grant usable charge; host-loss snapshots remain stale while the independent model continues.

Native lint/app/runtime types, docs90, roadmap/parity and official compiled CLI pass. Broad focused coverage passed281 tests/11,959 assertions; the final29 energy cases add actual open-circuit transition-timeout recovery coverage. Seven copied standalone electrical scenarios exactly match Buddy; complete default reports match the actual parent byte-for-byte. Both independent reviews are clean after an actual parsed-YAML RED and correction preserved all standalone CI step directories. Exact new full Linux CI is pending before main publication.

This is a fictional simulation law, not measured endurance or hardware electrical qualification. Full-transition native CLI/common workspace, broader wind/envelope campaigns, fresh-process recovery, calibrated propulsion/cells and native board/HIL/physical evidence remain open. No acceptance checkbox or full VTOL/parity completion claim.

8 days ago

Draft #82, cd66516, exposes the existing nominal front/cruise/back/vertical-landing route through native vtol:simulate, with optional --electrical. The same typed Stacks command is registered in the copied standalone binary. Physics, controls, mission/reserve and authority are unchanged.

The command retains actual final status and three ordered, capture-qualified initial-hover/cruise/back-hover observations. Success also requires estimated flight, completed landing with qualified modeled contact, no fault, neutral board outputs and no active lease. Insufficient duration preserves its partial outcome and exits1. Invalid durations refuse. Fault/operator/recovery selection remains a library capability; this command currently exposes the nominal route only.

Actual missing-command RED preceded implementation. Native lint/app/runtime types, 151 VTOL tests / 9,401 assertions across nine files, docs90, roadmap/parity and official standalone build pass. Four copied-binary cases outside the checkout match Buddy exactly; three legacy hover reports match the actual parent binary byte-for-byte. Both independent reviews are clean, including the final remaining-work wording correction. New CI commands explicitly preserve runner.temp ownership, with parsed-YAML regression coverage.

Exact-source full Linux CI is pending before main publication. This builds on the independently reviewed electrical model in #81, whose own full CI is also pending. Main remains the previously qualified/published recovery milestone04e25d0. No full macOS suite, native board/HIL/physical acceptance, arbitrary wind/envelope qualification or complete VTOL/parity claim. CLI fault/operator scenarios, workspace selection, fresh-process recovery and measured airframe/cell models remain open.

8 days ago

Draft #83, d472f19, adds14 named vtol:simulate cases through native typed Stacks flags and a reusable case runner under resources/functions/drone/vehicles/vtol/. Existing physics, controllers, sensor runtime, mission policy, authority and limits are unchanged.

Six source/host/manual failures support four declared phase epochs. Matching requires the actual pre-injection task and selected source epochs, RC/kill observation or independent host lease expiry. Seven presets expose cruise pause/resume, front/back abort and recovery/resume, open-circuit pusher timeout and unresumed recovery through global endurance. Reports retain actual blocked/host-lost/aborted outcomes; exit0 only means the named outcome matched. Queued paused landing is distinct from running landing, and neutral outputs are not a landing claim.

Native lint/app/runtime types, 224 VTOL tests / 10,281 assertions across ten files, docs90, roadmap/parity and official standalone build pass on stable source pins. All48 native-versus-copied cases outside the checkout match exact report bytes/status/exits. Seven actual parent comparisons preserve all output bytes. Both independent review axes are clean. Five added standalone CI steps explicitly preserve runner.temp; all existing jobs, commands and deadlines remain.

Exact-source full Linux CI is pending before main publication. This builds on #81 and #82, whose full Linux runs are also pending. Main remains04e25d0. Earlier failed checks and diagnostics are retained; no full macOS pass is claimed. Common workspace selection is next. Full recovery/wind envelopes, fresh-process restoration, measured propulsion/cell behavior, native board/HIL/physical evidence and complete VTOL/parity remain open. No acceptance checkbox change.

8 days ago

VTOL workspace milestone is implemented in #84 at f90a68e, building on #81, #82 and #83. It remains off main pending exact full CI.

The common /missions workspace now selects the same 14 named cases, six faults' phase selection and optional electrical model as the native CLI. It displays counted failure edges, estimated route playback, request-bound mode observations with capture ages and qualified battery captures. Selection changes clear old recordings. Host loss retains stale host readings and independent lease expiry; abort and held recovery keep their actual outcomes.

Local qualification: 237 tests, 10,403 assertions, zero failures; native lint/app/runtime/view types, 90-page docs, roadmap/parity and official standalone build pass. All 48 Buddy/copied CLI cases match, and all 48 actual-parent compiled stdout/stderr/exit comparisons are byte-identical. Compiled STX browser checks cover playback, selection clearing, host/abort/hold and 375px/320px layouts without overflow or console errors. Independent Spec and Standards reviews are clean.

The previous scenario revision's browser catalog-wait failure is retained and unresolved; this workspace change does not fix or reclassify it. Complete recovery/abort and wind envelopes, fresh-process restoration, identified electrical/airframe behavior, native board/HIL and physical flight remain open. No physical actuation is enabled, and this issue is not complete.

8 days ago

The native VTOL scenarios and common mission workspace are now on origin/main in f90a68e; #83 and #84 are merged after a normal fast-forward push as Chris, without coauthors. The workspace shares the native CLI's 14 modeled cases, explicit fault phase and electrical selection, counted recovery edges, recorded transition acknowledgements and captured battery playback. Abort, held recovery and stale host loss retain their actual outcomes. Matching README, shared/VTOL guides and coverage docs are included.

Exact combined Linux CI passed all five jobs/required steps: 1,796 passes, 41 skips, zero failures and 500,360 assertions across 1,837 tests in 212 files. All 11 standalone VTOL reports match declared outcomes and neutral inhibited outputs; nominal routes confirm ordered hover/cruise/hover and landing contact. Local 237 focused tests/10,403 assertions and actual STX 375px/320px browser QA remain separate. The original d472 browser failure is retained and is not reclassified by this later success.

This publishes the native scenario/common-workspace milestone, not completion of #12. Full hybrid fidelity, broader wind/envelope qualification, durable fresh-process restoration, measured hardware and physical/HIL/SITL evidence remain open. The separate automatic post-main workflow is running; no physical actuation was enabled.

8 days ago

The next wind gate is tracked explicitly in #87, with retained failing regressions and acceptance criteria. The fixed four-case sustained-wind campaign establishes that current published main completes calm/headwind cases but fails the tailwind departure and crosswind back envelope. All failures remain inhibited and neutral; none imply a safe airborne landing.

The unpublished investigation has function-level reverse-flow continuity/direction regressions and a candidate correction that gets the tailwind through takeoff/cruise. The full tailwind route still fails the original 45-second back deadline. A separate correlated-recovery latch correction restores both existing focused landing-budget outcomes without changing their budgets. Six event-bound recovery checks pass, while the broader candidate remains unqualified. No source from this investigation has been pushed to main, no full-wind claim is made and this parent stays open.

The published native CLI/common workspace criterion remains complete for the existing experimental profile. This wind work does not change its scope or the physical-flight boundary.

Sign in to comment on this issue.