Sześć stopni swobody#

Swobodny statek może przemieszczać się w trzech kierunkach i obracać wokół trzech osi. To sześć stopni swobody:

Ruch liniowy Typowa oś body Ruch obrotowy Nazwa
przód–tył X wokół X roll
prawo–lewo Y wokół Y pitch
dół–góra Z wokół Z yaw

Tabela używa lotniczego układu body FRD: X forward, Y right, Z down. Samo słowo roll nie definiuje znaku; znak wynika z przyjętego układu i reguły prawej dłoni.

W języku polskim spotyka się:

  • roll — przechylenie;
  • pitch — pochylenie;
  • yaw — odchylenie.

„Pochylenie” bywa mylone z nachyleniem toru lotu, a „odchylenie” z kursem. W kodzie i logach bezpieczniej przechowywać angielską nazwę oraz definicję frame'u.

Osie przechodzą przez środek masy modelu#

W idealnym modelu bryły sztywnej osie body są związane ze statkiem i mają początek w środku masy. FAA opisuje oś podłużną od nosa do ogona jako oś roll, poprzeczną przez skrzydła jako pitch, a pionową jako yaw.

Rzeczywisty sensor nie znajduje się idealnie w środku masy. IMU na ramieniu mierzy przyspieszenie obrotowe zależne od odległości:

a_sensor = a_CG + α × r + ω × (ω × r)

gdzie r jest wektorem od środka masy do sensora. Żyroskop mierzy tę samą prędkość kątową bryły (pomijając elastyczność), ale akcelerometr widzi dodatkowe składniki styczne i dośrodkowe. Przy dużym ramieniu montażowym mogą być istotne.

Układ body FRD#

Powszechna konwencja lotnicza:

X: Forward — do przodu
Y: Right   — w prawo
Z: Down    — w dół

jest prawoskrętna, ponieważ X × Y = Z. Dodatni obrót określa reguła prawej dłoni: kciuk wzdłuż dodatniej osi, zagięte palce pokazują dodatni kierunek.

Dla FRD:

  • dodatni roll wokół +X opuszcza prawe skrzydło / prawą stronę;
  • dodatni pitch wokół +Y unosi nos;
  • dodatni yaw wokół +Z obraca nos w prawo.

Opis „dodatni pitch unosi nos” może zaskakiwać, dopóki nie zastosuje się prawej dłoni przy osi Y skierowanej w prawo. Nie należy zapamiętywać znaków z rysunku bez osi.

p, q i r#

Prędkości kątowe w body oznacza się zwykle:

p = ω_x — roll rate
q = ω_y — pitch rate
r = ω_z — yaw rate

Jednostką SI jest rad/s. Stopnie/s są wygodne w interfejsie, ale kod powinien jawnie konwertować. Pomylenie deg/s z rad/s daje błąd czynnika 180/π≈57,3.

p, q, r nie są pochodnymi kątów Eulera w każdej orientacji. Przy małych kątach są zbliżone, ale ogólnie wektor prędkości kątowej i pochodne roll/pitch/yaw łączy macierz zależna od orientacji. Ta różnica jest ważna przy agresywnym manewrze.

Roll#

Roll jest obrotem wokół osi podłużnej X. W samolocie sterują nim przede wszystkim lotki, które zmieniają siłę nośną skrzydeł. W quadrocopterze mikser zwiększa ciąg jednej strony i zmniejsza drugiej, tworząc moment.

Roll nie oznacza automatycznie ruchu bocznego. Najpierw zmienia orientację wektora siły. W multirotorze po przechyleniu całkowity ciąg ma składową poziomą, która przyspiesza statek. W fixed-wing przechylenie zmienia kierunek siły nośnej i inicjuje zakręt, ale yaw oraz poślizg zależą od steru kierunku i aerodynamiki.

Prawidłowy test znaku:

  1. nieruchomy statek, rozbrojony;
  2. przechyl prawą stronę w dół;
  3. sprawdź, czy roll i/lub odpowiednia oś gyro rośnie w oczekiwanym kierunku zgodnym z dokumentacją;
  4. sprawdź wizualizację attitude;
  5. nie wnioskuj tylko z nazwy kanału.

Jeśli estymator widzi odwrotny roll, regulator może wzmacniać odchylenie zamiast je korygować.

Pitch#

