10. Форматы и обмен сообщениями (MAVLink)

10.1. Назначение раздела

В этом разделе описаны сообщения MAVLink, используемые в системе UWB‑посадки: структура обмена, направления передачи и назначение сообщений. XML‑описания кастомных сообщений приведены в Приложении A.


10.2. Диаграмма обмена сообщениями

Ниже представлена схема взаимодействия компонентов системы (ридеры, LE, автопилот).

Рисунок 10‑1 — Диаграмма обмена сообщениями системы.


10.3. Сообщения и направления обмена


Message NameDirectionDescription (RU)Frequency
UWB_READER_CONFIGReader → LEКонфигурация ридера: идентификатор/серийный номер, координаты FRD и прочие рабочие настройки ридера.При запуске и при изменении
UWB_SITE_STATUSReader → LEСостояние активного сайта: идентификатор и геодезические координаты площадки, координаты точки посадки в NED, текущий статус (inactive/active/error).По событию (после уверенного приёма на площадке)
UWB_RANGEReader → LEМассив измерений расстояний до реперов с идентификаторами, RSSI и метками времени; используется для расчёта координат в LE.8 Гц (на ридер)
HEARTBEATReader → LEКонтроль доступности ридера для LE.1 Гц
TIMESYNCReader ↔ LEСогласование временных меток между ридером и LE для корректной временной привязки измерений.2 Гц (каждые 500 мс)
TIMESYNCLE ↔ FCUСинхронизация времени между LE и автопилотом для согласования временных меток.2 Гц (каждые 500 мс)
HEARTBEATLE → FCUКонтроль доступности LE для FCU.1 Гц
ATTITUDE_QUATERNION_COVFCU → LEОриентация дрона (кватернион + ковариации); используется для преобразования NED → FRD.Настройка LE (обычно 10–50 Гц)
HIGHRES_IMUFCU → LEЛинейные ускорения, угловые скорости, магнитометр; для согласования движения с UWB‑позиционированием.Настройка LE (обычно 10–100 Гц)
LANDING_TARGETLE → FCUПоложение посадочной цели в СК FRD; используется автопилотом в режиме Precision Landing.Настройка LE обычно 20 Гц

10.4. Особенности формирования и обработки сообщений


10.5. Пример рабочего потока

  1. Инициализация: ридеры присылают UWB_READER_CONFIG; LE устанавливает TIMESYNC и начинает получать HEARTBEAT от ридеров.
  2. Активация сайта: при устойчивом приёме ридеры отправляют UWB_SITE_STATUS.
  3. Позиционирование: ридеры передают потоки UWB_RANGE с периодом 20 Гц; LE вычисляет координаты и принимает ориентацию от FCU.
  4. Передача в автопилот: LE публикует LANDING_TARGET с периодом 20 Гц; TIMESYNC LE↔FCU поддерживает согласование меток.

Приложение A. XML‑описания пользовательских сообщений

Ниже приведены XML‑определения сообщений, используемых между ридерами и LE.
Указаны только сообщения, задействованные в текущей архитектуре.

A.1. UWB_READER_CONFIG

<!-- [1] Reader (TG8 TOF Anchor) configuration -->
    <message id="42010" name="UWB_READER_CONFIG">
      <description>Configuration of the UWB reader mounted on the drone (position in body frame).</description>
      <field type="uint64_t" name="time_usec">Current system time [us]</field><!-- 0 if unknown -->
      <field type="uint32_t" name="reader_id">Reader serial number</field>
      <field type="float"    name="bx">Reader X in drone/body frame [m]</field>
      <field type="float"    name="by">Reader Y in drone/body frame [m]</field>
      <field type="float"    name="bz">Reader Z in drone/body frame [m]</field>
      <field type="uint16_t" name="seq">Sequence counter (increments on change)</field>
    </message>

A.2. UWB_SITE_STATUS

<message id="42011" name="UWB_SITE_STATUS">
  <description>Status of the active UWB landing/positioning site.</description>
  <field type="uint64_t" name="time_usec">Current system time [us]</field>
  <field type="uint64_t" name="first_seen_usec">Time when site first detected [us]</field>
  <field type="uint64_t" name="last_update_usec">Time of last site update [us]</field>
  <field type="uint32_t" name="site_id">Numeric site identifier</field>
  <field type="int32_t"  name="siteLon_e7">WGS84 longitude [degE-7]</field>
  <field type="int32_t"  name="siteLat_e7">WGS84 latitude [degE-7]</field>
  <field type="int32_t"  name="siteAlt_mm">Altitude MSL [mm]</field>
  <field type="float"    name="landX_m">Landing point X in site NED [m]</field>
  <field type="float"    name="landY_m">Landing point Y in site NED [m]</field>
  <field type="float"    name="landZ_m">Landing point Z in site NED [m]</field>
  <field type="uint8_t"  name="state" enum="UWB_SITE_STATE">0: inactive, 1: active, 2: error</field>
</message>

A.3. UWB_RANGE

<!-- [3] Single range measurement -->
    <message id="42012" name="UWB_RANGE">
      <description>Single UWB range measurement with optional site coordinates.</description>
      <field type="uint64_t" name="time_usec">LE-synchronized measurement time [us]</field><!-- 0 if unknown -->
      <field type="uint32_t" name="reader_id">Reader serial number</field>
      <field type="uint32_t" name="site_id">Site identifier</field>
      <field type="uint32_t" name="reper_id">Reper serial number</field>
      <field type="float"    name="reperX_m">Reper X in site NED [m]</field>
      <field type="float"    name="reperY_m">Reper Y in site NED [m]</field>
      <field type="float"    name="reperZ_m">Reper Z in site NED [m]</field>
      <field type="uint8_t"  name="tof_seq">TOF cycle sequence number</field>
      <field type="float"    name="range_m">Measured range [m]</field>
      <field type="int16_t"  name="rssi_dbm10">RSSI [dBm/10]</field>
      <field type="uint8_t"  name="range_class" enum="UWB_RANGE_CLASS">EMPTY:0, NLOS:1, UNDEF:2, LOS:3</field>
    </message>

Конец раздела 10.