PX4 a ArduPilot: srovnání plánování, bezpečnosti a modularity autopilotů

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.