MAVLink

Перейти к: навигация, поиск

Описание[править]

MAVLink (Micro Air Vehicle Link) — протокол обмена информацией между наземной станцией (GCS, Ground control station, а также её компонентами) и любыми малыми беспилотными аппаратами (MAV - Micro Air Vehicle): летающими, ездящими, плавающими, и т.д.

3a6546469555d30cfcdaf4c30929d146.png

MAVLink распространяется под лицензией LGPL в виде модуля для python (есть удобная обёртка DroneKit) и генератора библиотек под различные языки, в том числе header-only С/C++ библиотеки. Есть так же репозитории уже сгенерированных библиотек для MAVLink версии v1 и версии v2.

Формат[править]

Базовый пакет MAVLink, имеет следующий формат:

6e1d1419c9209e3ad47a4d5281eb5b4d.png

  • Первый байт пакета (STX) — это символ начала пакета:
    • 0xFD для версии v2.0
    • 0xFE для версии v1.0
    • 0x55 для версии v0.9
  • LEN — длина информационной части пакета.
  • SEQ — счётчик пакета (0-255), который поможет выявить потерю сообщения.
  • SYS (System ID) — идентификатор отправляющей системы.
  • COMP (Component ID) — идентификатор отправляющего компонента.
  • MSG (Message ID) — тип сообщения, от него зависит, какие данные будут лежать в информационной части пакета.
  • PAYLOAD — информационная часть пакета: сообщение, размером от 0 до 255 байт.
  • Два последних байта пакета — CKA и CKB, нижний и верхний байт, соответственно, содержат контрольную сумму пакета.

Библиотека MAVLink позволяет кодировать и раскодировать пакеты согласно протоколу, но она не регламентирует, какими аппаратными и программными средствами данные будет отправлены — это могут быть TCP/UDP сообщения, обмен через последовательный порт, да что угодно, что обеспечивает двухсторонний обмен. Библиотека обрабатывает входные данные побайтово, добавляя их в буфер и сама собирает из них пакет. Каждая система или компонент, может одновременно обмениваться данными по разным источникам, тогда для каждого источника назначается специальный идентификатор, называемый channel (канал). MAVLink содержит буфер на каждый канал.

Типы сообщений[править]

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

Какие данные считать полётными, какие сообщения отправляются периодически, а какие только по запросу - полностью решает полётный контроллер. MAVLink не декларирует, какими сообщениями необходимо пользоваться: при проектировании полётных систем разработчики сами решают какие сообщения программное обеспечение будет обрабатывать, а какие — отправлять.

Для различных полётных контроллеров предусмотрены диалекты, отличающиеся деталями реализации: составом сообщений или данными, например режимами. В корне header-only С/C++ библиотеки MAVLink есть каталоги, соответствующие этим диалектам: common, ardupilotmega и др. То, какой диалект будет использоваться, можно определить указав путь к нужным заголовочным файлам в CMake.

include_directories("3dparty/mavlink_v1/ardupilotmega")

Некоторые общие сообщения, которые должны быть реализованы в большинстве полётных контроллеров и наземных станциях управления (GCS) вне зависимости от диалекта:

  • HEARTBEAT - это самый базовый пакет, в котором система говорит, что она существует, и что оно такое. Это единственный тип пакета, который MAVLink обязывает к использованию.
  • Сообщение типа ATTITUDE описывает поворотное положение MAV(беспилотника) относительно его центра в пространстве — углы тангажа, крена и рыскания.
  • В пакетах типа VFR_HUD сгруппированы параметры, которые обычно выводятся на экран в качестве телеметрийных данных OSD. К этим параметрам MAVLink относит: воздушная скорость, путевая скорость, высота над уровнем моря, скороподъёмность, направление и газ (throttle).
  • В сообщениях типа LOCAL_POSITION и GLOBAL_POSITION передаются данные о положении аппарата в пространстве, которое определено с помощью локальной или глобальной системы позиционирования соответственно. Пакеты подразумевают уже обработанные, фильтрованные данные. Для сырых показаний GPS сенсора необходимо обрабатывать пакеты GPS_RAW и GPS_STATUS.
  • Полётный контроллер отсылает пакеты с определённой частотой, которую он определяет сам, на основе настроек, скорости передачи данных или типа канала связи. Тем не менее для задания частоты отправки каких-либо данных предусмотрен запрос, путём отправки сообщения MESSAGE_INTERVAL с указанием идентификатора нужного сообщения и интервалом в микросекундах.

Ссылки[править]

См. также[править]