Pitch jest obrotem wokół poprzecznej osi Y. W samolocie elevator lub stabilator tworzy moment pochylający. W multirotorze różnica ciągu przód–tył pochyla wektor ciągu.

Pitch attitude nie jest tym samym co flight-path angle. Samolot może mieć nos kilka stopni powyżej horyzontu, a lecieć poziomo z dodatnim kątem natarcia. Podczas wznoszenia kąt toru może być mniejszy od pitch. W multirotorze pitch może służyć głównie do generowania przyspieszenia poziomego.

Kąt natarcia α jest kątem między osią/referencyjną cięciwą a prędkością powietrza, nie między nosem a horyzontem. Przy wietrze i podmuchach różnica jest istotna.

Yaw#

Yaw jest obrotem wokół osi Z body. W samolocie ster kierunku tworzy moment aerodynamiczny; w multirotorze moment uzyskuje się przez różnicę momentów reakcyjnych wirników albo zmianę wektora ciągu w bardziej złożonych konstrukcjach.

Yaw angle zależy od układu świata i konwencji. W NED często zero odpowiada północy, a dodatni yaw rośnie w stronę wschodu, zgodnie z osią Z skierowaną w dół. W ENU konwencja ROS może definiować zero i znak inaczej.

Yaw nie jest zawsze headingiem magnetycznym. Estymator bez magnetometru może ustawić arbitralne zero przy starcie. System wizyjny może używać osi mapy budynku. Tailsitter może stosować dodatkowy offset prezentacji między trybami.

Heading, track, course i bearing#

Heading#

Kierunek osi podłużnej względem odniesienia (północ prawdziwa, magnetyczna lub lokalna). Heading mówi, gdzie skierowany jest nos, nie dokąd statek się przemieszcza.

Track#

Kierunek wektora prędkości nad ziemią. GNSS może wyznaczyć course over ground dopiero przy wystarczającej prędkości. W spoczynku track jest nieokreślony lub zaszumiony.

Course#

Zależnie od dziedziny oznacza planowany kierunek drogi albo obserwowany course over ground. Dokument musi podać znaczenie.

Bearing#

Kierunek od jednego punktu do drugiego, np. od statku do waypointu. Nie jest orientacją statku.

Przykład: samolot leci na północ przy bocznym wietrze ze wschodu. Jego track może wynosić 0°, heading być skierowany kilka stopni na wschód od północy, a bearing do waypointu zmieniać się w zależności od pozycji.

Multirotor może lecieć na północ z nosem na wschód: track 0°, yaw/heading około 90° w konwencji NED.

Układ świata NED#

North-East-Down jest prawoskrętnym lokalnym układem stycznym:

X: North
Y: East
Z: Down

Początek jest ustalany przez estymator, punkt home albo inną definicję. z=+10 m oznacza 10 m w dół od początku, nie wysokość +10 m. Wznoszenie daje ujemną prędkość v_z w NED.

MAVLink MAV_FRAME_LOCAL_NED definiuje X north, Y east, Z down z początkiem stałym względem Ziemi. LOCAL_POSITION_NED także ma dodatnią oś Z w dół. Interfejs użytkownika może jednak wyświetlać altitude dodatnią do góry, wykonując transformację.

NED jest lokalnym przybliżeniem powierzchni Ziemi. Dla dużych odległości używa się geodezyjnych współrzędnych WGS84 lub ECEF; lokalna płaszczyzna nie powinna być rozciągana bez końca.

Układ ENU#

East-North-Up:

X: East
Y: North
Z: Up

jest prawoskrętny i popularny w ROS, mapowaniu i systemach wizyjnych. Przejście NED↔ENU nie polega tylko na zmianie znaku Z; trzeba również zamienić X i Y:

[x_ENU]   [0 1  0] [x_NED]
[y_ENU] = [1 0  0] [y_NED]
[z_ENU]   [0 0 -1] [z_NED]

Ta macierz dotyczy wektorów wyrażonych w równoległych lokalnych frame'ach. Orientacja wymaga odpowiedniej transformacji macierzy lub quaternionu, nie niezależnego „zamienienia roll i pitch”.

Body FLU#

ROS często używa body:

X: Forward
Y: Left
Z: Up

czyli FLU. PX4/lotnictwo używa FRD. Transformacja wektora body:

x_FLU =  x_FRD
y_FLU = -y_FRD
z_FLU = -z_FRD

