Stack de développement local — macOS¶
Documentation de l'environnement de dev sur MacBook Apple Silicon. Couvre tout ce qu'il faut pour développer, tester, et flasher la flotte sans toucher à Linux.
Hors scope : la station de base mobile (Tailscale, accès headless via VNC, services tournant sur le laptop ops) est documentée dans
../base-station.md. Ce dossier traite uniquement de l'environnement développeur local.
Plateforme cible¶
- MacBook Apple Silicon (validé M1 Pro), macOS récent (Sonoma 14+ ou Sequoia 15+).
- Apple Silicon natif. Aucune VM, aucun Docker requis pour la stack de base.
- Pas de Linux nécessaire pour Phase 0.5 et Phase 1.
Choix technologiques¶
| Couche | Outil | Notes |
|---|---|---|
| Simulateur | ArduPilot SITL | Compilé natif macOS, multi-véhicules en parallèle |
| Visualiseur 3D | FlightGear | Rendu 3D synchronisé sur SITL via FDM UDP 5503 ; scenery monde entier |
| Bridge MAVLink → web | mavlink2rest | Rust, expose REST + WebSocket |
| GCS web (recommandé) | Cockpit | Vue.js, Electron, multi-véhicule, command prompt MAVLink, OSS |
| GCS classique | QGroundControl | Alternative desktop, plus stable pour les missions complexes |
| Hub MAVLink (debug) | MAVProxy | CLI |
| Radio | Radiomaster Boxer | Mode joystick USB HID, EdgeTX |
| Cross-compile firmware | gcc-arm-none-eabi | Cible Matek H743-WING V3 |
| Glue logicielle (custom) | Rust (workspace Cargo) | Règles cross-vehicle ; portable Mac → Pi Zero 2W → ESP32 |
Pas de Go, pas de C, pas de Python pour la glue. Python sert uniquement à MAVProxy et au build system d'ArduPilot (
waf). C reste pour ArduPilot upstream uniquement.
Ordre de lecture¶
setup-macos.md— prérequis système, Homebrew, toolchains. À faire en premier.sitl.md— build et exécution du simulateur, connexion radio Boxer, scénarios multi-véhicules. Phase 0.5.cockpit.md— web GCS (Cockpit + mavlink2rest),make webtout-en-un. OSS, recommandé.flightgear.md— visualiseur 3D synchronisé sur SITL ; spawn par défaut @ CYHU (Rive-Sud Montréal).training/— Formation pilote progressive en 7 niveaux pour devenir expert SITL + Cockpit avant d'écrire du code custom.firmware.md— cross-compile et flash du firmware sur le Matek H743-WING V3. Phase 1.glue.md— environnement de dev pour la logique multi-véhicules (software/). Phase 4.style.md— conventions de code Rust (lints, panics, locks, no_std discipline).
Workflow — Makefile racine¶
Une fois le setup fait, le Makefile à la racine du repo (my_fleet/Makefile) gère tout le cycle SITL :
make up # Plane SITL + QGC (TCP 5760)
make web # Plane SITL + mavlink2rest + Cockpit
make fg # Plane SITL @ CYHU + FlightGear 3D
make down # arrête SITL (laisse GUIs ouvertes)
make multi # Plane + Rover en parallèle (5760 + 5770)
make status # ports écoutés + apps GUI
make logs # tail -f du log Plane
make help # liste complète
make up est idempotent (détecte si SITL ou QGC sont déjà actifs). QGC se connecte via Comm Link TCP 127.0.0.1:5760 (à ajouter une fois dans QGC, persisté).
Workspace¶
~/Project/bascanada/
├── ardupilot/ # upstream ArduPilot (cloné)
└── my_fleet/ # ce repo
├── docs/ # documentation technique
├── presentations/ # decks Marp
├── software/ # workspace Rust (3 crates : mavlink/base/companion)
├── fleet-params/ # snapshots ArduPilot .parm versionnés par véhicule
├── cad/ # modèles 3D
├── Makefile # workflow dev SITL
└── README.md
Aucun de ces dossiers ne doit vivre dans iCloud Drive — les builds génèrent des dizaines de milliers de fichiers et la sync iCloud les corrompt.