МАВЛинк
MAVLink или Micro Air Vehicle Link — протокол для связи с небольшими беспилотными летательными аппаратами . Он спроектирован как библиотека маршалинга сообщений только для заголовков. MAVLink был впервые выпущен в начале 2009 года. [ 1 ] Лоренц Мейер по лицензии LGPL . [ 2 ]
Приложения
[ редактировать ]Он используется в основном для связи между наземной станцией управления (GCS) и беспилотными транспортными средствами , а также для взаимной связи подсистем транспортного средства. Его можно использовать для передачи ориентации автомобиля, его местоположения по GPS и скорости.
Структура пакета
[ редактировать ]В версии 1.0 структура пакета следующая:
Имя поля | Индекс (байты) | Цель |
---|---|---|
Начало кадра | 0 | Обозначает начало передачи кадра (v1.0: 0xFE) |
Длина полезной нагрузки | 1 | длина полезной нагрузки (n) |
Последовательность пакетов | 2 | Каждый компонент подсчитывает свою последовательность отправки. Позволяет обнаружить потерю пакетов. |
Идентификатор системы | 3 | Идентификация системы ОТПРАВКИ. Позволяет различать разные системы в одной сети. |
Идентификатор компонента | 4 | Идентификация компонента SENDING. Позволяет различать различные компоненты одной и той же системы, например, IMU и автопилот. |
Идентификатор сообщения | 5 | Идентификация сообщения — идентификатор определяет, что «означает» полезная нагрузка и как ее следует правильно декодировать. |
Полезная нагрузка | от 6 до (n+6) | Данные в сообщении зависят от идентификатора сообщения. |
КПР | (n+7) до (n+8) | Контрольная сумма всего пакета, исключая знак начала пакета (от младшего к старшему биту). |
После версии 2 структура пакета была расширена до следующего: [ 3 ]
Имя поля | Индекс (байты) | Цель |
---|---|---|
Начало кадра | 0 | Обозначает начало передачи кадра (v2: 0xFD) |
Длина полезной нагрузки | 1 | длина полезной нагрузки (n) |
флаги несовместимости | 2 | Флаги, которые необходимо понимать для совместимости с MAVLink |
флаги совместимости | 3 | Флаги, которые можно игнорировать, если они не понятны |
Последовательность пакетов | 4 | Каждый компонент подсчитывает свою последовательность отправки. Позволяет обнаружить потерю пакетов. |
Идентификатор системы | 5 | Идентификация системы ОТПРАВКИ. Позволяет различать разные системы в одной сети. |
Идентификатор компонента | 6 | Идентификация компонента SENDING. Позволяет различать различные компоненты одной и той же системы, например, IMU и автопилот. |
Идентификатор сообщения | с 7 до 9 | Идентификация сообщения — идентификатор определяет, что «означает» полезная нагрузка и как ее следует правильно декодировать. |
Полезная нагрузка | от 10 до (n+10) | Данные в сообщении зависят от идентификатора сообщения. |
КПР | (n+11) до (n+12) | Контрольная сумма всего пакета, исключая знак начала пакета (от младшего к старшему биту). |
Подпись | (n+13) до (n+25) | Подпись для проверки того, что сообщения происходят из надежного источника. (необязательный) |
Поле CRC
[ редактировать ]Чтобы гарантировать целостность сообщения, для каждого сообщения в последних двух байтах вычисляется контрольная сумма циклического избыточного кода (CRC). Другая функция поля CRC — гарантировать, что отправитель и получатель согласны с передаваемым сообщением. Он вычисляется с использованием хэша ITU X.25/SAE AS-4 байтов в пакете, исключая индикатор начала кадра (поэтому оцениваются 6+n+1 байт, дополнительный +1 является начальным значением). .
Кроме того, при вычислении CRC в конец данных добавляется начальное значение. Начальное значение генерируется с каждым новым набором сообщений протокола и хэшируется аналогично пакетам из каждой спецификации сообщения. Системы, использующие протокол MAVLink, могут использовать для этой цели предварительно вычисленный массив. [ 4 ]
Алгоритм CRC MAVLink реализован на многих языках, например Python. [ 5 ] и Ява. [ 6 ] [ 7 ] [ 8 ]
Сообщения
[ редактировать ]Полезной нагрузкой описанных выше пакетов являются сообщения MAVLink. Каждое сообщение идентифицируется по полю идентификатора в пакете, а полезные данные содержат данные из сообщения. документ XML- в исходном коде MAVlink. [ 9 ] имеет определение данных, хранящихся в этой полезной нагрузке.
Ниже приведено сообщение с идентификатором 24, извлеченное из XML-документа.
<message id="24" name="GPS_RAW_INT">
<description>The global position, as returned by the Global Positioning System (GPS). This is NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame).</description>
<field type="uint64_t" name="time_usec">Timestamp (microseconds since UNIX epoch or microseconds since system boot)</field>
<field type="uint8_t" name="fix_type">0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.</field>
<field type="int32_t" name="lat">Latitude (WGS84), in degrees * 1E7</field>
<field type="int32_t" name="lon">Longitude (WGS84), in degrees * 1E7</field>
<field type="int32_t" name="alt">Altitude (WGS84), in meters * 1000 (positive for up)</field>
<field type="uint16_t" name="eph">GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX</field>
<field type="uint16_t" name="epv">GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX</field>
<field type="uint16_t" name="vel">GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX</field>
<field type="uint16_t" name="cog">Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX</field>
<field type="uint8_t" name="satellites_visible">Number of satellites visible. If unknown, set to 255</field>
</message>
Примечание. XML-документ описывает логический порядок полей протокола. В фактическом формате проводов (и типичном представлении в памяти) порядок полей изменен. [ 10 ] для уменьшения проблем с выравниванием структуры данных . Это может стать источником путаницы при чтении кода, созданного на основе определений сообщений.
Экосистема MAVLink
[ редактировать ]MAVLink используется в качестве протокола связи во многих проектах, что может означать некоторую совместимость между ними. Написано руководство, объясняющее основы MAVLink. [ 11 ]
Ссылки
[ редактировать ]- ^ «Первоначальная фиксация · mavlink/mavlink@a087528» . Гитхаб .
- ^ «Протокол связи MAVLink Micro Air Vehicle — QGroundControl GCS» . Архивировано из оригинала 18 августа 2018 г. Проверено 31 июля 2013 г.
- ^ «Сериализация · Руководство разработчика MAVLink» . mavlink.io . Проверено 22 августа 2019 г.
- ^ «Переупорядочение полей и дополнительный расчет CRC — QGroundControl GCS» . qgroundcontrol.org . Архивировано из оригинала 15 июня 2013 г.
- ^ «GitHub — ArduPilot/pymavlink: интерфейс и утилиты Python MAVLink» . 18 августа 2019 г. – через GitHub.
- ^ «GitHub — arthurbenemann/droidplanner: наземная станция управления для устройств Android» . 2 июля 2019 г. – через GitHub.
- ^ «Генератор кода Java и библиотека Java для MAVLink: ghelle/MAVLinkJava» . 4 августа 2019 г. – через GitHub.
- ^ «GitHub —dronefleet/mavlink: Java API для связи MAVLink» . 2 августа 2019 г. – через GitHub.
- ^ «GitHub — mavlink/mavlink: Библиотека сортировки/связи для дронов» . 20 августа 2019 г. — через GitHub.
- ^ «Переупорядочение полей и дополнительный расчет CRC — QGroundControl GCS» . qgroundcontrol.org . Архивировано из оригинала 15 июня 2013 г.
- ^ Баласубраманиан, Шьям (15 ноября 2013 г.). «Учебное пособие по MAVLink для абсолютных чайников (Часть –I)» . diydrones.com .