Prehľad: prečo porovnávať PX4 a ArduPilot z pohľadu plánovania, bezpečnosti a modularity
PX4 aj ArduPilot sú zrelé open-source autopiloty s veľkou komunitou a priemyselnou adopciou. Rozhodnutie medzi nimi často stojí na troch veciach: plánovač a beh úloh (čo, kde a kedy beží), bezpečnostné stavy (pre-arm, failsafe, akcie) a modularita (ako sa skladá firmware z modulov/knižníc a ako sa integrujú senzory, payloady či pozemné nástroje). Nasledujúce porovnanie sa sústreďuje na architektúrne fakty a praktické dôsledky pre vývoj, ladenie a prevádzku flotíl.
Architektúra plánovania: work-queues a uORB (PX4) vs. AP_Scheduler a vlákna (ArduPilot)
PX4 používa uORB ako internú pub-sub zbernicu a modulárny beh na work queues (zdieľané pracovné fronty). Modul môže bežať ako samostatná úloha (task) alebo ako work-queue task, plánovaný s pevným intervalom či na základe uORB udalosti (napr. nový senzorický vzorok). Výhodou je kooperatívne plánovanie viacerých modulov na jednej fronte a možnosť mať viac paralelných front s odlišnými prioritami. Vodiče a mnohé systémové časti sa implementujú ako ScheduledWorkItem s väzbou na konkrétnu frontu.
ArduPilot organizuje prácu cez knižnicu AP_Scheduler, ktorá rozdeľuje čas v hlavnom vlákne vozidla (Copter/Plane/Rover) na „úlohy“ s kontrolou využitia času. Na Linuxe a niektorých platformách využíva viac vlákien (napr. „rate thread“ pre rýchlu slučku držania attitude), no AP_Scheduler ostáva centrálnou jednotkou, ktorá synchronizuje operácie s príchodom IMU vzoriek a nastavuje poradie/podiel času na jednotlivé tasks.
Praktické dôsledky plánovačov
- Latencia a deterministickosť: PX4 benefituje z event-driven behu (uORB publikácie spúšťajú prácu) a separácie do work-queues; správnym priradením modulov k frontám sa dá vyhnúť blokovaniu.
- Predvídateľné „time budgets“: AP_Scheduler je transparentný na rozpočet CPU (deadline a „slice“ pre tasky) a prirodzene sa viaže na IMU update – výhodné pri ladení „všetko v jednej slučke“.
- Viacvláknovosť: ArduPilot v moderných zostavách používa dedikované vlákna (napr. rate thread), čo uvoľňuje hlavnú slučku pre housekeeping; vyžaduje to disciplínu pri zdieľaní dát.
- Driver model: V PX4 sú mnohé drivery „ScheduledWorkItem“ s jasným životným cyklom, čo uľahčuje periodické čítanie/kalibráciu bez rušenia ostatných modulov.
Bezpečnostné stavy: pre-arm a failsafe v PX4
PX4 realizuje pre-arm/preflight kontroly s periodou (typicky 10 Hz), publikuje zoznam neúspešných kontrol a GCS (napr. QGroundControl) ich zobrazuje v reportoch. Kontroly pokrývajú kvalitu senzorov, stav estimátora či GPS a sú riadené parametrami COM_ARM_*.
Failsafe stavový automat je konfigurovateľný (akcie: HOLD/LAND/RTL atď.) a dá sa testovať v prehliadači na identickom kóde ako vo firmevéri, s ohľadom na oneskorené akcie (COM_FAIL_ACT_T). Podporované sú aj geofence failsafe (valcová oblasť okolo home/altitúdy).
Bezpečnostné stavy: pre-arm a failsafe v ArduPilot
ArduPilot vykonáva rozsiahle Pre-Arm Safety Checks; ich vypnutie je možné, no dôrazne neodporúčané mimo laboratórnych testov. Pri armingu musí všetko prejsť, pričom GCS dostáva vysvetlenie neúspešnej podmienky. Jednotlivé rodiny (Copter/Plane/Rover) majú vlastné dokumentované sety a parametre (napr. ARMING_CHECK).
Bezpečnostné voľby a failsafe na ArduPilot platformách sa konfiguruje aj z QGC (s obmedzeniami, napr. polygon fence či rally body), zvyšné detaily sú v dokumentácii k danému vozidlu.
Modularita: moduly a knižnice
- PX4 moduly: jasne oddelené „app“/„module“ procesy (napr.
navigator,commander,mc_pos_ctrl, drivery) s CLI nástrojmi; systémová referencia dokumentuje moduly a ich vzťah k work-queues. - ArduPilot knižnice: bohatý strom
AP_*(AP_NavEKF, AP_Motors, AP_Baro, AP_GPS…), ktoré OSI štýlom oddelia HAL a vehicle-špecifický kód; AP_Scheduler orchestruje volanie týchto komponentov.
Porovnávacia tabuľka: plánovače, bezpečnostné stavy, moduly
| Oblasť | PX4 | ArduPilot | Dôsledok pre vývoj/prevádzku |
|---|---|---|---|
| Plánovanie úloh | Work-queues + event-driven (uORB), tasks/WorkItems, viac front s prioritami. | AP_Scheduler v hlavnej slučke, voliteľné dedikované vlákna (rate thread). | PX4: jemné ladenie latencie cez priradenie front; ArduPilot: transparentný time-budget v slučke. |
| Pre-arm/Preflight | 10 Hz kontroly, arming report do GCS, COM_ARM_* parametre. | Rozsiahle Pre-Arm checks, parameter ARMING_CHECK, silne odporúčané nevypínať. | Obe platformy poskytujú jasné dôvody neúspechu; proces armingu je audítovateľný. |
| Failsafe stavový automat | Simulovateľný v prehliadači (rovnaký kód), akcie HOLD/LAND/RTL, geofence failsafe. | Konfigurácia podľa typu vozidla; v QGC časť možností, detail v dokumentácii vozidla. | PX4 uľahčuje testovanie „čo ak“ scenárov bez rizika; ArduPilot má široký katalóg failsafe podľa vehiklu. |
| Driver/payload vzor | ScheduledWorkItem + work-queue pre drivery, deterministické periodické čítanie. | AP_ knižnice volané plánovačom, silný HAL pre mnoho platforiem. | PX4: jasná väzba driveru na frontu; ArduPilot: flexibilný port na rôzny HW. |
Plánovače a výkon: čo sledovať pri ladení
- PX4: priradenie kritických modulov na oddelené high-prio fronty; vyhnúť sa dlhým blokujúcim volaniam v WorkItems; uistite sa, že event-driven „wakeups“ s uORB nezaplavujú frontu.
- ArduPilot: sledujte zaťaženie slučky a či rate thread drží cieľovú frekvenciu (gyro/rate); pri zmene rate rešpektujte závislosti PID/notch/dshot.
Bezpečnosť a verifikácia: testovanie pred letom
- PX4: štandardizované simulácie failsafe a možnosť „preklikávať“ stavový automat; geofence a akcie overte v SITL pred reálnym nasadením.
- ArduPilot: nechajte zapnuté pre-arm checks; ak musíte niečo vypnúť pri bench-teste, po teste vráťte na default.
Moduly, rozšírenia a integrácia so zemou
- PX4: moduly s jasným CLI a dokumentovanými rozhraniami (napr.
commander,navigator, ESC/battery modul), väzba na QGroundControl pre bezpečnostné nastavenia. - ArduPilot: konfigurácia failsafe a bezpečnosti dostupná v QGC (sčasti) a detailné nastavenia v dokumentácii podľa vehiklu.
Tipy pre výber podľa projektu
- Precízny „event-driven“ beh a jemné ladenie latencií → zvážte PX4 s prácou na oddelených work-queues a modulárnym driver modelom.
- Heterogénny hardware a „všetko v jednej slučke“ s jasným time-budgetom → ArduPilot s AP_Scheduler a voliteľnými rate vláknami.
- Testovanie bezpečnostných stavov pred nasadením → PX4 webový simulátor failsafe a SITL; pri ArduPilot trvajte na zapnutých pre-arm kontrolách.
Čo si odniesť: stručné zhrnutie rozdielov
- Plánovače: PX4 = work-queues + uORB udalosťami riadené WorkItems; ArduPilot = AP_Scheduler v hlavnej slučke + voliteľné dedicated threads.
- Bezpečnosť: oboje majú robustné pre-arm/failsafe; PX4 ponúka simuláciu stavového automatu; ArduPilot varuje pred vypínaním kontrol.
- Modularita: PX4 moduly/WorkItems s jasnou väzbou na fronty; ArduPilot knižnice s bohatým HAL a scheduler orchestráciou.
Príloha: stručný „mapovací“ slovník pojmov
| Pojem | PX4 | ArduPilot |
|---|---|---|
| Message bus | uORB (pub-sub medzi modulmi) | interné volania/AP_ knižnice |
| Plánovač | Work-queues (co-operative), event/interval scheduling | AP_Scheduler v hlavnom vlákne + rate thread |
| Pre-arm | COM_ARM_* preflight checks, 10 Hz, report v GCS | ARMING_CHECK a sady kontrol (Copter/Plane/Rover) |
| Failsafe | Konfigurovateľné akcie + simulátor stavového automatu | Konfigurácia podľa vehiklu, podpora v QGC (subset) |
| Driver vzor | ScheduledWorkItem priradený k work-queue | AP_* knižnice volané plánovačom |
Obe platformy sú spoľahlivým základom pre profesionálne UAV. PX4 zaujme event-driven filozofiou s work-queues a bohatou simuláciou failsafe, čo pomáha pri jemnom ladení latencií a bezpečnostných scenárov. ArduPilot zase stavia na transparentnom AP_Scheduler, silnom ekosystéme knižníc a širokej HW podpore. Výber závisí od typu misie, požiadaviek na latenciu a tímových zručností: ak hľadáte presnú kontrolu nad načasovaním a modulárny driver model, nakloníte sa k PX4; ak chcete „jednu slučku“ s jasným time-budgetom a extrémnu HW variabilitu, má navrch ArduPilot.