Научная статья на тему 'ГЕНЕРАЦИЯ ПРОТОКОЛА ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ С ДРОНАМИ, НА БАЗЕ БИБЛИОТЕКИ MAVLINK'

ГЕНЕРАЦИЯ ПРОТОКОЛА ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ С ДРОНАМИ, НА БАЗЕ БИБЛИОТЕКИ MAVLINK Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
0
0
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
беспилотник / протокол взаимодействия / программирование / MAVLink / drone / interaction protocol

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Бизюк А.В.

В данной работе рассматривается процесс создания диалекта протокола MAVLink, а именно создание собственных списков перечислений и уникальных команд со своими параметрами. Результатом будет готовая С++ библиотеки, которую можно использовать совместно со стандартным протоколом.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

GENERATION OF PROTOCOL FOR INFORMATION INTERACTION WITH DRONES BASED ON MAVLINK LIBRARY

This work discusses the process of creating a dialect of the MAVLink protocol, exactly the creation of your own enumeration lists and unique commands with your own parameters. The result will be a ready-made C++ library that can be used in conjunction with the standard protocol.

Текст научной работы на тему «ГЕНЕРАЦИЯ ПРОТОКОЛА ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ С ДРОНАМИ, НА БАЗЕ БИБЛИОТЕКИ MAVLINK»

УДК 623.746-519

Бизюк А.В.

студент-магистрант кафедры СМАРТ-технологии Московский политехнический университет (г. Москва, Россия)

ГЕНЕРАЦИЯ ПРОТОКОЛА ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ С ДРОНАМИ, НА БАЗЕ БИБЛИОТЕКИ MAVLINK

Аннотация: в данной работе рассматривается процесс создания диалекта протокола MAVLink, а именно создание собственных списков перечислений и уникальных команд со своими параметрами. Результатом будет готовая С++ библиотеки, которую можно использовать совместно со стандартным протоколом.

Ключевые слова: беспилотник, протокол взаимодействия, программирование.

В последнее время роль беспилотников в нашей жизни значительно выросла. Они получили широкое распространение в таких сферах, как сельское хозяйство, мониторинг, фотосъёмка, и многое другое. Такая популярность обусловлена высокой манёвренностью и относительной простотой использования, несмотря на их сложное внутреннее устройство. Также, дроны имеют большой потенциал в автоматизации различных процессов. Уже сейчас их применяют в роботизированных комплексах, где каждый элемент взаимодействует с другими. Это позволяет создавать более комплексные системы, которые способны выполнять сложные задачи. Однако возникает проблема коммуникации всех этих элементов между собой, для решения которой используют различные протоколы взаимодействия.

MAVLink (Micro Air Vehicle Link) - это протокол информационного взаимодействия с дронами. Протокол описывает информационное взаимодействие между системами, такими как MAV и GCS (Ground control

station) — станция наземного управления, а также их составными частями — компонентами [1]. Базовой сущностью MAVLink является пакет, имеющий следующий формат, изображённый на рисунке 1:

MAVLink Frame - 8-263 bytes

STX LEN SEQ SYS COMP MSG PAYLOAD СКА СКВ

Рисунок 1. Структура пакета MAVLink.

STX — это символ начала сообщения,

LEN — длинна полезной нагрузки,

SEQ — содержит счётчик пакета,

SYS — идентификатор, отправляющий системы,

COMP — идентификатор отправляющего компонента,

MSG — тип сообщения,

PAYLOAD — полезная нагрузка пакета,

CKA и CKB, нижний и верхний байт, соответственно, содержат контрольную сумму пакета.

Для использования протокола MAVLink в C++ проектах, используют сгенерированные библиотеки, например «common.h», позволяющая зашифровать и расшифровать стандартные сообщения. Зачастую, встроенного функционала бывает недостаточно, и требуются специфичные сообщения, которых нет в стандартной реализации. Для таких случаев, существует генератор диалекта, позволяющий создать новый протокол или дополнить старый.