To obrót o 180° wokół osi X, nie lustrzane odbicie pojedynczej osi bez konsekwencji dla orientacji. PX4 dokumentuje różnicę body FRD i ROS FLU oraz world NED i ENU przy integracji vision/mocap.

Frame sensora#

IMU ma osie nadrukowane w datasheet i własny sensor frame. Moduł może być obrócony na PCB, a PCB obrócona względem statku. Pełny łańcuch:

raw sensor frame → board frame → vehicle body FRD → navigation NED

Każdy krok powinien być stałą, przetestowaną rotacją. Zamiana osi na podstawie obserwacji „X mniej więcej reaguje na roll” jest niebezpieczna. Trzeba użyć dokumentacji obudowy, layoutu PCB i jednoznacznych testów sześciu orientacji.

Akcelerometr nieruchomy mierzy specific force, nie „czyste przyspieszenie grawitacyjne”. W układzie FRD leżącym poziomo jego znak zależy od konwencji raportowania sterownika. ROS REP 145 dokładnie określa oczekiwania dla IMU; nie każdy surowy chip jest już zgodny z REP.

Frame kamery#

Kamery i biblioteki vision często używają osi optycznych typu X w prawo, Y w dół, Z do przodu. To inny układ niż body FRD. Extrinsic calibration opisuje położenie i obrót kamery względem body.

Pomyłka prowadzi do typowych efektów:

  • ruch do przodu raportowany jako ruch osi Z;
  • yaw kamery interpretowany jako roll statku;
  • lustrzana mapa;
  • poprawna pozycja, ale błędna orientacja odometrii;
  • skok estymatora po włączeniu fuzji vision.

Wiadomość odometrii powinna podawać zarówno frame pozycji, jak i child/body frame prędkości/orientacji. Nazwa tematu vision_pose nie definiuje osi.

Frame gimbala i payloadu#

Gimbal ma co najmniej body/vehicle frame, frame podstawy, osie przegubów i optical frame kamery. Polecenie „yaw 20°” może oznaczać kąt względem statku albo północy. W trybie follow gimbal utrzymuje offset od body; w lock utrzymuje kierunek w world frame.

Dokumentacja musi podać:

  • frame wartości zadanej;
  • kolejność obrotów przegubów;
  • zakresy i znaki;
  • offset montażu;
  • zachowanie po przekroczeniu limitu;
  • timestamp pozycji użytej do geolokalizacji obrazu.

Kąty Eulera#

Roll, pitch i yaw jako trzy liczby są reprezentacją orientacji, a nie trzema niezależnymi obrotami, które można zawsze dodać. Trzeba znać:

  • osie: stałe czy obracające się;
  • kolejność, np. Z-Y-X;
  • kierunek transformacji: body→world czy world→body;
  • aktywna rotacja wektora czy pasywna zmiana współrzędnych;
  • jednostki i zakres zawijania.

Popularna lotnicza sekwencja opisuje orientację przez yaw, pitch, roll, ale biblioteka może implementować mnożenie quaternionów w odwrotnej kolejności zależnie od konwencji. Nazwa funkcji fromEuler(roll,pitch,yaw) nie jest wystarczającą specyfikacją.

Gimbal lock#

Dla sekwencji Z-Y-X przy pitch bliskim ±90° dwie osie reprezentacji stają się współliniowe i roll/yaw nie są jednoznaczne. Fizyczny statek nie traci stopnia swobody; degeneruje się parametr Eulera.

To szczególnie ważne dla tailsittera i akrobatyki. Estymator i regulator używają quaternionów lub macierzy, a kąty Eulera pozostają głównie interfejsem człowieka.

Macierz obrotu#

Macierz R_NB może oznaczać rotację wektora z body B do navigation N:

v_N = R_NB v_B

Jej odwrotność dla idealnej rotacji to transpozycja:

v_B = R_NBᵀ v_N

Indeksy są lepsze niż zmienna rotation, bo wskazują kierunek. Część bibliotek zapisuje wektory wierszowe i mnoży z drugiej strony; kod musi być zgodny.

Macierz powinna spełniać:

RᵀR = I
det(R) = +1

Wyznacznik -1 wskazuje odbicie, zwykle wynik zmiany pojedynczego znaku osi zamiast prawidłowej rotacji.

Quaternion#

