10. Форматы и обмен сообщениями (MAVLink)
10.1. Назначение раздела
В этом разделе описаны сообщения MAVLink, используемые в системе UWB‑посадки: структура обмена, направления передачи и назначение сообщений. XML‑описания кастомных сообщений приведены в Приложении A.
10.2. Диаграмма обмена сообщениями
Ниже представлена схема взаимодействия компонентов системы (ридеры, LE, автопилот).
Рисунок 10‑1 — Диаграмма обмена сообщениями системы.
10.3. Сообщения и направления обмена
| Message Name | Direction | Description (RU) | Frequency |
|---|---|---|---|
| UWB_READER_CONFIG | Reader → LE | Конфигурация ридера: идентификатор/серийный номер, координаты FRD и прочие рабочие настройки ридера. | При запуске и при изменении |
| UWB_SITE_STATUS | Reader → LE | Состояние активного сайта: идентификатор и геодезические координаты площадки, координаты точки посадки в NED, текущий статус (inactive/active/error). | По событию (после уверенного приёма на площадке) |
| UWB_RANGE | Reader → LE | Массив измерений расстояний до реперов с идентификаторами, RSSI и метками времени; используется для расчёта координат в LE. | 8 Гц (на ридер) |
| HEARTBEAT | Reader → LE | Контроль доступности ридера для LE. | 1 Гц |
| TIMESYNC | Reader ↔ LE | Согласование временных меток между ридером и LE для корректной временной привязки измерений. | 2 Гц (каждые 500 мс) |
| TIMESYNC | LE ↔ FCU | Синхронизация времени между LE и автопилотом для согласования временных меток. | 2 Гц (каждые 500 мс) |
| HEARTBEAT | LE → FCU | Контроль доступности LE для FCU. | 1 Гц |
| ATTITUDE_QUATERNION_COV | FCU → LE | Ориентация дрона (кватернион + ковариации); используется для преобразования NED → FRD. | Настройка LE (обычно 10–50 Гц) |
| HIGHRES_IMU | FCU → LE | Линейные ускорения, угловые скорости, магнитометр; для согласования движения с UWB‑позиционированием. | Настройка LE (обычно 10–100 Гц) |
| LANDING_TARGET | LE → FCU | Положение посадочной цели в СК FRD; используется автопилотом в режиме Precision Landing. | Настройка LE обычно 20 Гц |
10.4. Особенности формирования и обработки сообщений
- Reader → LE. Ридеры передают
UWB_READER_CONFIGпри запуске/смене настроек, затем циклически отправляютHEARTBEAT, а также телеметрию дистанцийUWB_RANGE. При уверенном приёме на конкретной площадке ридер отправляетUWB_SITE_STATUS. - LE → FCU. LE объединяет измерения от всех ридеров, вычисляет позицию в системе NED, преобразует её в FRD с учётом ориентации от FCU и публикует
LANDING_TARGETс частотой 20 Гц. - Синхронизация времени. Обмен
TIMESYNCвыполняется между LE и ридерами, а также между LE и FCU (интервал 500 мс).
10.5. Пример рабочего потока
- Инициализация: ридеры присылают
UWB_READER_CONFIG; LE устанавливаетTIMESYNCи начинает получатьHEARTBEATот ридеров. - Активация сайта: при устойчивом приёме ридеры отправляют
UWB_SITE_STATUS. - Позиционирование: ридеры передают потоки
UWB_RANGEс периодом 20 Гц; LE вычисляет координаты и принимает ориентацию от FCU. - Передача в автопилот: LE публикует
LANDING_TARGETс периодом 20 Гц;TIMESYNCLE↔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.