Для начала необходимо составить протокол в XML формате [2], где будут представлены все новые перечисления (enums) и сообщения (messages), а также краткая информация о диалекте. Пример такого файла представлен на

рисунке 2. Тег «include» необходим для объединения с другими XML-файлами. Тег «dialect» необходим для ведения версий диалекта.

В отличии от «include» и «dialect», «enums» и «messages» имеют более сложную структуру и всегда имеют своё собственное имя. Перечисления состоят из названия и непосредственно самих элементов, которые в свою очередь имеют название, значение, а также хранят внутри описание.

▼ <mavlink>

<include>corrtnnon. xml</include> <dialect>22<:/dialett> т <enums>

▼ cerium rtarne = "STATE">

<description>Cocro«Hne flpoHa</description>

▼ centry value="0" na(re="STATE_AVOIDANCE">

<description>flpoH пытается избежать npenHTCTBH«</descriptioti> </entry>

▼ <entry value="l" n a tne="STATE_FOL LOWING">

<description>flpoH следует к T04i<e</descriptic>n> </entry>

*<entry value="2" name="STATE_WAIT">

<description>flpoH ожидает K0Maiw/deseripti0n> </entry> </enurri>

► <enuni narne="CONFIRM_STATUS">

</enum> </enums> ▼<messages>

▼ <message id="21213" naine="MSU„DROfJE_STATUS">

<description>Packet drone status</description> <field type="int8_t" naine="local_id">^OKaJnbHbiii id flpoHa</field> <field type="uiritS_t" naine=" status" enum="STATE">drone status</Field> <field type="uint64_t" name="ti[ne_ute" units = "us">Время отправки еообщениж/Ч:1еМ> </message> </messages> </ma\/link>

Рисунок 2. Пример протокола в XML формате.

Сообщения в своей структуре имеют несколько полей. Каждое поле имеет тип и названием. Также, опционально, можно указать перечисление, которое может быть установлено в этом поле, единицы измерения, которые здесь используются и краткое описание, которое упрощает понимание библиотеки. Они использоваться как ячейки, для передачи данных через протокол. Также, сообщениям необходимо указать название и индивидуальный id, с помощью которого парсер может определить, что именно это за сообщение и как его расшифровывать. При создании диалекта нужно учитывать, что id могут пересекаться с другими используемыми диалектами. Во избежание этого,

необходимо пользоваться таблицей 1 и выбирать те номера, которые свободны

[3].

Таблица 1. Зарезервированные значения id.

Dialect Range

Common.xml 300 - 10000

uAvionix.xml 10001-10999

ArduPilotMega.xml 11000 - 11999

icarous.xml 42000 - 42999

После создания XML-файла необходимо с его помощью сделать библиотеку, которую уже можно будет подключить в проект. Для этого есть два варианта: консольная утилита «mavgen» и GUI приложение «mavgenerate». Они имеют одинаковую функциональность, поэтому можно выбрать любой способ.

Для того, чтобы эти инструменты были доступны, необходимо скачать MAVLink Toolchain [4], и перенести готовый XML файл в папку «message_definitions/v1.0/».

Для запуска GUI приложения, запустите mavgenerate.py, после чего откроется окно, изображённое на рисунке 3.

( MAVLink Generator — □ X

XML Out Language Protocol Browse

Browse

Python

1.0

Validate 17

Validate Units Г

Generate

Рисунок 3. Интерфейс «mavgenerate».

В поле XML нужно указать путь до созданного XML-файла, в поле Out -путь, куда разместить созданную библиотеку. Если диалект зависит от других библиотек, необходимо убедиться, что их XML-фалы, также находятся в этой директории Language отвечает за язык программирования, на котором будет сгенерирована наше библиотека. Protocol - версия протокола, на базе которой будет наш диалект, как правило, это 2.0v. Опционально можно отметить функции «Validate» и/или «Validate Units», которые отвечают за проверку целостности XML-файла и проверку единиц измерения соответственно. После проверки всех полей можно нажать кнопку «Generate», после чего, если все предыдущие шаги были выполнены правильно, то появится сообщение об успешной генерации библиотек, которые можно будет найти по указанному ранее пути.

Если использовать консольную утилиту, то параметры необходимо указывать при её запуске. Пример удачной генерации представлен на рисунке 4.

bizyuk"J83327-PC MINGWS4 -/Desktop/Polytech/project/mavlink (master)

S python3 -m pymavlink.tools.mavgen ~lang=c++ll --wire-protocol=2.0 —output^out message_definitions/vl.O/your_custom_dialect.xml validati ng message_definiti ons/vl.0/your_custom_dialect.xrnl Parsi ng message_defi ni tions/vl.0/your_custom_dialect.xrnl

vali dati ng c:\users\8i zyuk\Desktop\Polytech\project\mavli nk\message_defi nitions\vi,0\common.xml Parsi ng c:\users\Bi zyuk\Desktop\Polytech\project\mavli nk\message_defi ni ti ons\vl.0\common.xml validati ng c:\users\Bi zyuk\Desktop\Polytech\project\mavlink\message_definiti ons\vl.0\standard,xml Parsi ng c:\users\8i zyuk\Desktop\Polytech\project\mavli nk\message_defini ti ons\vl.0\standard.xml vali dati ng c:\users\8izyuk\oesktop\polytech\project\mavli nk\message_defi niti ons\vl.0\minimal.xml Parsi ng c:\users\8i zyuk\oesktop\Polytech\project\mavli nk\message_definitions\vl.O\minintal.xml Found 224 MAVLink message types in 4 xml files Generating C headers

Generating c implementation in directory out\your_custom_dialect Generating c implementation in directory out\common Generating c implementation in directory out\standard Generating C implementation in directory out\minimal Copying fixed headers for protocol 2.0 to out

Generating C++ implementation in directory out\your_custom_dialect Generating C++ implementation in directory out\common Generating C++ implementation in directory out\standard Generating C++ implementation in directory out\minimal copying fixed C++ headers for protocol 2.0 to out

Рисунок 4. Генерация библиотеки с помощью консольной утилиты «mavgen».

Более подробнее про функционал утилиты можно узнать, открыв справку с помощью команды «mavgen.py -h».

Используя любой из предложенных способов, можно генерировать библиотеку, расширяя функционал, специфичный для определённых систем, но при этом, сохраняя совместимость с базовым протоколом, что позволяет использовать её как для специфичных задач, так и для использования в таких программах, как Ground control station.

СПИСОК ЛИТЕРАТУРЫ:

1. Разбираемся в MAVLink. Часть 1 [Электронный ресурс]. URL: https://habr.com/ru/articles/312300/ (дата обращения: 15.05.24);

2. MAVLink XML File Schema / Format [Электронный ресурс]. URL: https://mavlink.io/en/guide/xml_schema.html (дата обращения: 20.05.24);

3. How to Define MAVLink Messages & Enums [Электронный ресурс]. URL: https://mavlink.io/en/guide/define_xml_element.html (дата обращения: 13.05.24);

4. Исходные файлы MAVLink [Электронный ресурс]. URL: https://github.com/mavlink/mavlink (дата обращения: 3.06.24)

Bizyuk A.V.

Moscow Polytechnic University (Moscow, Russia)

GENERATION OF PROTOCOL FOR INFORMATION INTERACTION WITH DRONES BASED ON MAVLINK LIBRARY

Abstract: this work discusses the process of creating a dialect of the MAVLink protocol, exactly the creation of your own enumeration lists and unique commands with your own parameters. The result will be a ready-made C++ library that can be used in conjunction with the standard protocol.

Keywords: MAVLink, drone, interaction protocol.

i Надоели баннеры? Вы всегда можете отключить рекламу.