Quaternion jednostkowy reprezentuje rotację bez singularności kątów Eulera. Ma cztery składowe i normę 1. Istnieją kolejności [w,x,y,z] oraz [x,y,z,w]; MAVLink w wielu polach dokumentuje [w,x,y,z].

q i -q reprezentują tę samą orientację. Algorytm porównujący składowe bez uwzględnienia tej własności może wykryć fałszywy skok.

Mnożenie quaternionów nie jest przemienne:

q_a ⊗ q_b ≠ q_b ⊗ q_a

Kolejność zależy od tego, czy quaternion obraca wektor, frame i jaki jest kierunek transformacji. Testy jednostkowe powinny obejmować znane obroty 90° wokół każdej osi i ich złożenie.

Quaternion z sensora może opisywać world→sensor, a autopilot oczekiwać body→world. Odwrócenie uzyskuje się przez sprzężenie tylko dla quaternionu jednostkowego.

Integracja prędkości kątowej#

Żyroskop mierzy ω w sensor/body frame. Dla małego kroku:

δθ ≈ ω Δt

ale aktualizacja 3D powinna użyć exponential map lub poprawnego przyrostu quaternionu. Dodawanie pΔt do roll, qΔt do pitch i rΔt do yaw działa jedynie jako małokątowe przybliżenie i narasta źle przy dużej orientacji.

Timestamp jest częścią pomiaru. Użycie stałego Δt przy jitterze tworzy błąd skali. Frame ω musi odpowiadać konwencji aktualizacji.

Momenty roll/pitch/yaw#

Moment w body zapisuje się:

τ_B = [τ_x, τ_y, τ_z]ᵀ

Dynamika bryły:

I ω_dot + ω × (Iω) = τ

pokazuje sprzężenie osi przez tensor bezwładności i człon żyroskopowy. Dla symetrycznego multirotora przy małych prędkościach regulatory mogą wyglądać niezależnie, ale przy agresywnym ruchu osie oddziałują.

Silniki i śmigła dodają własny moment pędu. Zmiana RPM tworzy moment reakcyjny. W samolocie aerodynamika wiąże roll, yaw i sideslip; wychylenie lotki może wywołać adverse yaw.

Mikser quadrocoptera#

Dla układu X mikser przelicza żądany całkowity ciąg i momenty na cztery napędy. Znaki zależą od numeracji silników, położenia i kierunku obrotu. Nie istnieje jedna tabela poprawna dla każdego firmware.

Przykładowa zasada jakościowa:

  • dodatni roll: zwiększ ciąg lewej strony, zmniejsz prawej;
  • dodatni pitch nose-up: zwiększ przód lub zmniejsz tył, zależnie od znaku osi ciągu i definicji wyjścia;
  • yaw: zwiększ parę o jednym kierunku momentu reakcyjnego, zmniejsz przeciwną.

Nie należy kopiować znaków bez testu momentu. Prawidłowa procedura po zamontowaniu:

  1. bez śmigieł sprawdź mapowanie i kierunki;
  2. z modelem/symulatorem sprawdź odpowiedź regulatora;
  3. na ograniczonym stanowisku sprawdź, czy korekta przeciwdziała ręcznemu odchyleniu;
  4. dopiero potem próba lotna.

Oś ciągu w różnych konstrukcjach#

W klasycznym quadrocopterze przy neutralnej orientacji ciąg wirników jest skierowany wzdłuż -Z_body (w górę, gdy +Z jest w dół). Siła aerodynamiczna na statek ma znak ujemny Z. W samolocie ciąg głównego śmigła jest zwykle wzdłuż +X body.

W tailsitterze relacja funkcjonalna zmienia się między zawisem i lotem. Body frame może pozostać związany z płatowcem, podczas gdy interfejs wyświetla offset orientacji dla operatora. MAVLink przewiduje repr_offset_q dla systemów, w których reprezentacja może zmieniać się między trybami.

W tilt-rotorze wektor ciągu zależy od kąta gondoli. Alokator sterowania potrzebuje aktualnej geometrii. Stały mikser body nie wystarcza w całym przejściu.

Euler angles a regulator rate#

Typowy multirotor ma kaskadę:

żądany attitude → błąd orientacji → żądane body rates
body rates p,q,r → PID rate → żądane momenty
momenty + ciąg → alokator/mikser → silniki

