Arduino z Mavlink - Odczyt danych

Kliknij i wspomóż mnie :)

C++

Korzystając z protokołu Mavlink możemy odczytać oraz zinterpretować różne informacje z urządzenia. W tym tekście opiszę jak to wykonać.

Większość opisywanego tutaj kodu pochodzi z tego postu:

MAVLink and Arduino: step by step

Autorowi z całego serca dziękuję :).

Jeżeli nie czytałeś jeszcze poprzedniej części to koniecznie sprawdź mój post wprowadzający do protokołu Mavlink:

Arduino z Mavlink - Start

Szczypta teorii

W poprzednim wpisie poruszyłem podstawowe zagadnienia związane z protokołem Mavlink. Po części przedstawiłem też sam odczyt danych.

Sam protokół emituje jedynie jedną informację. Tą informacją jest pakiet Heartbeat.

Aby otrzymać każde inne dane musimy wcześniej o nie poprosić. Jak to zrobić?

Pierwszą rzeczą jaką warto zrobić jest zadeklarowanie jakiegoś interwału czasowego. Dzięki temu Mavlink co jakiś czas wyśle nam nową porcję informacji. Na początku zmienne.

Interwał

Taka deklaracja zmiennych w kodzie poczeka z odbieraniem strumieni danych minutę oraz interwał będzie wywoływany co sekundę. W późniejszym wywołaniu kod wygląda mniej więcej tak:

W kodzie powyżej bardzo ważne są 2 linijki. W lini 9 na obiekcie SerialMAV (stworzone przeze mnie połączenie szeregowe) wywołujemy metodę write(). Dzięki temu do bufora zapiszemy żądanie danych.

Z kolei w lini 15 zostaje wywołana funkcja dla strumieni danych. Ją opiszę nieco później.

Żądanie danych

Aby mavlink wysłał nam informacje musimy wcześniej do bufora wpisać jakiego pakietu żądamy oraz określić dla niego parametry. Takie 2 funkcje wywołujemy przed kodem powyżej.

Strumienie danych

To jakie pakiety bedą spływać do urządzenia odbierającego możemy zdefiniować poprzez strumienie Mavlink'a.

W tablicy MAVStreams musimy wybrać zakres pakietów. Te stałe można znaleźć w pliku common. Poniżej kilka z ważniejszych.

  • MAV_DATA_STREAM_ALL - Wszystkie pakiety
  • MAV_DATA_STREAM_RAW_SENSORS - Surowe dane dla: GPS, IMU
  • MAV_DATA_STREAM_EXTENDED_STATUS - Status GPS, Status kontroli, Status AUX
  • MAV_DATA_STREAM_RC_CHANNELS - Kanały RC (Radio control) i ich wariacje jak RAW czy SCALED
  • MAV_DATA_STREAM_RAW_CONTROLLER - Parametry wysokości, dane wyjściowe kontrolera
  • MAV_DATA_STREAM_POSITION - Pozycje lokalne / globalne

W tablicy MAVRates definiujemy częstotliwości dla strumieni. Nie do końca jest dla mnie jasne w jaki sposób się to określa.

Interpretacja danych

Kiedy informacje trafiają już do bufora, końcu możemy stworzyć switch ze stałymi Mavlink'a do wyciągania danych z urządzenia. W kodzie poniżej jest implementacja dla drona z płytką APM 2.6.

Jest to jedynie część informacji jakie możemy uzyskać poprzez protokół Mavlink. Na koniec dodam, że cały kod należy umieszczać w funkcji loop() w Arduino. Wszystkie pozostałe stałe potrzebne do implementacji można znaleźć oczywiście w pliku common.

Jeżeli dotrwałeś lub dotrwałaś do końca to gratuluję :). W ostatnim już z tej serii tekście skupię się na crème de la crème, czyli wysyłanie komend do urządzenia.

Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊

O mnie

Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.

Zobacz więcej

Najnowsze posty

Kliknij i wspomóż mnie :)

Zostańmy w kontakcie

* Wymagane
Kliknij i wspomóż mnie :)
shop
Otwórz Sklep Play

Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.