FlightGear — visualiseur 3D pour SITL¶
Quand la carte 2D de Cockpit ou QGC ne suffit plus — pour s'entraîner à reconnaître l'attitude visuelle, valider une mission de scouting au-dessus d'un terrain réel, ou faire des démos — on branche FlightGear comme renderer 3D synchronisé sur SITL.
Prérequis :
setup-macos.md§6 terminé — incluant le bootstrap de FGDATA (~1.88 GB extrait dans~/Library/Application Support/FlightGear/fgdata/). La cask Homebrew n'installe que l'app, FGDATA est un download séparé.
Comment c'est branché¶
┌─────────────────┐ UDP 5503 (FDM) ┌──────────────┐
│ ArduPilot SITL │ ────────────────▶ │ FlightGear │
│ (arduplane) │ native_fdm │ (fgfs) │
│ TCP 5760 ◀──── MAVLink ── Cockpit/QGC (renderer 3D)
└─────────────────┘ └──────────────┘
- SITL reste l'autorité physique. C'est lui qui calcule l'attitude, la vitesse, la position. Il émet des paquets FlightGear native FDM sur UDP 5503 quand on lui passe
--enable-fgview. - FlightGear est strictement un viewer. Il lit le FDM externe et rend la scène. Il ne touche pas à la physique.
- MAVLink reste séparé sur TCP 5760 → ton Cockpit ou QGC fonctionne en parallèle exactement comme avant.
Ça veut dire que FG ne change rien aux comportements de vol — c'est juste une fenêtre 3D supplémentaire. Tu peux le fermer / rouvrir sans perturber SITL.
Lancement rapide¶
Premier lancement : 30–90 s. FlightGear télécharge la scenery de la Rive-Sud via TerraSync (~50–200 MB pour le tile w074n45). Les lancements suivants sont quasi instantanés (scenery en cache local).
Lancement manuel (debug)¶
Si tu veux voir ce que fait le Makefile, ou changer des paramètres :
# Terminal 1 — SITL avec FDM out
cd ~/Project/bascanada/ardupilot
sim_vehicle.py -v ArduPlane --no-mavproxy --enable-fgview \
-l 45.5175,-73.4170,27,245
# Terminal 2 — FlightGear viewer
/Applications/FlightGear.app/Contents/MacOS/FlightGear \
--fg-root="$HOME/.fgfs/fgdata" \
--native-fdm=socket,in,10,,5503,udp \
--fdm=external \
--aircraft=Rascal110-JSBSim \
--fg-aircraft=$HOME/Project/bascanada/ardupilot/Tools/autotest/aircraft \
--airport=CYHU \
--enable-terrasync \
--geometry=1280x800 \
--disable-sound
--fg-rootest obligatoire sur macOS — la cask ne bundle pas FGDATA, donc FG ne le trouve pas par lui-même. Sans ce flag, le binaire s'initialise puis sort silencieusement (RSS reste à ~30 KB, pas de fenêtre).Symlink pour éviter l'espace dans le path : FGDATA s'extrait dans
~/Library/Application Support/FlightGear/fgdata/mais l'espace blanc dansApplication Supportfait parfois bloquer FG. On symlinke vers~/.fgfs/fgdata(path "propre") et c'est cette cible qu'on passe à--fg-root. Voir setup-macos.md §6.b.Note macOS : sur Linux le simulateur est
fgfs. Sur macOS il est packagé comme l'exécutable principal du.appet renomméFlightGear. Les flags CLI restent identiques.
Les flags clés :
| Flag | Rôle |
|---|---|
--fg-root=... |
Chemin vers FGDATA (obligatoire sur cask macOS) |
--native-fdm=socket,in,10,,5503,udp |
Reçoit le FDM de SITL sur UDP 5503 à 10 Hz |
--fdm=external |
Désactive la physique interne de FG, prend le FDM externe |
--aircraft=Rascal110-JSBSim |
Modèle 3D de l'avion (déjà fourni par ArduPilot) |
--fg-aircraft=... |
Dossier où FG cherche les modèles custom (Tools/autotest/aircraft) |
--airport=CYHU |
Saint-Hubert — vue initiale + scenery prioritaire |
--enable-terrasync |
Téléchargement auto de scenery via le réseau |
Pourquoi CYHU (Saint-Hubert) comme point de spawn ?¶
| Critère | CYHU |
|---|---|
| ICAO | CYHU |
| Coords | 45.5175°N, 73.4170°W |
| Élévation | 27 m / 90 ft |
| Piste principale | 06L/24R, 2 100 m asphalte |
| Distance de Montréal | ~12 km du centre-ville, plein cœur Rive-Sud |
| Scenery FG | Tile w074n45 — couvre Longueuil, Brossard, St-Hubert, Boucherville |
| Type | Aéroport commercial régional + GA — bien modélisé dans la base FG |
C'est l'aéroport de référence Rive-Sud, présent dans la base d'aéroports FG par défaut. Pas besoin de l'ajouter manuellement.
Le heading de spawn est 245° (piste 24R westerly takeoff) — orientation par défaut sous les vents dominants ouest/sud-ouest.
Autres points d'intérêt à survoler après spawn¶
| Endroit | Lat, Lon | Note |
|---|---|---|
| Pont Jacques-Cartier | 45.523°, -73.546° | Survol urbain Montréal — beau visuel |
| Mont Saint-Bruno | 45.555°, -73.330° | Élévation 218 m, terrain vallonné |
| Île Sainte-Hélène | 45.518°, -73.531° | Parc Jean-Drapeau + La Ronde |
| Boisé Du Tremblay | 45.567°, -73.422° | Forêt urbaine Longueuil — analogue scouting |
| Bassin de Chambly | 45.450°, -73.290° | Plan d'eau au sud — terrain Pour test boat plus tard |
Tous ces points sont dans le tile w074n45, donc accessibles dès que la scenery initiale est cachée.
Changer de point de spawn¶
Édite la variable dans le Makefile :
Pour d'autres régions du Québec :
| Région | Aéroport | Coords (lat,lon,alt,hdg) |
|---|---|---|
| Mirabel (Nord MTL) | CYMX | 45.6800,-74.0386,82,290 |
| Trois-Rivières | CYRQ | 46.3525,-72.6794,60,230 |
| Québec / Jean-Lesage | CYQB | 46.7911,-71.3933,72,300 |
| Sherbrooke | CYSC | 45.4386,-71.6911,241,230 |
| Sept-Îles | CYZV | 50.2233,-66.2656,55,090 |
| Mont-Tremblant / La Macaza | CYTM | 46.4094,-74.7800,265,210 |
Et change --airport=CYHU dans le Makefile en conséquence.
Performance attendue sur Apple Silicon (M1 Pro)¶
| Phase | Comportement |
|---|---|
fgfs startup à froid |
30-90 s (TerraSync télécharge w074n45) |
fgfs startup à chaud (scenery cachée) |
10-20 s |
| Steady-state FPS | 30-60 FPS @ 1280×800 |
| RAM utilisée | ~1.5-2.5 GB |
| GPU usage | modéré sur GPU Apple Silicon intégrée |
Si tu vois la scenery se construire en patchwork (tiles qui pop-in pendant le vol), c'est TerraSync qui télécharge en arrière-plan. Normal au premier survol d'une zone.
Limitations à connaître¶
a) Le Rascal n'est pas le Swordfish¶
Le modèle 3D affiché est le Rascal 110 (modèle générique ArduPilot fourni). Ce n'est pas visuellement un AtomRC Swordfish 1200. Pour le vol et la physique, ça ne change rien (SITL fait toute la physique sur son propre modèle paramétrique). C'est juste que tu verras un Rascal voler à l'écran.
Modéliser un Swordfish 3D pour FG = projet à part entière (XML + meshes) qui n'apporte aucune valeur fonctionnelle. Pas dans le scope.
b) Pas de pilote dans le cockpit¶
Vu de l'extérieur, c'est cohérent (drone autonome). Si tu veux la vue cockpit (v dans FG), tu vois un cockpit Rascal qui n'a rien à voir avec ton avion. Reste à l'extérieur (vue tower, chase, etc.).
c) Pas de retour caméra simulée¶
FG ne simule pas la caméra Pi du fleet-companion. Pour ça → Phase 4+ avec Gazebo (autre simulateur). FG c'est "vol propre + visuel terrain", pas "computer vision".
d) Le vent FG ne se synchronise pas avec SITL¶
FG a son propre modèle de vent qui n'influe sur rien (il prend le FDM externe). Pour simuler du vent, c'est côté SITL :
# Dans MAVProxy ou via paramètres :
param set SIM_WIND_SPD 5 # 5 m/s
param set SIM_WIND_DIR 270 # ouest
L'avion réagira dans SITL, et tu verras FG le rendre.
Vues utiles en vol¶
Une fois en vol, raccourcis FG :
| Touche | Vue |
|---|---|
v |
Cycle: cockpit / tower / chase / fly-by |
V (shift+v) |
Vue précédente |
x / X |
Zoom in / out |
Ctrl+v |
Reset vue |
p |
Pause (mais SITL continue — désynchro temporaire) |
Esc |
Quit FG (proprement) |
Vue tower = cool pour voir l'avion décoller et tourner autour du field. Vue chase = caméra qui suit l'avion en queue. Vue fly-by = caméra fixe qui regarde l'avion passer (très bon pour démos vidéo).
Cycle de dev typique avec FG¶
make fg # lance SITL @ CYHU + FG
# (laisser FG en arrière-plan, garder en focus Cockpit pour le pilotage)
make cockpit # ouvre Cockpit pour piloter via UI/manette
# … session de vol …
make fg-down # ferme FG quand tu n'as plus besoin du visuel
make down # arrête SITL
FG est optionnel — tu peux faire toute ta session sans, et juste l'ouvrir quand tu veux valider un décollage ou un atterrissage visuellement.
Troubleshooting¶
| Symptôme | Cause probable | Fix |
|---|---|---|
✗ FlightGear introuvable au make fg |
Cask pas installé | brew install --cask flightgear |
✗ FGDATA introuvable au make fg |
FGDATA pas bootstrap | Suivre setup-macos.md §6.b (download 1.88 GB) |
| Process FG démarre mais reste à RSS=30 KB, pas de fenêtre | --fg-root pas passé ou pointe sur dir vide |
Vérifier que ~/Library/Application Support/FlightGear/fgdata/ existe et contient Aircraft/, Airports/, etc. |
| FG s'ouvre mais aucun avion visible | SITL pas démarré avec --enable-fgview |
make plane-down && make plane-fg |
| FG s'ouvre mais l'avion ne bouge pas | SITL n'a pas armé / pas de takeoff | Arme depuis Cockpit, mode TAKEOFF |
| Scenery très moche / patchwork | TerraSync en cours de download | Attendre 1-2 min, refaire un survol |
| Pas de scenery du tout (terrain plat vert) | TerraSync désactivé | Vérifier --enable-terrasync dans le flag |
| FG crash au startup | Modèle Rascal pas trouvé | Vérifier $AP_TOOLS/aircraft/Rascal/ existe |
| FPS très bas (<10) | GPU saturée par autre app | Fermer Cockpit pendant test FG seul ; ou réduire --geometry |
lsof -i :5503 montre rien |
SITL pas en mode FG | Démarrer avec make plane-fg pas make plane |
| FG affiche bonne scenery mais ailleurs (KSFO) | --airport=CYHU mal passé |
Vérifier le flag dans le Makefile |
Stocker la scenery en local (offline)¶
TerraSync écrit dans ~/.fgfs/TerraSync/ par défaut. Une fois la scenery Rive-Sud chargée :
On peut backup ce dossier pour avoir la scenery offline (utile sur le terrain sans réseau).
Pourquoi pas Gazebo, X-Plane, RealFlight ?¶
| Alternative | Pourquoi pas pour Fleet |
|---|---|
| Gazebo | Macros support macOS rugueux ; orienté ROS2 (pas notre stack) ; vraiment utile pour caméra simulée (Phase 4+) |
| X-Plane | Commercial. Bridge ArduPilot existe mais pas OSS. |
| RealFlight Evolution | Commercial + Windows only. |
| JSBSim viewer | Pas un vrai viewer 3D — c'est juste les graphs FDM. |
| AirSim | Archivé par Microsoft 2024. |
FG = OSS, mature, Apple Silicon native, scenery monde entier, intégré nativement à ArduPilot depuis 10+ ans. C'est le bon choix pour la Phase 0.5–1.
Références¶
- ArduPilot SITL with FlightGear — https://ardupilot.org/dev/docs/sitl-with-flightgear.html
- FlightGear download — https://www.flightgear.org/download/
- TerraSync (scenery server) — https://scenery.flightgear.org/
- Rascal 110 model README —
$ARDUPILOT/Tools/autotest/aircraft/Rascal/README.Rascal