Wewnętrzna pętla rate używa p/q/r z żyroskopu, nie numerycznej pochodnej roll/pitch/yaw. Zewnętrzna pętla powinna liczyć błąd orientacji w sposób poprawny 3D; proste odejmowanie yaw wymaga obsługi zawijania ±π.

Przykład zawijania różnicy:

error = wrap_pi(yaw_setpoint - yaw)

Bez wrap przejście z +179° do -179° wygląda jak błąd -358°, choć najkrótsza rotacja ma 2°.

MAVLink definiuje wiele frame'ów. Nazwa wiadomości nie zawsze determinuje semantykę każdego pola, dlatego trzeba czytać enum MAV_FRAME i opis wiadomości.

Przykłady:

Frame Początek Osie
MAV_FRAME_LOCAL_NED stały, lokalny North, East, Down
MAV_FRAME_LOCAL_ENU stały, lokalny East, North, Up
MAV_FRAME_BODY_FRD porusza się ze statkiem Forward, Right, Down
MAV_FRAME_LOCAL_FRD stały początek, orientacja lokalna Forward, Right, Down

Słowo BODY w starszych/deprecated enumach ma pułapki. Aktualna specyfikacja zaznacza, że origin może poruszać się z pojazdem, ale sama nazwa BODY nie zawsze gwarantowała orientację osi w historycznych frame'ach. Nowy kod powinien używać jawnych FRD/FLU tam, gdzie specyfikacja je przewiduje.

Integracja ROS/PX4#

PX4 operuje wewnętrznie w konwencjach NED/FRD, podczas gdy ROS typowo używa ENU/FLU. Most musi transformować:

  • pozycję;
  • prędkość;
  • orientację;
  • prędkość kątową;
  • kowariancję;
  • frame_id i child_frame_id.

Transformacja wartości bez transformacji kowariancji daje matematycznie niespójny pomiar. Dla macierzy kowariancji wektora:

P_new = R P_old Rᵀ

Timestamp i offset montażu są równie ważne jak osie. Poprawny frame z opóźnieniem może destabilizować fuzję.

Kowariancja i kolejność stanów#

Macierz kowariancji jest związana z kolejnością komponentów. MAVLink może definiować tablicę row-major dla określonych stanów, ROS inną strukturę. Zamiana osi wymaga permutacji wierszy i kolumn oraz zmian znaków przez macierz transformacji.

Nie wolno tylko zamienić x/y/z w wektorze i pozostawić covariance. Filtr otrzyma wtedy błędną informację o kierunku niepewności i korelacjach.

Kąty magnetyczne i prawdziwe#

Yaw/heading może odnosić się do północy magnetycznej, prawdziwej albo lokalnej osi startowej. Deklinacja magnetyczna łączy odniesienia, ale model zmienia się w miejscu i czasie. GNSS course nie wyznacza headingu w spoczynku.

System z dwoma antenami GNSS może wyznaczać heading z fazy niezależnie od ruchu, lecz potrzebuje baseline i jakości rozwiązania. Magnetometr mierzy pole lokalne, które może być zaburzone prądem napędu i stalą.

Interfejs powinien wyświetlać heading true, heading magnetic albo yaw local, a nie jedną nieopisaną liczbę.

Testy znaków i frame'ów#

Test sześciu ścian akcelerometru#

Umieść nieruchomy sensor kolejno każdą osią w górę i w dół. Jedna składowa powinna mieć około ±g zgodnie z konwencją specific force, pozostałe blisko zera. Test wykrywa zamianę osi i znak, ale nie pełną kalibrację.

Test żyroskopu#

Obracaj statek dodatnio wokół każdej osi body, obserwując p/q/r. Ruch musi być jednoosiowy i wystarczająco wolny, aby nie pobudzać elastyczności, ale szybki względem biasu.

Test attitude#

Ustaw znane orientacje 0°, ±30°, 90° w bezpiecznym uchwycie. Porównaj wizualizację, quaternion i kąty. Przy 90° pamiętaj o singularności Eulera.

Test world frame#

Przesuń system mocap/vision w kierunku north/east/up jego mapy i sprawdź znaki w estimatorze. Obróć yaw o znany kąt. Nie testuj tylko jednego wektora, ponieważ błędne dwie zamiany mogą przypadkiem dać poprawny jeden przypadek.

Test round-trip#

Transformacja A→B→A powinna odzyskać wektor i orientację w tolerancji. Dla quaternionu porównuj także możliwość znaku q/-q.

