C++
2018-08-15
Protokół Mavlink umożliwia nam także wysyłanie komend do urządzeń. Dzięki temu możemy m.in. sterować obrotami silników drona.
Sprawdź także moje poprzednie wpisy w tej serii:
Arduino z Mavlink - Start
Arduino z Mavlink - Odczyt danych
Wysyłanie komend i w tym przypadku opiera się na cyklicznym zapisywaniu do bufora danych pakietów z informacjami. W moim kodzie chciałem stworzyć implementację dla kontroli danych drona takich jak: tryb lotu, zazbrojenie oraz kanały RC.
Na początku musimy zadeklarować zmienne globalne, które przechowują aktualny stan drona.
W większości poradników na internecie kod dla odbierania i wysyłania danych jest wymieszany ze sobą. Ja postanowiłem nieco uelastycznić kod i każdą akcję przeniosłem do funkcji z parametrami.
Teraz przejdę do opisania każdej z nich.
Jest to najprostsza funkcja i jej wywołanie zawiera jedynie parametry systemowe. Mavlink na wysłanie pakietu heartbeat odpowie nam tym samym.
To jaką funkcje wywołać i z jakimi argumentami można znaleźć w pliku mavlink_msg_heartbeat.h w folderze mavlink/common/. Analogicznie postępujemy dla innych komend.
Zmiana trybu lotu opiera się na wywołaniu funkcji mavlink_msg_set_mode_pack. Ta funkcja dla APM 2.6 zadziałała, gdy parametr target_system wynosi 1. Dany tryb lotu definiujemy parametrem custom_mode na ostatnim miejscu.
Użycie tej akcji sprawiło mi nielada problem, gdyż w mavlinku do zazbrajania i rozbrajania wykorzystujemy tak zwaną długą komendę (command_long) MAV_CMD_COMPONENT_ARM_DISARM (400). Nie było dla mnie do końca jasne na początku jak ją wywołać.
Potrzebna do tego jest funkcja mavlink_msg_command_long_pack, gdzie jako 6 parametr definujemy użycie właśnie długiej komendy. Używane one są jako polecenia podczas planowania misji choćby w Mission Planner. Następne 8 parametrów to właśnie parametry długiej komendy.
Kanały RC (Radio control) odpowiadają za sygnały z aparatury - ten joystick do sterowania urządzeniem.
Dzięki nim możemy wprowadzić nasze własne wartości np. dla drążków throttle lub yaw. Generalnie możliwe jest nadpisanie wszystkich elementów aparatury, ale jesteśmy ograniczeni do 8 kanałów.
W przypadku APM 2.6 kanały musiałem sprawdzić w Mission Planner. Można to zrobić za pomocą choćby jakiegokolwiek pada w trybie emulacji aparatury w programie.
Jest to już ostatni artykuł z krótkiej serii o podstawach w Mavlink'u. Nie wykluczone, że kiedyś w przyszłości pojawią się jeszcze podobne wpisy, ale na razie potrzebuję oddechu :).
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.