{"id":20920,"date":"2026-03-16T05:00:00","date_gmt":"2026-03-16T04:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=20920"},"modified":"2026-03-16T14:00:06","modified_gmt":"2026-03-16T13:00:06","slug":"podstawy-protokolu-mavlink","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/podstawy-protokolu-mavlink\/","title":{"rendered":"Podstawy protoko\u0142u MAVLink"},"content":{"rendered":"\n<p>MAVLink (Micro Air Vehicle Link) to protok\u00f3\u0142 komunikacyjny wykorzystywany do sterowania ma\u0142ymi pojazdami bezza\u0142ogowymi. Charakteryzuje si\u0119 bardzo kr\u00f3tkim nag\u0142\u00f3wkiem. W wersji 1 ma on d\u0142ugo\u015b\u0107 zaledwie 8 bajt\u00f3w, w wersji 2 jest to 14 bajt\u00f3w. Dzi\u0119ki temu dobrze nadaje si\u0119 do zastosowania w \u015brodkach komunikacji o ograniczonej przepustowo\u015bci. U\u017cywa si\u0119 go mi\u0119dzy innymi w hobbystycznych projektach wykorzystuj\u0105cych modu\u0142y radiowe nRF24L01, ale jest te\u017c niezale\u017cny od warstwy fizycznej.<\/p>\n\n\n\n<p>W protokole MAVLink dane telemetryczne s\u0105 przesy\u0142ane w taki spos\u00f3b, aby zu\u017cywa\u0107 jak najmniejsz\u0105 przepustowo\u015b\u0107 \u0142\u0105cza, natomiast wiadomo\u015bci zawieraj\u0105ce wa\u017cne polecenia s\u0105 retransmitowane w przypadku utracenia lub uszkodzenia pakietu. W zale\u017cno\u015bci od rodzaju systemu stosuje si\u0119 r\u00f3\u017cne \u201edialekty\u201d. S\u0105 one zdefiniowane za pomoc\u0105 plik\u00f3w xml, a podstawowy zestaw wiadomo\u015bci okre\u015blony jest w zbiorze o nazwie <a href=\"https:\/\/mavlink.io\/en\/messages\/common.html\" target=\"_blank\" aria-label=\"common (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >common<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Dlaczego warto zastosowa\u0107 protok\u00f3\u0142 MAVLink w swoim projekcie?<\/strong><\/h2>\n\n\n\n<p>Standard ten jest wykorzystywany w wielu projektach autopilot\u00f3w dla ma\u0142ych bezza\u0142ogowych aparat\u00f3w lataj\u0105cych, z kt\u00f3rych pi\u0119\u0107 najpopularniejszych to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a aria-label=\" (opens in a new tab)\" class=\"ek-link\" href=\"http:\/\/px4.io\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >PX4<\/a>,<\/li>\n\n\n\n<li><a aria-label=\" (opens in a new tab)\" class=\"ek-link\" href=\"https:\/\/ardupilot.org\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >ArduPilot<\/a>,<\/li>\n\n\n\n<li><a aria-label=\" (opens in a new tab)\" class=\"ek-link\" href=\"http:\/\/autoquad.org\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >AutoQuad 6 AutoPilot<\/a>,<\/li>\n\n\n\n<li><a aria-label=\" (opens in a new tab)\" class=\"ek-link\" href=\"https:\/\/github.com\/iNavFlight\/inav\/wiki\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >iNAV<\/a>,<\/li>\n\n\n\n<li><a aria-label=\" (opens in a new tab)\" class=\"ek-link\" href=\"https:\/\/sky-drones.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >SmartAP Autopilot<\/a>.<\/li>\n<\/ul>\n\n\n\n<p>Elektronik\u0119 potrzebn\u0105 do skonstruowania autopilota mo\u017cna skompletowa\u0107 samodzielnie lub kupi\u0107 gotowe urz\u0105dzenie. MAVLink jest te\u017c wykorzystywany w stale rozwijanych aplikacjach dla stacji naziemnych jak <a aria-label=\" (opens in a new tab)\" href=\"http:\/\/qgroundcontrol.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >QGroundControl<\/a> czy <a aria-label=\" (opens in a new tab)\" href=\"https:\/\/ardupilot.org\/planner\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Mission Planner<\/a>. Zamiast tworzy\u0107 w\u0142asn\u0105 aplikacj\u0119 od zera, lepiej wybra\u0107 do swojego projektu jedn\u0105 z nich i zaoszcz\u0119dzi\u0107 du\u017co czasu, kt\u00f3ry mo\u017cna wykorzysta\u0107 na budow\u0119 pojazdu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Przyk\u0142ad na podstawie C i Linuksa<\/strong><\/h2>\n\n\n\n<p>Wzorcowa implementacja protoko\u0142u MAVLink jest napisana w j\u0119zyku C, jednak istniej\u0105 generatory dla wielu innych j\u0119zyk\u00f3w (<a aria-label=\"MAVLink Project Generators\/Languages (opens in a new tab)\" href=\"https:\/\/mavlink.io\/en\/#supported_languages\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >MAVLink Project Generators\/Languages<\/a>). Spos\u00f3b generowania i korzystania z bibliotek w j\u0119zyku C jest szczeg\u00f3\u0142owo opisany na stronie <a aria-label=\"Using C MAVLink Libraries (mavgen) (opens in a new tab)\" href=\"https:\/\/mavlink.io\/en\/mavgen_c\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Using C MAVLink Libraries (mavgen)<\/a>. Poni\u017cej zamieszczam dzia\u0142aj\u0105cy przyk\u0142ad w j\u0119zyku C.<\/p>\n\n\n\n<p>Podobny mo\u017cna znale\u017a\u0107 w repozytorium projektuMAVLink UDP Linux Example, a jego autorem jest Bryan Godbolt. Dzi\u0119ki dodanym instrukcjom preprocesora, poni\u017cszy kod skompiluje si\u0119 r\u00f3wnie\u017c na systemie Windows. Aby go skompilowa\u0107, nale\u017cy pobra\u0107 i rozpakowa\u0107 udost\u0119pnione przez tw\u00f3rc\u00f3w wygenerowane biblioteki: <a href=\"https:\/\/github.com\/mavlink\/c_library_v2\" target=\"_blank\" aria-label=\"c_library_v2 (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >c_library_v2<\/a>. Nast\u0119pnie nale\u017cy wykona\u0107 poni\u017csze polecenie, podaj\u0105c w\u0142a\u015bciw\u0105 \u015bcie\u017ck\u0119 do rozpakowanej biblioteki<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>na Linuksie<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ngcc -I ..\/c_library_v2\/common -o mavlink_udp mavlink_udp.c -lpthread\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>na Windowsie<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ngcc -I ..\/c_library_v2\/common -o mavlink_udp mavlink_udp.c -lwsock32\n<\/pre><\/div>\n\n\n<p>Program przyjmuje jako parametr uruchomieniowy adres IP stacji naziemnej. W aplikacji QGroundControl nale\u017cy wej\u015b\u0107 do menu Application Settings &gt; Comm Links i doda\u0107 po\u0142\u0105czenie typu UDP, podaj\u0105c adres serwera, czyli urz\u0105dzenia, na kt\u00f3rym b\u0119dzie uruchomiony przyk\u0142ad. Mo\u017cna uruchomi\u0107 przyk\u0142ad i aplikacj\u0119 stacji naziemnej QGroundControl na tym samym urz\u0105dzeniu.<\/p>\n\n\n\n<p><a href=\"https:\/\/moderntester.sii.pl\/msuma\/mavlink\/-\/blob\/main\/step_1\/mavlink_udp.c\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >step_1\/mavlink_udp.c<\/a><\/p>\n\n\n\n<p>Na tym etapie przyk\u0142adowy program umo\u017cliwia tylko nawi\u0105zanie po\u0142\u0105czenia przez stacj\u0119 naziemn\u0105. Wysy\u0142a co sekund\u0119 wiadomo\u015b\u0107 typu <a aria-label=\" (opens in a new tab)\" href=\"https:\/\/mavlink.io\/en\/messages\/common.html#HEARTBEAT\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >HEARTBEAT<\/a> z kilkoma prostymi informacjami:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Parametr <em>system_id<\/em> to identyfikator pojazdu. Wszystkich w\u0119z\u0142\u00f3w w jednej sieci (pojazd\u00f3w, stacji naziemnych) mo\u017ce by\u0107 w maksymalnie 255. <\/li>\n\n\n\n<li>Parametr <em>component_id<\/em> to identyfikator komponentu pojazdu. W bardziej z\u0142o\u017conych konstrukcjach czujnik IMU czy obracana kamera mog\u0105 by\u0107 osobnymi komponentami<del>)<\/del>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Sterowanie r\u0119czne<\/strong><\/h2>\n\n\n\n<p>Aplikacja QGroundControl obs\u0142uguje popularne kontrolery do gier. Jej tw\u00f3rcy polecaj\u0105 kilka modeli na PC oraz DualShocka 4 znanego z konsol do gier PlayStation. O obs\u0142udze gamepad\u00f3w przez QGroundControl mo\u017cna przeczyta\u0107 wi\u0119cej na stronie <a href=\"https:\/\/docs.qgroundcontrol.com\/master\/en\/qgc-user-guide\/setup_view\/joystick.html\" target=\"_blank\" aria-label=\"Joystick Setup (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Joystick Setup<\/a>. Telefon lub tablet wraz z kontrolerem mog\u0105 razem pe\u0142ni\u0107 rol\u0119 modelarskiej aparatury nadawczej. Mo\u017cna ewentualnie wy\u015bwietli\u0107 <a href=\"https:\/\/docs.qgroundcontrol.com\/master\/en\/qgc-user-guide\/settings_view\/virtual_joystick.html\" target=\"_blank\" aria-label=\"wirtualne joysticki (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >wirtualne joysticki<\/a> na ekranie, ale nie jest to praktyczne rozwi\u0105zanie.<\/p>\n\n\n\n<p>Aby pojazd m\u00f3g\u0142 odbiera\u0107 wiadomo\u015bci zawieraj\u0105ce informacje o wychyleniach joystick\u00f3w i naci\u015bni\u0119ciach przycisk\u00f3w, nale\u017cy doda\u0107 w\u0105tek odbieraj\u0105cy wiadomo\u015bci. S\u0105 one rozr\u00f3\u017cniane po identyfikatorze. Wiadomo\u015b\u0107 zawieraj\u0105ca wychylenia joystick\u00f3w i stan przycisk\u00f3w ma identyfikator 69.<\/p>\n\n\n\n<p><a href=\"https:\/\/moderntester.sii.pl\/msuma\/mavlink\/-\/blob\/main\/step_2\/mavlink_udp.c\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >step_2\/mavlink_udp.c<\/a><\/p>\n\n\n\n<p>Konstruktorzy z powodzeniem wykorzystuj\u0105 aplikacj\u0119 stacji bazowej do sterowania pojazdami za po\u015brednictwem sieci kom\u00f3rkowej. Zach\u0119cam do obejrzenia <a href=\"https:\/\/www.youtube.com\/watch?v=c3aoUyZnp7s\" target=\"_blank\" aria-label=\"nagrania z lotu quadcoptera (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >nagrania z lotu quadcoptera<\/a> sterowanego i przesy\u0142aj\u0105cego obraz z kamery w ten spos\u00f3b.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Controlled Drone Flight With A Live 4G Video Feed | Ascend Engineering\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/c3aoUyZnp7s?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Samodzielne napisanie programu, kt\u00f3ry odczytuje dane przychodz\u0105ce z urz\u0105dzenia wej\u015bciowego i przekazuje je dalej przez sie\u0107, nie jest bardzo skomplikowane, ale to nie jedyna funkcja stacji bazowej.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Plan lotu<\/strong><\/h2>\n\n\n\n<p>QGroundControl i wiele innych aplikacji stacji bazowych posiada dwa tryby pracy: <a aria-label=\"Fly (opens in a new tab)\" href=\"https:\/\/docs.qgroundcontrol.com\/master\/en\/qgc-user-guide\/fly_view\/fly_view.html\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Fly<\/a> i <a aria-label=\"Plan (opens in a new tab)\" href=\"https:\/\/docs.qgroundcontrol.com\/master\/en\/qgc-user-guide\/plan_view\/plan_view.html\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Plan<\/a>. Ten drugi s\u0142u\u017cy do planowania trasy lotu i jest wykorzystywany przez u\u017cytkownik\u00f3w aparat\u00f3w lataj\u0105cych o pewnym stopniu autonomii, zdolnych do wykonywania zada\u0144 bez ci\u0105g\u0142ego nadzoru, a nawet poza zasi\u0119giem stacji naziemnej. Obs\u0142ug\u0119 trybu Plan szczeg\u00f3\u0142owo zaprezentowano w tym <a href=\"https:\/\/www.youtube.com\/watch?v=0d23O_RUOmI&amp;t=440s\" target=\"_blank\" aria-label=\"filmie instrukta\u017cowym (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >filmie instrukta\u017cowym<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"\ud83d\udcd6 &quot;Getting Started&quot; guide for QGroundControl (Planning a Mission)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/0d23O_RUOmI?start=440&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>W dalszej cz\u0119\u015bci poka\u017c\u0119, jak odebra\u0107 ze stacji naziemnej plan lotu, czyli list\u0119 punkt\u00f3w trasy do przebycia (waypoint\u00f3w):<\/p>\n\n\n\n<p><a href=\"https:\/\/moderntester.sii.pl\/msuma\/mavlink\/-\/blob\/main\/step_3\/mavlink_udp.c\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >step_3\/mavlink_udp.c<\/a><\/p>\n\n\n\n<p>Po naniesieniu na map\u0119 w trybie Plan wszystkich punkt\u00f3w trasy, okre\u015bleniu wysoko\u015bci przelotu itd., klikamy przycisk Upload. Stacja naziemna (GCS) wysy\u0142a do pojazdu wiadomo\u015b\u0107 typu <a href=\"https:\/\/mavlink.io\/en\/messages\/common.html#MISSION_COUNT\" target=\"_blank\" aria-label=\"MISSION_COUNT (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >MISSION_COUNT<\/a> zawieraj\u0105c\u0105 informacj\u0119 o ilo\u015bci punkt\u00f3w trasy. Pojazd odpowiada \u017c\u0105daniem przes\u0142ania pierwszego punktu (<a href=\"https:\/\/mavlink.io\/en\/messages\/common.html#MISSION_REQUEST_INT\" target=\"_blank\" aria-label=\"MISSION_REQUEST_INT (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >MISSION_REQUEST_INT<\/a>). Na ka\u017cde takie \u017c\u0105danie GCS odpowiada, przesy\u0142aj\u0105c informacje o danym punkcie (<a href=\"https:\/\/mavlink.io\/en\/messages\/common.html#MISSION_ITEM_INT\" target=\"_blank\" aria-label=\"MISSION_ITEM_INT (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >MISSION_ITEM_INT<\/a>). Punkty s\u0105 numerowane od zera.<\/p>\n\n\n\n<p>Kiedy indeks otrzymanego punktu jest mniejszy o jeden od zadeklarowanej ilo\u015bci punkt\u00f3w w trasie (count-1), pojazd wysy\u0142a potwierdzenie odebrania planu lotu (<a href=\"https:\/\/mavlink.io\/en\/messages\/common.html#MISSION_ACK\" target=\"_blank\" aria-label=\"MISSION_ACK (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >MISSION_ACK<\/a>). Nale\u017cy pami\u0119ta\u0107, \u017ce przyk\u0142ad korzysta z protoko\u0142u UDP, bez gwarancji dostarczenia wiadomo\u015bci. Dane mog\u0105 by\u0107 r\u00f3wnie\u017c wysy\u0142ane kana\u0142em du\u017co bardziej zawodnym ni\u017c domowe po\u0142\u0105czenie Wi-Fi. Je\u015bli GCS nie ode\u015ble wiadomo\u015bci MISSION_ITEM_INT w ci\u0105gu 250 milisekund od nadania wiadomo\u015b\u0107 MISSION_REQUEST_INT, to trzeba nada\u0107 j\u0105 ponownie (maksymalnie 5 razy).<\/p>\n\n\n\n<p>Procedura przesy\u0142ania planu lotu jest szczeg\u00f3\u0142owo opisana na stronie Mission Protocol w paragrafie <a href=\"https:\/\/mavlink.io\/en\/services\/mission.html#uploading_mission\" target=\"_blank\" aria-label=\"Upload a Mission to the Vehicle (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Upload a Mission to the Vehicle<\/a>, z kt\u00f3rego pochodzi poni\u017cszy schemat:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/1-1.png\"><img decoding=\"async\" width=\"379\" height=\"480\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/1-1.png\" alt=\"Schemat Upload a Mission to the Vehicle\" class=\"wp-image-20925\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/1-1.png 379w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/1-1-237x300.png 237w\" sizes=\"(max-width: 379px) 100vw, 379px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 <a href=\"https:\/\/mavlink.io\/en\/services\/mission.html#uploading_mission\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" ><ins>Schemat: Upload a Mission to the Vehicle<\/ins><\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Parametry<\/strong><\/h2>\n\n\n\n<p>Aby m\u00f3c prawid\u0142owo nawi\u0105za\u0107 po\u0142\u0105czenie z pojazdem, musi on jeszcze odpowiedzie\u0107 na \u017c\u0105dania transmisji parametr\u00f3w przychodz\u0105ce ze stacji naziemnej. Tutaj sprawa jest prostsza \u2013 po otrzymaniu wiadomo\u015bci <a href=\"https:\/\/mavlink.io\/en\/messages\/common.html#PARAM_REQUEST_LIST\" target=\"_blank\" aria-label=\"PARAM_REQUEST_LIST (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >PARAM_REQUEST_LIST<\/a> wystarczy przes\u0142a\u0107 co najmniej jeden parametr za pomoc\u0105 wiadomo\u015bci <a href=\"https:\/\/mavlink.io\/en\/messages\/common.html#PARAM_VALUE\" target=\"_blank\" aria-label=\"PARAM_VALUE (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >PARAM_VALUE<\/a>. W przyk\u0142adzie jest to parametr o nazwie COMPASS_USE i warto\u015bci FALSE. Przes\u0142anie takiej wiadomo\u015bci oznacza, \u017ce pojazd nie wykorzystuje magnetometru. Kolejne parametry powinny by\u0107 wysy\u0142ane w r\u00f3wnych odst\u0119pach czasu. <\/p>\n\n\n\n<p>Spos\u00f3b przesy\u0142ania parametr\u00f3w jest szczeg\u00f3\u0142owo opisany na stronie Parameter Protocol w paragrafie <a href=\"https:\/\/mavlink.io\/en\/services\/parameter.html#read_all\" target=\"_blank\" aria-label=\"Read All Parameters (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Read All Parameters<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/2-1.png\"><img decoding=\"async\" width=\"480\" height=\"329\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/2-1.png\" alt=\"Schemat Read All Parameters\" class=\"wp-image-20928\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/2-1.png 480w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/2-1-300x206.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 2 <a href=\"https:\/\/mavlink.io\/en\/services\/parameter.html#read_all\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" ><ins>Schemat: Read All Parameters<\/ins><\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Telemetria<\/strong><\/h2>\n\n\n\n<p>Wiadomo\u015bci typu <a href=\"https:\/\/mavlink.io\/en\/messages\/common.html#SYS_STATUS\" target=\"_blank\" aria-label=\"SYS_STATUS (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >SYS_STATUS<\/a> s\u0142u\u017c\u0105 do przesy\u0142ania wa\u017cnych informacji o stanie pojazdu, takich jak jako\u015b\u0107 po\u0142\u0105czenia czy poziom na\u0142adowania akumulatora. Przyk\u0142adow\u0105 wiadomo\u015b\u0107 mo\u017cna wysy\u0142a\u0107 co sekund\u0119, wstawiaj\u0105c poni\u017cszy fragment kodu w funkcji wysy\u0142aj\u0105cej wiadomo\u015b\u0107 HEARTBEAT.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nuint16_t voltage_battery = 12600; \/\/ millivolts\n\nint16_t current_battery = -1; \/\/ centiamperes\n\nint8_t battery_remaining = 100; \/\/ percent\n\nmavlink_msg_sys_status_pack(THIS_SYSTEM, THIS_COMPONENT, &amp;amp;out_msg, 0, 0, 0, 0, voltage_battery, current_battery, battery_remaining, 100, 0, 0, 0, 0, 0, 0, 0, 0);\n\nlen = mavlink_msg_to_send_buffer(buf, &amp;amp;out_msg);\n\nsendto(sock, buf, len, 0, (struct sockaddr*)&amp;amp;gcAddr, sizeof (struct sockaddr_in));\n<\/pre><\/div>\n\n\n<p>Do przesy\u0142ania aktualnej pozycji pojazdu s\u0142u\u017cy wiadomo\u015b\u0107 GLOBAL_POSITION_INT. D\u0142ugo\u015b\u0107 geograficzna (longitude), szeroko\u015b\u0107 geograficzna (latitude) i wysoko\u015b\u0107 (nad poziomem morza i wzgl\u0119dna) s\u0105 zapisywane jako liczby ca\u0142kowite. Po odebraniu takiej wiadomo\u015bci stacja naziemna wy\u015bwietla ikon\u0119 pojazdu na mapie.<\/p>\n\n\n\n<p>Gdy pojazd przemieszcza si\u0119 \u2013 rysuje przebyt\u0105 tras\u0119, a nawet umo\u017cliwia zapisywanie jej do pliku. Ten kod powinien by\u0107 wywo\u0142ywany za ka\u017cdym razem, gdy odbiornik GPS zarejestruje istotn\u0105 zmian\u0119 pozycji pojazdu.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nint32_t lat = 52.190564 * 1E7; \/\/ Latitude\n\nint32_t lon = 21.015880 * 1E7; \/\/ Longitude\n\nint32_t alt = 112 * 1000; \/\/ above MSL (mm)\n\nint32_t relative_alt = 0; \/\/ above ground (mm)\n\nmavlink_msg_global_position_int_pack(THIS_SYSTEM, THIS_COMPONENT, &amp;amp;out_msg, microsSinceEpoch(), lat, lon, alt, relative_alt, 0, 0, 0, UINT16_MAX);\n\nlen = mavlink_msg_to_send_buffer(buf, &amp;amp;out_msg);\n\nsendto(sock, buf, len, 0, (struct sockaddr*)&amp;amp;gcAddr, sizeof(struct sockaddr_in));\n<\/pre><\/div>\n\n\n<p>Informacje o przechyle i pochyle powinny pochodzi\u0107 z czujnika grawitacji, natomiast kierunek z magnetometru (ewentualnie mo\u017cna je r\u00f3wnie\u017c obliczy\u0107 na podstawie wsp\u00f3\u0142rz\u0119dnych GPS z kilku ostatnich sekund). Do ich przesy\u0142ania s\u0142u\u017cy wiadomo\u015b\u0107 <a href=\"https:\/\/mavlink.io\/en\/messages\/common.html#ATTITUDE\" target=\"_blank\" aria-label=\"ATTITUDE (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >ATTITUDE<\/a>. K\u0105ty musz\u0105 by\u0107 podane w radianach. Aktualny kierunek jest przedstawiany w aplikacji przez obr\u00f3t ikony pojazdu na mapie, natomiast przechy\u0142 i pochy\u0142 s\u0105 prezentowane za pomoc\u0105 sztucznego horyzontu wzorowanego na urz\u0105dzeniach spotykanych w samolotach.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nfloat roll = 0 * (M_PI\/180.0);\n\nfloat pitch = 0 * (M_PI\/180.0);\n\nfloat yaw = 0 * (M_PI\/180.0);\n\nmavlink_msg_attitude_pack(THIS_SYSTEM, THIS_COMPONENT, &amp;amp;out_msg, microsSinceEpoch(), roll, pitch, yaw, 0.0, 0.0, 0.0);\n\nlen = mavlink_msg_to_send_buffer(buf, &amp;amp;out_msg);\n\nsendto(sock, buf, len, 0, (struct sockaddr*)&amp;amp;gcAddr, sizeof(struct sockaddr_in));\n<\/pre><\/div>\n\n\n<p>Wiadomo\u015bci GLOBAL_POSITION_INT i ATTITUDE wymagaj\u0105 u\u017cycia funkcji microsSinceEpoch(), kt\u00f3ra zwraca aktualny czas w mikrosekundach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Przyk\u0142ad na podstawie C, Javy i Androida<\/strong><\/h2>\n\n\n\n<p>Na sam koniec zaprezentuj\u0119 przyk\u0142ad na podstawie Androida. Poni\u017csza aplikacja nie nadaje sta\u0142ej pozycji, lecz korzysta z akcelerometru i odbiornika GPS urz\u0105dzenia, na kt\u00f3rym jest zainstalowana. Nawi\u0105zanie przez sie\u0107 Wi-Fi po\u0142\u0105czenia z telefonem z uruchomion\u0105 aplikacj\u0105 umo\u017cliwia \u015bledzenie jego po\u0142o\u017cenia na mapie.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/mareksuma1985\/mavlink\" target=\"_blank\" aria-label=\"MAVLink UDP Android Example (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >MAVLink UDP Android Example<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Przedstawi\u0142em tylko niekt\u00f3re z mo\u017cliwo\u015bci protoko\u0142u MAVLink i korzystaj\u0105cych z niego stacji naziemnych. Ich tw\u00f3rcy stale rozwijaj\u0105 oprogramowanie, by nad\u0105\u017ca\u0142o za potrzebami rozwijaj\u0105cej si\u0119 bran\u017cy UAV. Mam nadziej\u0119, \u017ce zach\u0119ci\u0142em do zg\u0142\u0119bienia tematu sterowania lekkimi bezza\u0142ogowcami.<\/p>\n\n\n\n<p>Wi\u0119cej o MAVLink i stacjach bazowych dla miniaturowych aparat\u00f3w lataj\u0105cych mo\u017cna si\u0119 dowiedzie\u0107 tutaj:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a aria-label=\" (opens in a new tab)\" class=\"ek-link\" href=\"https:\/\/mavlink.io\/en\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >mavlink.io<\/a> \u2013 dokumentacja protoko\u0142u MAVLink<\/li>\n\n\n\n<li><a aria-label=\" (opens in a new tab)\" class=\"ek-link\" href=\"https:\/\/docs.qgroundcontrol.com\/master\/en\/qgc-user-guide\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >docs.qgroundcontrol.com<\/a> \u2013 dokumentacja aplikacji QGroundControl<\/li>\n\n\n\n<li><a aria-label=\" (opens in a new tab)\" class=\"ek-link\" href=\"https:\/\/ardupilot.org\/planner\/docs\/mission-planner-overview.html\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >ardupilot.org<\/a> \u2013 dokumentacja aplikacji Mission Planner<\/li>\n<\/ul>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Artyku\u0142 zosta\u0142 opublikowany po raz pierwszy 14.04.2023<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;20920&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;8&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;Podstawy protoko\u0142u MAVLink&quot;,&quot;width&quot;:&quot;159&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 159px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            5\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>MAVLink (Micro Air Vehicle Link) to protok\u00f3\u0142 komunikacyjny wykorzystywany do sterowania ma\u0142ymi pojazdami bezza\u0142ogowymi. Charakteryzuje si\u0119 bardzo kr\u00f3tkim nag\u0142\u00f3wkiem. W &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/podstawy-protokolu-mavlink\/\">Continued<\/a><\/p>\n","protected":false},"author":499,"featured_media":33326,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":5,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[1676,1512,155,146],"class_list":["post-20920","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-mavlink","tag-poradnik","tag-linux","tag-testing"],"acf":[],"aioseo_notices":[],"republish_history":[{"old_date_gmt":"2023-04-14 03:00:00","new_date_gmt":"2026-03-16 04:00:00","changed_at_gmt":"2026-03-16 08:48:26"}],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/04\/MAV-Link.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/20920"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/499"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=20920"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/20920\/revisions"}],"predecessor-version":[{"id":33329,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/20920\/revisions\/33329"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/33326"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=20920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=20920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=20920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}