Typowe awarie integracji#

Objaw Prawdopodobny błąd
na ziemi wizualizacja jest do góry nogami FRD/FLU lub offset montażu
wznoszenie daje dodatnie z w jednym module, ujemne w drugim NED/ENU
yaw rośnie w przeciwną stronę znak osi Z lub odniesienie
po pitch zmienia się głównie roll zamiana osi sensora
vision działa na północ, psuje się po obrocie child frame/orientation mismatch
po przejściu ±180° regulator obraca długą drogą brak wrap yaw
przy pitch 90° roll/yaw skaczą singularność Eulera, niekoniecznie błąd estimatora
kowariancja ma ujemne/absurdalne kierunki brak transformacji RPRᵀ
filtr odrzuca poprawne dane po restarcie inny origin lub yaw reference
tailsitter ma „błędny pitch” w jednym trybie body vs representation offset

Minimalna specyfikacja interfejsu#

Każde pole wektorowe/orientacji powinno mieć:

  • nazwę frame'u i definicję osi;
  • początek frame'u;
  • kierunek transformacji;
  • jednostkę;
  • timestamp i źródło czasu;
  • kolejność komponentów;
  • dla quaternionu: kolejność składowych i aktywna/pasywna konwencja;
  • dla Eulera: kolejność obrotów i zakres;
  • dla wysokości/yaw: odniesienie;
  • definicję kowariancji.

Przykład dobrej deklaracji:

angular_velocity_body_frd_rad_s = [p,q,r]
orientation_q_nb = [w,x,y,z], active rotation body FRD → local NED
position_ned_m = [north,east,down], origin = EKF local origin
timestamp_us = monotonic boot time at sensor sample

Jest dłuższa od attitude, ale eliminuje klasę kosztownych błędów.

Kod transformacji z testem#

Przykład wektora NED→ENU:

typedef struct { float x, y, z; } vec3f;

vec3f ned_to_enu(vec3f n) {
    return (vec3f){ .x = n.y, .y = n.x, .z = -n.z };
}

vec3f enu_to_ned(vec3f e) {
    return (vec3f){ .x = e.y, .y = e.x, .z = -e.z };
}

Minimalne testy:

north [1,0,0] → ENU [0,1,0]
east  [0,1,0] → ENU [1,0,0]
down  [0,0,1] → ENU [0,0,-1]
round_trip(v) == v

Kod dotyczy wektora. Quaternionu nie konwertuje się przez tę samą zamianę składowych bez wyprowadzenia transformacji.

Diagram zależności#

IMU sensor frame
      │ stały obrót z layoutu PCB
      ▼
board frame
      │ konfiguracja montażu
      ▼
body FRD ── R_NB(q) ──► local NED
   │                         │
   │ FRD→FLU                 │ NED→ENU
   ▼                         ▼
ROS base_link FLU ───────► ROS odom/map ENU

Każda strzałka jest osobną transformacją i powinna mieć test. Łączenie ich w kodzie jest optymalizacją po weryfikacji, nie powodem do pominięcia semantyki.

Wnioski#

Roll, pitch i yaw są nazwami obrotów, ale ich znaki i wartości zależą od frame'u, kolejności i odniesienia. W lotniczym body FRD dodatnie osie to forward, right, down; w świecie często używa się NED. ROS zwykle używa FLU i ENU, dlatego integracja wymaga pełnej rotacji wektorów, orientacji oraz kowariancji.

Najbezpieczniejsza praktyka to unikać anonimowych x,y,z oraz roll,pitch,yaw. Nazwa zmiennej i specyfikacja interfejsu powinny zawierać frame, jednostkę, kierunek transformacji i czas. Znane testy 90°, round-trip oraz sześć orientacji sensora wykrywają błędy wcześniej niż pierwszy lot.

Przypisy

  1. FAA: Pilot’s Handbook of Aeronautical Knowledge [podręcznik instytucji lotniczej]
  2. MAVLink Common Message Set: coordinate frames and LOCAL_POSITION_NED [specyfikacja protokołu]
  3. PX4: Reference Frames and ROS [dokumentacja projektu]
  4. ROS REP 145: Conventions for IMU Sensor Drivers [standard projektu open source]
  5. Sumit Sharma, „Drone Development from Concept to Flight” [książka]
  6. Ty Audronis, „Drony. Wprowadzenie” [książka]