also looking at this
feat: expose observed VTOL wind phase cases
#92
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.
| @@ -64,6 +64,12 @@ routes. The common `/missions` workspace selects the same named cases and displa | ||
| 64 | 64 | observations and optional battery readings. Complete recovery/abort envelopes and measured hybrid |
| 65 | 65 | energy qualification remain open. |
| 66 | 66 | |
| 67 | The published VTOL scenarios include bounded 2 m/s headwind and tailwind routes, | |
| 68 | plus east/west crosswind plans with explicit wind-facing back-hover headings. | |
| 69 | The original fixed north-facing crosswind plans remain limit cases with blocked | |
| 70 | envelope outcomes. These fictional plans do not establish arbitrary-wind support. | |
| 71 | See the [scenario commands and expected outcomes](vehicles-vtol.md) before comparing reports. | |
| 72 | ||
| 67 | 73 | ## Explore a workflow |
| 68 | 74 | |
| 69 | 75 | | Workflow | Current development surface | Guide | |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | <template> |
| 2 | 2 | <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> | |
| 4 | 4 | <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> |
| 5 | 5 | </section> |
| 6 | 6 | </template> |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | <template> |
| 2 | 2 | <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> | |
| 6 | 6 | </section> |
| 7 | 7 | </template> |
| @@ -1,11 +1,12 @@ | ||
| 1 | 1 | @nolayout |
| 2 | 2 | <!DOCTYPE html> |
| 3 | 3 | <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> | |
| 5 | 5 | <body class="min-h-[100dvh] antialiased text-neutral-100 bg-neutral-950"> |
| 6 | <a href="#main" class="skip-link">Skip to content</a> | |
| 6 | 7 | <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> | |
| 9 | 10 | <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> |
| 10 | 11 | </div> |
| 11 | 12 | </body> |
| @@ -16,5 +17,7 @@ button, input { font: inherit; } | ||
| 16 | 17 | button { cursor: pointer; } |
| 17 | 18 | button:disabled { cursor: default; } |
| 18 | 19 | a, 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); } | |
| 19 | 22 | @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } } |
| 20 | 23 | </style> |