Arduino z Mavlink - Odczyt danych

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

Większość opisywanego tutaj kodu pochodzi z tego postu. Autorowi z całego serca dziękuję :).

Szczypta teorii

W poprzednim wpisie tutaj 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.

W tablicy MAVRates definujemy 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.

shop
Otwórz Sklep Play

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