Přehled: proč porovnávat PX4 a ArduPilot z pohledu plánování, bezpečnosti a modularity
PX4 i ArduPilot jsou osvědčené open-source autopiloty s rozsáhlou komunitou a průmyslovým využitím. Volba mezi nimi často závisí na třech aspektech: plánovač a běh úloh (co, kde a kdy běží), bezpečnostní stavy (pre-arm, failsafe, akce) a modularita (jak se firmware skládá z modulů/knihoven a jak jsou integrovány senzory, payloady či pozemní nástroje). Následující srovnání se zaměřuje na architektonické skutečnosti a praktické důsledky 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 používá uORB jako interní pub-sub sběrnici a modulární běh na work queues (sdílené pracovní fronty). Modul může běžet jako samostatný úkol (task) nebo jako work-queue task, plánovaný na pevný interval či na základě uORB události (např. nový senzorický vzorek). Výhodou je kooperativní plánování více modulů na jedné frontě a možnost mít více paralelních front s různými prioritami. Drivery a řada systémových částí jsou implementovány jako ScheduledWorkItem s vazbou na konkrétní frontu.
ArduPilot organizuje práci prostřednictvím 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 udržování attitudy), avšak 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é tasks.
Praktické důsledky plánovačů
- Latence a determinističnost: PX4 těží z event-driven běhu (uORB publikace spouští práci) a separace do work-queues; správným přiřazením modulů k frontám lze zabránit blokování.
- Předvídatelné „time budgets“: AP_Scheduler je transparentní ohledně rozpočtu CPU (deadline a „slice“ pro tasky) a přirozeně navázaný na IMU aktualizaci – výhodné při ladění „vše v jedné smyčce“.
- Vícevláknovost: ArduPilot v moderních sestavách používá dedikovaná vlákna (např. rate thread), což uvolňuje hlavní smyčku pro údržbu; vyžaduje to disciplínu při sdílení dat.
- Model driveru: V PX4 jsou mnohé drivery „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 periodicky (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 firmware, s ohledem na prodlevy akcí (COM_FAIL_ACT_T). Podporovány jsou i geofence failsafe (válcová oblast okolo home/altitude).
Bezpečnostní stavy: pre-arm a failsafe v ArduPilot
ArduPilot provádí rozsáhlé Pre-Arm Safety Checks; jejich vypnutí je možné, avšak důrazně nedoporučené mimo laboratorní testy. Při armingu musí všechny kontroly projít a GCS obdrží vysvětlení neúspěšné podmínky. Jednotlivé rodiny (Copter/Plane/Rover) mají vlastní dokumentované sady a parametry (např. ARMING_CHECK).
Bezpečnostní volby a failsafe v ArduPilot platformách se dají konfigurovat také z QGC (s omezeními, např. polygon fence či rally body), podrobnosti jsou uvedeny v dokumentaci pro příslušné vozidlo.
Modularita: moduly a knihovny
- PX4 moduly: jasně oddělené „app“/„module“ procesy (např.
navigator,commander,mc_pos_ctrl, drivery) s CLI nástroji; systémová reference dokumentuje moduly a jejich vztah k work-queues. - ArduPilot knihovny: bohatý strom
AP_*(AP_NavEKF, AP_Motors, AP_Baro, AP_GPS…), které OSI stylem oddělují HAL a vehicle specifický kód; AP_Scheduler orchestruje volání těchto komponent.
Porovnávací tabulka: plánovače, bezpečnostní stavy, moduly
| Oblast | PX4 | ArduPilot | Důsledek 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řes přiřazení front; ArduPilot: transparentní time-budget v smyčce. |
| Pre-arm/Preflight | 10 Hz kontroly, arming report do GCS, COM_ARM_* parametry. | 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 (stejný kód), akce HOLD/LAND/RTL, geofence failsafe. | Konfigurace dle typu vozidla; v QGC část možností, detaily v dokumentaci vozidla. | PX4 usnadňuje testování „co kdyby“ scénářů bez rizika; ArduPilot má široký katalog failsafe podle vozidla. |
| Driver/payload vzor | ScheduledWorkItem + work-queue pro drivery, deterministické periodické čtení. | AP_ knihovny volané plánovačem, silný HAL pro mnoho platforem. | PX4: jasná vazba driveru 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 ve WorkItems; zajistit, že event-driven „wakeups“ s uORB nezaplavují frontu.
- ArduPilot: sledovat zatížení smyčky a zda rate thread drží cílovou frekvenci (gyro/rate); při změně rate respektovat 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ěřit v SITL před reálným nasazením.
- ArduPilot: nechat zapnuté pre-arm kontroly; pokud je nutné cokoli vypnout při bench testu, po testu vrátit 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á dedikovaná vlákna.
- Bezpečnost: obě 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 bohatým HAL a orchestrací plánovačem.
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 podle 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é HW podpoře. Výběr závisí na typu mise, požadavcích na latenci a týmových dovednostech: pokud hledáte přesnou kontrolu nad nač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, vede ArduPilot.



























