ReviewOS

also looking at this

stacks/drone

feat: expose observed VTOL wind phase cases

#92
Merged chris wants to merge codex/vtol-wind-phase-cases into main
26 files +609 -87

Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.

docs/index.mdmodified+6-0
Changes to docs/index.md
@@ -64,6 +64,12 @@ routes. The common `/missions` workspace selects the same named cases and displa
6464observations and optional battery readings. Complete recovery/abort envelopes and measured hybrid
6565energy qualification remain open.
6666
67The published VTOL scenarios include bounded 2 m/s headwind and tailwind routes,
68plus east/west crosswind plans with explicit wind-facing back-hover headings.
69The original fixed north-facing crosswind plans remain limit cases with blocked
70envelope outcomes. These fictional plans do not establish arbitrary-wind support.
71See the [scenario commands and expected outcomes](vehicles-vtol.md) before comparing reports.
72
6773## Explore a workflow
6874
6975| Workflow | Current development surface | Guide |
resources/components/FlightLimits.stxmodified+1-1
Changes to resources/components/FlightLimits.stx
@@ -1,6 +1,6 @@
11<template>
22 <section aria-labelledby="limits-title" class="pt-8 border-neutral-700 border-t">
3 <h2 id="limits-title" class="font-semibold text-xl">The operating envelope</h2><p class="mt-2 max-w-2xl text-neutral-400 text-sm">Every behavior passes through the same checks. These software limits supplement the flight controller's independent failsafes.</p>
3 <h2 id="limits-title" class="font-semibold text-xl">Home simulator limits</h2><p class="mt-2 max-w-2xl text-neutral-400 text-sm">These defaults apply to the follow simulator above. Other vehicle profiles declare their own envelopes. Simulation does not establish a physical operating envelope.</p>
44 <dl class="grid gap-x-8 gap-y-6 grid-cols-2 md:grid-cols-4 mt-6 text-sm"><div><dt class="text-neutral-400">Launch-origin fence</dt><dd class="mt-1 font-mono">80 m radius</dd></div><div><dt class="text-neutral-400">Altitude envelope</dt><dd class="mt-1 font-mono">8 to 30 m</dd></div><div><dt class="text-neutral-400">Horizontal speed</dt><dd class="mt-1 font-mono">3 m/s maximum</dd></div><div><dt class="text-neutral-400">Battery reserve</dt><dd class="mt-1 font-mono">25% minimum</dd></div></dl>
55 </section>
66</template>
resources/components/HardwareChecklist.stxmodified+3-3
Changes to resources/components/HardwareChecklist.stx
@@ -1,7 +1,7 @@
11<template>
22 <section id="hardware" aria-labelledby="hardware-title" class="pt-8 border-neutral-700 border-t">
3 <div class="max-w-2xl"><h2 id="hardware-title" class="font-semibold text-xl">Build around the Pi you own.</h2><p class="mt-2 text-neutral-400 text-sm">Raspberry Pi 5, 8 GB. One computer for your logic, a dedicated controller for flight.</p></div>
4 <div class="grid gap-x-12 gap-y-5 md:grid-cols-2 mt-6 text-sm"><div><h3 class="font-medium">Holybro X500 v2 / Pixhawk 6C</h3><p class="mt-1 text-neutral-400">Airframe, propulsion, GPS, power module, and telemetry.</p></div><div><h3 class="font-medium">Raspberry Pi AI Camera</h3><p class="mt-1 text-neutral-400">On-sensor inference for a later vision-tracking adapter.</p></div><div><h3 class="font-medium">RadioMaster Pocket ELRS + RP1 V2</h3><p class="mt-1 text-neutral-400">An independent RC link and a physical mode switch.</p></div><div><h3 class="font-medium">Dedicated Pi power + cooling</h3><p class="mt-1 text-neutral-400">A regulated 5 V supply, Active Cooler, and secure mounting.</p></div></div>
5 <a href="https://github.com/stacksjs/drone/blob/main/docs/hardware.md" class="inline-block mt-6 text-emerald-200 text-sm underline underline-offset-4 focus-visible:outline-emerald-200">Full parts list, wiring, and purchase notes</a>
3 <div class="max-w-2xl"><h2 id="hardware-title" class="font-semibold text-xl">Build around the Pi you own.</h2><p class="mt-2 text-neutral-400 text-sm">Raspberry Pi 5, 8 GB. Start with the owned-runtime bench and camera integration.</p></div>
4 <div class="grid gap-x-12 gap-y-5 md:grid-cols-2 mt-6 text-sm"><div><h3 class="font-medium">Pico 2 runtime bench</h3><p class="mt-1 text-neutral-400">Our board runtime, a 3.3 V USB-UART adapter and diagnostic instruments. Board outputs remain neutral-only.</p></div><div><h3 class="font-medium">Raspberry Pi AI Camera</h3><p class="mt-1 text-neutral-400">Implemented acquisition bridge, explicit target selection and loss handling. On-device validation remains required.</p></div><div><h3 class="font-medium">Optional airframe and controller</h3><p class="mt-1 text-neutral-400">The parts guide includes an X500 v2 / Pixhawk 6C path with independent RC authority. Physical flight requires separate qualification.</p></div><div><h3 class="font-medium">Dedicated Pi power + cooling</h3><p class="mt-1 text-neutral-400">A regulated 5 V supply, Active Cooler, and secure mounting.</p></div></div>
5 <a href="/docs/hardware" class="inline-block mt-6 text-emerald-200 text-sm underline underline-offset-4 focus-visible:outline-emerald-200">Full parts list, wiring, and purchase notes</a>
66 </section>
77</template>
resources/views/index.stxmodified+6-3
Changes to resources/views/index.stx
@@ -1,11 +1,12 @@
11@nolayout
22<!DOCTYPE html>
33<html lang="en">
4 <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content="An open Stacks workspace for custom drone behavior, simulation, and Raspberry Pi companion computing."><title>Drone / Stacks</title></head>
4 <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content="Build owned vehicle autonomy with Stacks: runtime, sensors, estimation, controls, missions and Pi AI Camera tracking. Experimental simulation and bench development."><title>Drone / Stacks</title></head>
55 <body class="min-h-[100dvh] antialiased text-neutral-100 bg-neutral-950">
6 <a href="#main" class="skip-link">Skip to content</a>
67 <div class="mx-auto px-5 sm:px-8 max-w-6xl">
7 <header class="flex flex-wrap gap-4 items-center justify-between py-6 border-b border-neutral-700"><a href="/" class="font-semibold text-lg tracking-tight">stacks<span class="mx-2 text-neutral-500">/</span>drone</a><nav aria-label="Main navigation" class="flex flex-wrap gap-5 items-center text-neutral-300 text-sm"><a href="#simulation" class="hover:text-white">Simulator</a><a href="/camera" class="hover:text-white">Camera</a><a href="/vision" class="hover:text-white">Target fusion</a><a href="/diagnostics" class="hover:text-white">Diagnostics</a><a href="/missions" class="hover:text-white">Missions</a><a href="/mapping" class="hover:text-white">Mapping</a><a href="/volumes" class="hover:text-white">Volumes</a><a href="/inspection" class="hover:text-white">Inspection</a><a href="/incidents" class="hover:text-white">Incidents</a><a href="/agriculture" class="hover:text-white">Field observations</a><a href="#hardware" class="hover:text-white">Hardware</a><a href="https://github.com/stacksjs/drone" class="hover:text-white">Source <span aria-hidden="true">↗</span></a></nav></header>
8 <main class="py-10 space-y-12 sm:py-14"><section class="max-w-3xl"><p class="mb-3 font-mono text-emerald-200 text-sm">COMPANION FLIGHT WORKSPACE</p><h1 class="font-semibold leading-tight text-3xl tracking-tight sm:text-5xl">Your aircraft.<br>Your flight logic.</h1><p class="mt-4 max-w-xl leading-relaxed text-neutral-400">Build and test custom follow behavior in TypeScript, then explore the Raspberry Pi integration path.</p></section><MissionControl /><FlightLimits /><HardwareChecklist /></main>
8 <header class="flex flex-wrap gap-4 items-center justify-between py-6 border-b border-neutral-700"><a href="/" class="font-semibold text-lg tracking-tight">stacks<span class="mx-2 text-neutral-500">/</span>drone</a><nav aria-label="Main navigation" class="flex flex-wrap gap-5 items-center text-neutral-300 text-sm"><a href="#simulation" class="hover:text-white">Simulator</a><a href="/camera" class="hover:text-white">Camera</a><a href="/missions" class="hover:text-white">Missions</a><a href="/docs" class="hover:text-white">Docs</a><a href="#hardware" class="hover:text-white">Hardware</a><a href="https://github.com/stacksjs/drone" class="hover:text-white">Source <span aria-hidden="true">↗</span></a></nav></header>
9 <main id="main" tabindex="-1" class="py-10 space-y-12 sm:py-14"><section class="max-w-3xl"><p class="mb-3 font-mono text-emerald-200 text-sm">OWNED VEHICLE AUTONOMY</p><h1 class="font-semibold leading-tight text-3xl tracking-tight sm:text-5xl">Your vehicle.<br>Your autonomy stack.</h1><p class="mt-4 max-w-xl leading-relaxed text-neutral-400">Build runtime, estimation, controls and missions with Stacks. Explore Pi AI Camera tracking and owned vehicle simulations.</p><p class="mt-4 max-w-xl text-emerald-200 text-sm">Experimental simulation and bench development. Physical telemetry is receive-only; physical flight commands are disabled.</p></section><MissionControl /><FlightLimits /><HardwareChecklist /></main>
910 <footer class="flex flex-wrap gap-3 justify-between py-6 text-neutral-400 text-xs border-neutral-700 border-t"><span>Built with Stacks, stx, and Bun. <a href="/docs" class="underline hover:text-white">Documentation and implementation status</a></span><span>Simulation first. Physical flight requires separate validation.</span></footer>
1011 </div>
1112 </body>
@@ -16,5 +17,7 @@ button, input { font: inherit; }
1617button { cursor: pointer; }
1718button:disabled { cursor: default; }
1819a, button, input { outline-offset: 4px; }
20.skip-link { position: absolute; top: 0; left: 1rem; padding: 0.75rem 1rem; background: #171717; color: #fff; transform: translateY(-150%); z-index: 10; }
21.skip-link:focus { transform: translateY(0); }
1922@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }
2023</style>