Současné řídicí platformy: srovnání plánovačů a modulů v PX4 a ArduPilot

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.