HDOP — это число, которое полётный контроллер показывает рядом с количеством спутников, и по нему принято судить, можно ли взлетать. Значение ниже 1.0 считается отличным, выше 3.0 — поводом подождать. Но HDOP описывает не точность приёмника, а геометрию созвездия: насколько удачно спутники разбросаны по небу. Понимание этой разницы объясняет, почему при двадцати спутниках HDOP иногда хуже, чем при двенадцати, и почему повышение порога в параметрах не решает проблему, а только снимает предупреждение.
Что такое HDOP
HDOP (Horizontal Dilution of Precision, горизонтальное геометрическое ухудшение точности) — безразмерный множитель, который показывает, во сколько раз геометрия видимых спутников увеличивает ошибку определения горизонтальных координат по сравнению с идеальным случаем.
Логика такая. У приёмника есть собственная погрешность измерения дальности до спутника — она складывается из шума приёмника, задержек в ионосфере и тропосфере, ошибок эфемерид. Эту суммарную погрешность обозначают UERE (User Equivalent Range Error) и для потребительских модулей она составляет порядка 1–3 метра. Итоговая ошибка позиции получается умножением:
Ошибка по горизонтали ≈ HDOP × UERE
При UERE 2 метра и HDOP 0.8 горизонтальная ошибка составит около 1.6 метра. При том же приёмнике и HDOP 5.0 — уже около 10 метров. Приёмник не стал хуже, изменилось только расположение спутников относительно антенны.
Ключевой момент: HDOP вычисляется исключительно из направлений на спутники. В него не входят ни уровень сигнала, ни помехи, ни многолучёвость. Это чисто геометрическая характеристика, и она рассчитывается до того, как приёмник узнает, насколько шумными окажутся измерения.
Рекомендованные значения HDOP
| HDOP | Оценка геометрии | Ожидаемая ошибка по горизонтали* | Пригодность для полёта |
|---|---|---|---|
| < 1.0 | Отличная | до 2 м | Любые режимы, включая автономные миссии и точную съёмку |
| 1.0–1.5 | Хорошая | 2–3 м | Рабочий диапазон для большинства полётов |
| 1.5–2.0 | Удовлетворительная | 3–4 м | Допустимо для ручных режимов и удержания позиции |
| 2.0–3.0 | Посредственная | 4–6 м | Взлёт возможен, но точность позиционирования заметно ниже |
| 3.0–5.0 | Плохая | 6–10 м | Автономные режимы не рекомендуются |
| 5.0–10 | Очень плохая | 10–20 м | Полёт с опорой на GPS небезопасен |
| > 10 | Неприемлемая | более 20 м | Решение считается недостоверным |
* Оценка для UERE около 2 м. Для многочастотных приёмников с RTK-коррекцией значения будут в разы меньше при тех же HDOP.
Практический ориентир для мультикоптера: взлетать при HDOP ниже 1.5 и не менее 12 спутников. Для автономных миссий, полётов по маршруту и аэрофотосъёмки с привязкой — ниже 1.0. Значение 2.0 и выше означает, что созвездие неудачное: либо часть неба закрыта, либо приём ведётся из одного сектора.
Отдельно стоит помнить, что HDOP обновляется медленно и меняется по мере движения спутников. Значение 1.3 в момент взлёта может стать 2.4 через пятнадцать минут, если аппарат зашёл в тень здания или созвездие сместилось.
Нажмите на небосвод, чтобы добавить или убрать спутник. HDOP считается по реальной геометрии — через матрицу ковариации, а не по таблице.
Почему число спутников не заменяет HDOP
Распространённое заблуждение — считать, что чем больше спутников, тем лучше решение. Количество важно, но определяющим фактором остаётся распределение по небосводу.
Возьмём два случая. В первом приёмник видит семь спутников: один вблизи зенита, шесть равномерно по кругу на средних углах возвышения. Такое созвездие даёт HDOP около 0.9. Во втором приёмник видит шестнадцать спутников, но все они сосредоточены в одном секторе над головой — типичная картина для двора между высокими домами. HDOP при этом легко превышает 4.0, несмотря на вдвое большее число спутников.
Причина в том, что для определения координат нужны измерения по разным направлениям. Если все спутники находятся близко друг к другу, их линии дальности почти параллельны, и пересечение сфер положения становится вытянутым: вдоль одной оси ошибка растёт многократно. Математически это выражается в том, что матрица наблюдений становится плохо обусловленной.
Формально HDOP получается из ковариационной матрицы решения. Строится матрица наблюдений A, в которой каждая строка — единичный вектор направления на спутник в локальной системе координат плюс единица для поправки часов. Затем вычисляется:
Q = (Aᵗ · A)⁻¹
HDOP = √(Q₀₀ + Q₁₁)
VDOP = √(Q₂₂)
PDOP = √(HDOP² + VDOP²)
Если спутников меньше четырёх или их направления линейно зависимы, матрица не обращается и решения просто нет. Интерактивный небосвод выше считает эти величины по настоящей геометрии, а не берёт из таблицы: можно собрать созвездие из четырёх спутников в одном углу и увидеть, как HDOP уходит в десятки.
HDOP, VDOP и PDOP: в чём разница
| Параметр | Что характеризует | Типичное соотношение |
|---|---|---|
| HDOP | Точность в горизонтальной плоскости (широта, долгота) | Базовое значение |
| VDOP | Точность по высоте | Обычно в 1.5–2 раза хуже HDOP |
| PDOP | Общая точность в трёх измерениях | √(HDOP² + VDOP²) |
| TDOP | Точность поправки часов приёмника | Редко используется на практике |
| GDOP | Полная геометрическая характеристика с учётом времени | √(PDOP² + TDOP²) |
VDOP почти всегда хуже HDOP, и это следствие геометрии, а не дефект приёмника: спутники видны только сверху, ниже горизонта их нет. Для определения высоты приёмник вынужден опираться на измерения из одной полусферы, тогда как по горизонтали направления распределены во все стороны.
Практический вывод для БПЛА: высота по GPS всегда менее надёжна, чем координаты. Поэтому ArduPilot по умолчанию использует барометр как основной источник высоты, а GPS-высоту — только как вспомогательный сигнал. Ориентироваться на GPS-высоту при полётах вблизи препятствий не следует.
Как посмотреть HDOP в Mission Planner
Есть три способа, от быстрого к подробному.
Панель Quick. Вкладка Flight Data, справа снизу список Quick. Двойной щелчок по любому полю открывает выбор параметра — нужны gpshdop и satcount. Значения обновляются в реальном времени.
Индикация в HUD. Под горизонтом в HUD выводится строка состояния GPS: тип фиксации (3D Fix, 3D RTK Float, 3D RTK Fixed), число спутников и HDOP. Это самый быстрый способ проверить состояние перед взлётом.
График из логов. Вкладка Flight Data, кнопка Review a Log, выбор DataFlash-лога. В дереве параметров находится GPS.HDop, рядом полезно вывести GPS.NSats и GPS.Status. Совмещённый график показывает, как менялась геометрия в течение полёта, и позволяет связать провалы в точности с конкретными участками маршрута. Для разбора инцидентов этот способ основной: мгновенное значение перед взлётом ничего не говорит о том, что происходило на дальней точке маршрута.
Как посмотреть HDOP в QGroundControl
QGroundControl не показывает HDOP отдельным полем в стандартном виджете. Значение доступно через MAVLink Inspector: меню Analyze Tools, далее MAVLink Inspector, сообщение GPS_RAW_INT, поле eph.
Важная деталь: по описанию протокола MAVLink поле eph передаёт именно HDOP, умноженный на 100. Значение 120 читается как HDOP 1.2, а не как 120 и не как погрешность в сантиметрах. Путаница возникает потому, что рядом в том же сообщении есть поля с оценкой погрешности в миллиметрах, и подписи в разных версиях GCS их смешивают. Проверить трактовку на конкретной сборке просто: сравнить показание с HDOP в Mission Planner на том же аппарате, значения должны совпасть с точностью до делителя 100.
Также в QGroundControl можно вывести индикатор точности на панель приборов: настройка виджета телеметрии позволяет добавить поле GPS accuracy, которое берёт данные из того же сообщения.
Причины высокого HDOP
Закрытая часть небосвода. Городская застройка, лес, склон холма, стены ангара. Приёмник видит спутники только в одном секторе, геометрия ухудшается. Самая частая причина на практике.
Размещение антенны. GPS-модуль, установленный ниже уровня рамы, между аккумулятором и корпусом, или под углеволоконной пластиной. Углеволокно проводит ток и экранирует сигнал L-диапазона: модуль под карбоновой крышкой теряет значительную часть небосвода. Модуль нужно поднимать на стойке выше остальных компонентов и оставлять над ним открытое небо.
Электромагнитные помехи. Регуляторы, силовые провода, видеопередатчик, особенно на 1.2 ГГц — эта частота близка к L2/L5 и способна забивать вход приёмника. Симптом характерный: HDOP хороший при выключенном передатчике и портится при включении. Проверяется прямо на земле.
Холодный старт. Первые минуты после включения приёмник ещё не загрузил альманах и эфемериды и использует часть спутников. HDOP в этот момент завышен и постепенно улучшается. После длительного простоя или переезда на большое расстояние загрузка занимает до нескольких минут.
Ограничение по углу возвышения. Спутники у горизонта дают сигнал, прошедший через большую толщу атмосферы, и их измерения шумные. Приёмники отбрасывают спутники ниже определённого угла. Это правильно с точки зрения качества измерений, но сокращает используемое созвездие и повышает HDOP.
Режим односистемного приёма. Если модуль настроен только на GPS, доступно порядка 8–12 спутников. Включение дополнительных систем расширяет созвездие втрое.
Параметры ArduPilot, связанные с HDOP
Ниже параметры, которые действительно существуют в ArduPilot 4.x. Их легко перепутать с похожими по названию, поэтому имена приведены точно.
| Параметр | Значение по умолчанию | Назначение |
|---|---|---|
GPS_HDOP_GOOD |
140 | Порог HDOP для предполётной проверки, в сотых долях. 140 соответствует HDOP 1.4 |
GPS_MIN_ELEV |
-100 | Минимальный угол возвышения спутника в градусах. -100 оставляет настройку приёмника |
GPS1_GNSS_MODE |
0 | Битовая маска используемых ГНСС для первого приёмника. 0 оставляет заводскую настройку модуля |
GPS_SBAS_MODE |
2 | Режим SBAS: 0 — выключен, 1 — включён, 2 — оставить настройку приёмника |
GPS_AUTO_SWITCH |
1 | Автоматический выбор лучшего приёмника при двух GPS |
EK3_GPS_CHECK |
31 | Битовая маска проверок GPS в EKF3, включая число спутников и HDOP |
FS_EKF_THRESH |
0.8 | Порог дисперсий EKF для срабатывания отказоустойчивости: 0.6 — строгий, 0.8 — обычный, 1.0 — ослабленный |
FS_EKF_ACTION |
1 | Действие при отказе EKF: 1 — Land, 2 — AltHold, 3 — Land даже в Stabilize |
Про имена параметров важное замечание. В версии 4.6 часть GPS-параметров переименована под поддержку нескольких приёмников: GPS_TYPE стал GPS1_TYPE, GPS_GNSS_MODE — GPS1_GNSS_MODE, GPS_RATE_MS — GPS1_RATE_MS. Переименование неполное: GPS_SBAS_MODE, GPS_MIN_ELEV, GPS_AUTO_SWITCH и GPS_HDOP_GOOD сохранили прежние имена, поэтому подставлять префикс GPS1_ ко всем GPS-параметрам подряд нельзя. В прошивках до 4.6 используются старые имена без цифры.
Про GPS_HDOP_GOOD важно понимать следующее. Это порог предполётной проверки, а не настройка качества приёма. Повышение значения до 200 или 300 уберёт сообщение PreArm: High GPS HDOP и позволит взлететь, но геометрия при этом не улучшится: аппарат поднимется с ненадёжным позиционированием. Единственная ситуация, когда изменение оправдано, — осознанный полёт в ручном режиме без опоры на GPS. Для режимов Loiter, PosHold, Auto и RTL порог трогать не следует.
Отдельно стоит предупредить про GPS_MIN_DGPS, который часто встречается в старых руководствах с подписью вида «минимум 10 спутников для 3D Fix». Это описание неверно дважды. Параметр никогда не относился к числу спутников — он задавал минимально требуемый тип дифференциальной коррекции (0 — любой, 50 — Float RTK, 100 — Fixed RTK) и имел смысл только при работе с RTK. Кроме того, в версии 4.6 он удалён, поэтому в актуальных прошивках его просто нет. Если инструкция предлагает его выставить, инструкция устарела.
GPS1_GNSS_MODE (в прошивках до 4.6 — GPS_GNSS_MODE) — битовая маска, и её значения складываются:
1 = GPS
2 = SBAS
4 = Galileo
8 = BeiDou
16 = IMES
32 = QZSS
64 = GLONASS
Часто встречающееся в инструкциях значение 67 — это 1 + 2 + 64, то есть GPS + SBAS + ГЛОНАСС, а не «все системы». Комбинация GPS + SBAS + Galileo + ГЛОНАСС даёт 71. При этом стоит учитывать, что многие модули имеют ограничение на число одновременно обрабатываемых созвездий, и включение всех систем подряд может не дать выигрыша. Значение 0 оставляет заводскую настройку приёмника, и для большинства современных модулей это разумный вариант.
Отдельного параметра для минимального числа спутников в ArduPilot нет — ни GPS_MIN_SATS, ни GPS_ACC не существует, хотя их регулярно упоминают в руководствах. Устроено это так:
- Само включение GPS-проверок задаётся битовой маской
ARMING_CHECK(по умолчанию 1, то есть все проверки). Бит 3 отвечает за проверку захвата GPS и именно он включает предполётный тест HDOP, бит 12 — за проверку конфигурации приёмника. - Требование 3D-фиксации зашито в код предполётных проверок и не настраивается, при её отсутствии выдаётся
GPS %i: Bad fix. - Порог в 6 спутников и лимит HDOP 2.5 зашиты в сам EKF3 и выдаются как
GPS numsats %u (needs 6)иGPS HDOP %.1f (needs 2.5). Отключить их можно только целиком, сняв соответствующие биты вEK3_GPS_CHECK(по умолчанию 31). - Параметр
EK3_CHECK_SCALE(по умолчанию 100, для самолётов 150) масштабирует только пороги по заявленной точности приёмника и на проверки числа спутников и HDOP не влияет.
То есть предполётных проверок HDOP фактически две: настраиваемая через GPS_HDOP_GOOD с порогом 1.4 и жёстко зашитая в EKF3 с порогом 2.5.
Почему EKF важнее HDOP
HDOP полезен как быстрый индикатор, но полётный контроллер ArduPilot принимает решения не по нему. Оценку состояния ведёт расширенный фильтр Калмана (EKF), который сравнивает данные GPS с показаниями инерциальных датчиков, барометра и компаса. Если GPS начинает давать противоречивые данные, EKF повышает внутренние дисперсии. Отказоустойчивость срабатывает не по одной из них: порог FS_EKF_THRESH должен быть превышен минимум двумя дисперсиями из трёх — по компасу, позиции и скорости — и продержаться так около секунды. Проверка работает только на взведённом аппарате, на земле она не мешает. При срабатывании выполняется действие из FS_EKF_ACTION.
Практическое следствие: возможна ситуация, когда HDOP выглядит приемлемым, но EKF отклоняет решение GPS из-за расхождения с другими датчиками — например, при многолучёвости у стены здания, когда сигнал приходит отражённым. Обратная ситуация тоже встречается: HDOP выше 2.0, но EKF работает устойчиво, потому что измерения согласованы между собой.
В Mission Planner состояние фильтра видно по индикатору EKF в HUD, а в логах — по дисперсиям. Здесь легко открыть не тот раздел: сообщения NKF* относятся к EKF2, а начиная с версии 4.1 по умолчанию работает EKF3, и его данные лежат в XKF*. Нужны поля XKF4.SP, XKF4.SV, XKF4.SH и XKF4.SM — нормированные отношения невязок по позиции, скорости, высоте и магнитометру, с которыми и сравнивается FS_EKF_THRESH. При разборе проблем позиционирования смотреть нужно именно туда, а не только на GPS.HDop.
Полезно сопоставлять три источника: GPS.HDop показывает геометрию, GPA.HAcc и GPA.VAcc — оценку погрешности, которую сообщает сам приёмник, а XKF4.SP/XKF4.SV — насколько EKF согласен с этими данными. Расхождение между ними обычно и указывает на причину: хороший HDOP при растущей HAcc говорит о шумных измерениях, а хорошие показатели GPS при высокой SP — о конфликте с другими датчиками.
Из этого же следует, зачем в прошивке сохраняются обе проверки. HDOP остаётся действующим предполётным фильтром: он дёшев в вычислении, доступен сразу и отсекает явно негодную геометрию до взлёта. Но в полёте вопрос о том, доверять ли GPS, решают оценки погрешности от приёмника и дисперсии EKF, потому что они учитывают то, чего геометрия не видит: помехи, многолучёвость и расхождение с инерциальными датчиками.
Как снизить HDOP на практике
Поднять антенну. GPS-модуль на стойке выше рамы, силовых проводов и видеопередатчика. Над модулем — открытое небо без карбона и металла. Это даёт наибольший эффект при наименьших усилиях.
Выдержать паузу перед взлётом. Одна-две минуты после включения, пока приёмник добирает эфемериды. Показатель улучшается заметно, особенно после холодного старта.
Отойти от препятствий. Смещение точки взлёта на десять метров от стены или края леса открывает целый сектор небосвода.
Проверить помехи от видеопередатчика. Включить передатчик на земле и посмотреть, меняются ли HDOP и число спутников. Если меняются — разнести антенны, сменить частоту, добавить экранирование.
Использовать многосистемный модуль. Современные приёмники принимают GPS, ГЛОНАСС, Galileo и BeiDou одновременно, и созвездие получается втрое больше односистемного.
| Класс модуля | Пример | Типичное число спутников | Типичный HDOP в открытом небе |
|---|---|---|---|
| Односистемный GPS | старые модули на u-blox NEO-6M | 8–12 | 1.2–2.0 |
| Мульти-ГНСС | u-blox M8N, Beitian BN-880 | 14–20 | 0.8–1.3 |
| Мульти-ГНСС нового поколения | u-blox M9N, Holybro M9N | 20–30 | 0.6–1.0 |
| Многочастотный | u-blox F9P, M10 | 25–35 | 0.5–0.8 |
| RTK | Holybro H-RTK F9P, ArduSimple | 25–35 | 0.5–0.7 при сантиметровой точности |
Стоит отметить, что для RTK-систем HDOP перестаёт быть основным критерием: там точность определяется наличием и качеством коррекции, а не только геометрией. Однако плохая геометрия по-прежнему мешает получить и удержать Fixed-решение.
Частые ошибки
Повышение GPS_HDOP_GOOD вместо устранения причины. Убирает предупреждение, оставляет проблему. Аппарат взлетает с недостоверным позиционированием, и в Loiter это проявляется дрейфом или рывками.
Оценка только по числу спутников. Двадцать спутников в одном секторе хуже восьми, распределённых по небосводу.
Ожидание хорошего HDOP в закрытом месте. Во дворе между домами или под кронами HDOP не улучшится, сколько ни ждать. Нужно менять место взлёта.
Использование GPS-высоты для полётов вблизи препятствий. VDOP хуже HDOP по геометрическим причинам, и вертикальная ошибка GPS в разы больше горизонтальной.
Установка модуля под карбоновой пластиной. Углеволокно экранирует сигнал. Модуль должен видеть небо напрямую.
Оценка ситуации по мгновенному значению перед взлётом. HDOP меняется в течение полёта. Для маршрутных задач смотреть нужно график из лога.
Кратко
HDOP — множитель геометрии, а не мера качества приёмника. Он показывает, во сколько раз расположение спутников ухудшает горизонтальную точность относительно идеального случая.
Рабочий ориентир: ниже 1.0 — отлично, до 1.5 — норма для взлёта, до 2.0 — допустимо в ручных режимах, выше 3.0 — автономные режимы небезопасны. Число спутников важно, но распределение по небосводу важнее.
Основные способы улучшить показатель — поднять антенну выше рамы и силовых элементов, дать приёмнику время на загрузку эфемерид, уйти от препятствий, исключить помехи от видеопередатчика и использовать мульти-ГНСС модуль.
Порог GPS_HDOP_GOOD (по умолчанию 140, то есть HDOP 1.4) регулирует предполётную проверку, а не качество приёма, и повышать его для обхода предупреждения не следует. За фактическую достоверность позиционирования в ArduPilot отвечает EKF с порогом FS_EKF_THRESH и действием FS_EKF_ACTION, и при разборе проблем смотреть нужно на дисперсии фильтра, а не только на HDOP.