Přehled: proč porovnávat PX4 a ArduPilot z hlediska plánování, bezpečnosti a modularity
PX4 i ArduPilot jsou zralé open-source autopiloty s rozsáhlou komunitou a širokou průmyslovou adopcí. Volba mezi nimi často závisí na třech klíčových aspektech: plánovač a běh úloh (co, kde a kdy běží), bezpečnostní stavy (pre-arm, failsafe, reakce) a modularita (jak je firmware sestaven z modulů/knihoven a jak se integrují senzory, payloady či pozemní nástroje). Následující srovnání se soustředí na architektonické fakty a praktické dopady pro vývoj, ladění a provoz flotil.
Architektura plánování: work-queues a uORB (PX4) vs. AP_Scheduler a vlákna (ArduPilot)
PX4 využívá uORB jako interní pub-sub sběrnici a modulární běh na work queues (sdílených pracovních frontách). Modul může běžet jako samostatný úkol (task) nebo jako work-queue task, plánovaný na pevně stanovený interval či na základě uORB událostí (např. nová senzorová vzorka). Výhodou je kooperativní plánování více modulů na jedné frontě a možnost mít více paralelních front s rozdílnými prioritami. Ovladače a mnoho systémových částí se implementují jako ScheduledWorkItem s vazbou na konkrétní frontu.
ArduPilot organizuje práci pomocí knihovny AP_Scheduler, která rozděluje čas v hlavním vlákně vozidla (Copter/Plane/Rover) na „úkoly“ s kontrolou využití času. Na Linuxu a některých platformách využívá více vláken (např. „rate thread“ pro rychlou smyčku držení postavení), ale AP_Scheduler zůstává centrální jednotkou, která synchronizuje operace s příchodem IMU vzorků a nastavuje pořadí/podíl času pro jednotlivé úkoly.
Praktické dopady plánovačů
- Latence a determinismus: PX4 těží z event-driven běhu (publikace uORB spouští práci) a separace do work-queues; správným přiřazením modulů k frontám je možné zabránit blokování.
- Předvídatelné „time budgets“: AP_Scheduler je transparentní vůči CPU rozpočtu (deadline a „slice“ pro úkoly) a přirozeně navázaný na IMU update – vhodné při ladění „vše v jedné smyčce“.
- Vícevlnovost: ArduPilot v moderních sestavách používá dedikovaná vlákna (např. rate thread), čímž uvolňuje hlavní smyčku pro správu; vyžaduje to disciplínu při sdílení dat.
- Driver model: V PX4 jsou mnohé ovladače „ScheduledWorkItem“ s jasným životním cyklem, což usnadňuje periodické čtení/kalibraci bez rušení ostatních modulů.
Bezpečnostní stavy: pre-arm a failsafe v PX4
PX4 realizuje pre-arm/preflight kontroly s periodou (typicky 10 Hz), publikuje seznam neúspěšných kontrol a GCS (např. QGroundControl) je zobrazuje v reportech. Kontroly pokrývají kvalitu senzorů, stav estimátoru či GPS a jsou řízeny parametry COM_ARM_*.
Failsafe stavový automat je konfigurovatelný (akce: HOLD/LAND/RTL atd.) a lze jej testovat v prohlížeči na identickém kódu jako ve firmwaru, s ohledem na zpožděné akce (COM_FAIL_ACT_T). Podporován je také geofence failsafe (válcová oblast kolem home/altitudy).
Bezpečnostní stavy: pre-arm a failsafe v ArduPilot
ArduPilot vykonává rozsáhlé Pre-Arm Safety Checks; jejich vypnutí je možné, ale důrazně nedoporučené mimo laboratorní testy. Při armingu musí všechny kontroly projít, přičemž GCS dostává vysvětlení neúspěšné podmínky. Jednotlivé rodiny (Copter/Plane/Rover) mají vlastní dokumentované sety a parametry (např. ARMING_CHECK).
Bezpečnostní volby a failsafe na platformách ArduPilot se konfigurují také z QGC (s omezeními, např. polygon fence či rally body), ostatní detaily jsou v dokumentaci daného vozidla.
Modularita: moduly a knihovny
- PX4 moduly: jasně oddělené „app“/„module“ procesy (např.
navigator,commander,mc_pos_ctrl, ovladače) s CLI nástroji; systémová reference dokumentuje moduly a jejich vazbu k work-queues. - ArduPilot knihovny: rozsáhlý strom
AP_*(AP_NavEKF, AP_Motors, AP_Baro, AP_GPS…), které OSI stylem oddělují HAL a vozidlu specifický kód; AP_Scheduler orchestruje volání těchto komponent.
Srovnávací tabulka: plánovače, bezpečnostní stavy, moduly
| Oblast | PX4 | ArduPilot | Dopad pro vývoj/provoz |
|---|---|---|---|
| Plánování úloh | Work-queues + event-driven (uORB), tasks/WorkItems, více front s prioritami. | AP_Scheduler v hlavní smyčce, volitelná dedikovaná vlákna (rate thread). | PX4: jemné ladění latence přiřazením front; ArduPilot: transparentní time-budget ve smyčce. |
| Pre-arm/Preflight | 10 Hz kontroly, arming report do GCS, parametry COM_ARM_*. | Rozsáhlé Pre-Arm kontroly, parametr ARMING_CHECK, silně doporučeno nevypínat. | Obě platformy poskytují jasné důvody neúspěchu; proces armingu je auditovatelný. |
| Failsafe stavový automat | Simulovatelný v prohlížeči (shodný kód), akce HOLD/LAND/RTL, geofence failsafe. | Konfigurace dle typu vozidla; v QGC částečné možnosti, detail v dokumentaci vozidla. | PX4 usnadňuje testování „co kdyby“ scénářů bez rizika; ArduPilot má široký katalog failsafe dle vozidla. |
| Driver/payload vzor | ScheduledWorkItem + work-queue pro ovladače, deterministické periodické čtení. | AP_ knihovny volané plánovačem, robustní HAL pro mnoho platforem. | PX4: jasná vazba ovladače na frontu; ArduPilot: flexibilní port na různé HW. |
Plánovače a výkon: co sledovat při ladění
- PX4: přiřazení kritických modulů na oddělené high-prio fronty; vyhnout se dlouhým blokujícím voláním v WorkItems; ujistěte se, že event-driven „wakeupy“ s uORB nezaplňují frontu.
- ArduPilot: sledujte zatížení smyčky a zda rate thread drží cílovou frekvenci (gyro/rate); při změně rate respektujte závislosti PID/notch/dshot.
Bezpečnost a verifikace: testování před letem
- PX4: standardizované simulace failsafe a možnost „proklikat“ stavový automat; geofence a akce ověřte v SITL před nasazením do reálu.
- ArduPilot: zachovejte zapnuté pre-arm kontroly; pokud musíte něco vypnout při bench-testu, po testech je obnovte na výchozí hodnoty.
Moduly, rozšíření a integrace se zemí
- PX4: moduly s jasným CLI a dokumentovanými rozhraními (např.
commander,navigator, ESC/battery modul), vazba na QGroundControl pro bezpečnostní nastavení. - ArduPilot: konfigurace failsafe a bezpečnosti dostupná v QGC (částečně) a detailní nastavení v dokumentaci podle vozidla.
Tipy pro výběr podle projektu
- Precizní „event-driven“ běh a jemné ladění latencí → zvažte PX4 s prací na oddělených work-queues a modulárním driver modelem.
- Heterogenní hardware a „vše v jedné smyčce“ s jasným time-budgetem → ArduPilot s AP_Scheduler a volitelnými rate vlákny.
- Testování bezpečnostních stavů před nasazením → PX4 webový simulátor failsafe a SITL; u ArduPilot trvejte na zapnutých pre-arm kontrolách.
Co si odnést: stručné shrnutí rozdílů
- Plánovače: PX4 = work-queues + uORB událostmi řízené WorkItems; ArduPilot = AP_Scheduler v hlavní smyčce + volitelná dedicated threads.
- Bezpečnost: oba mají robustní pre-arm/failsafe; PX4 nabízí simulaci stavového automatu; ArduPilot varuje před vypínáním kontrol.
- Modularita: PX4 moduly/WorkItems s jasnou vazbou na fronty; ArduPilot knihovny s rozsáhlým HAL a scheduler orchestrací.
Příloha: stručný „mapovací“ slovník pojmů
| Pojem | PX4 | ArduPilot |
|---|---|---|
| Message bus | uORB (pub-sub mezi moduly) | interní volání/AP_ knihovny |
| Plánovač | Work-queues (kooperativní), event/interval scheduling | AP_Scheduler v hlavním vlákně + rate thread |
| Pre-arm | COM_ARM_* preflight kontroly, 10 Hz, report v GCS | ARMING_CHECK a sady kontrol (Copter/Plane/Rover) |
| Failsafe | Konfigurovatelné akce + simulátor stavového automatu | Konfigurace dle vozidla, podpora v QGC (subset) |
| Driver vzor | ScheduledWorkItem přiřazený k work-queue | AP_* knihovny volané plánovačem |
Obě platformy jsou spolehlivým základem pro profesionální UAV. PX4 zaujme event-driven filosofií s work-queues a bohatou simulací failsafe, což pomáhá při jemném ladění latencí a bezpečnostních scénářů. ArduPilot staví na transparentním AP_Scheduler, silném ekosystému knihoven a široké podpoře hardware. Volba závisí na typu mise, požadavcích na latenci a týmových dovednostech: pokud hledáte přesnou kontrolu nad časováním a modulární driver model, přikloníte se k PX4; pokud preferujete „jednu smyčku“ s jasným time-budgetem a extrémní HW variabilitu, má navrch ArduPilot.