C++
2018-08-09
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
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.
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.
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.
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 definiujemy częstotliwości dla strumieni. Nie do końca jest dla mnie jasne w jaki sposób się to określa.
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 😊
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ć.
Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.