Перейти к содержимому
Betaflight | Функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold)

Betaflight | Функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold)

0.0/3 rating (0 votes)
Технику БПЛА
Понедельник, 04 августа 2025

Внимание.Такой черновик присутствует на официальном сайта Betaflight. Актуально только для прошивки Betaflight 4.6+

Betaflight 4.6 представляет функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold). При совместном использовании эти функции позволяют пилоту включить переключатель, после чего аппарат будет зависать в фиксированном месте и на постоянной высоте в режиме Angle. Стики можно использовать для регулировки высоты и положения. Обязательно требуется GPS, а использование магнитометра (компаса) настоятельно рекомендуется.

Быстрый старт

  • Включите ALTITUDE_HOLD и POSITION_HOLD при сборке прошивки.
  • Убедитесь, что GPS работает корректно.
  • Желательно подключить магнитометр и проверить его работоспособность.
  • Точно установите значение тяги для зависания (hover throttle).
  • Включите удержание высоты и позиции на одном и том же переключателе режима.
  • Проверьте, что квадрокоптер зависает без дрейфа в режиме Angle (то есть акселерометр откалиброван правильно). Полевые корректировки калибровки акселерометра можно выполнять с помощью стиков.
  • Выполните зависание и тщательно протестируйте.

Примечание: аппарат будет находиться в режиме Angle — реакция на стики будет сильно отличаться от обычной.

Удержание высоты (Altitude Hold)

Удержание высоты можно установить и протестировать независимо от удержания позиции. Функция предназначена для поддержания постоянной высоты квадрокоптера за счёт автоматической регулировки тяги. Для стабильного удержания высоты положение стика газа должно быть либо в зоне «мёртвой зоны» вокруг обычной точки зависания, либо установлено в ноль. Целевая высота может быть изменена вверх или вниз, если вывести стик газа за пределы мёртвой зоны.

Точность удержания высоты зависит от нескольких факторов: точность и стабильность данных о высоте, оптимальность значений ПИД-регуляторов для конкретного аппарата, а также сила и порывистость ветра. В хороших условиях с правильно настроенными ПИД-регуляторами стабильность высоты может быть в пределах 0,5–1 метра.

Если используется только удержание высоты (без удержания позиции), высота будет стабильной, но положение — нет. Управление креном, тангажом и рысканием будет работать как обычно, и аппарат всегда будет в режиме Angle.

Надёжное удержание высоты требует качественного источника данных о высоте. Достаточен GPS, но требуется много спутников, и некоторые из них должны быть низко над горизонтом. Иногда подключение барометра улучшает оценку высоты, особенно при зависании, но может вызывать ошибки в ветреную погоду, на малой высоте, при изменении температуры или скорости. Точность и стабильность оценки высоты можно проверить на вкладке «Sensors» в Configurator. Значения ПИД по умолчанию рассчитаны на использование только GPS и могут быть слишком агрессивными при подключении быстрого барометра.

Пилот должен настроить переключатель режима для включения удержания высоты на вкладке «Modes» в Configurator.

Когда функция активна, если стик газа находится в пределах мёртвой зоны вокруг обычного значения зависания, аппарат будет поддерживать постоянную высоту. Чтобы увеличить высоту, поднимите стик газа выше мёртвой зоны — аппарат будет набирать высоту со скоростью, пропорциональной положению стика. На полном газу скорость набора высоты по умолчанию составляет 5 м/с (параметр alt_hold_adjust_rate). Если стик газа опустить ниже мёртвой зоны, аппарат будет плавно снижаться. Однако если стик газа опустить полностью (в ноль), аппарат зависнет и не будет ни подниматься, ни снижаться. Полное опускание стика газа — своего рода «быстрый способ» зафиксировать высоту.

При активации удержания высоты начальное значение тяги устанавливается равным значению hover_throttle  (CLI). Затем ПИД-регулятор корректирует тягу вокруг этого значения для поддержания высоты. Если значение hover_throttle слишком низкое, квадрокоптер будет сразу падать при включении удержания высоты. Если слишком высокое — сразу начнёт набирать высоту. Отсутствие резких изменений высоты при включении — признак правильной настройки. На месте значение можно подстроить через подменю GPS Rescue OSD.

Чтобы аппарат удерживал постоянную высоту, стик газа должен быть установлен либо:

  • в пределах мёртвой зоны вокруг значения зависания, либо
  • в ноль (полностью вниз)

Если удержание высоты включается в экстренной ситуации (например, при быстром падении) или если квадрокоптер быстро набирает высоту, возможен перерегулирование и «отскок». Система не может мгновенно остановить аппарат, но он должен вернуться к исходной высоте в течение нескольких секунд. Перед использованием рекомендуется проверить поведение в таких ситуациях.

Удержание высоты можно включать даже при полёте вверх ногами — аппарат просто перевернётся и будет удерживать высоту.

В режиме удержания высоты аппарат переходит в режим Angle. Если удержание позиции одновременно не включено, управление креном, тангажом и рысканием работает как обычно — контролируется только высота.

CLI-параметры:

hover_throttle — начальное значение тяги при включении удержания высоты. 
Если слишком низкое — квадрокоптер будет падать при включении.
alt_hold_adjust_rate — чувствительность изменения высоты к положению стика газа.
По умолчанию: +5 м/с при полном газе, -5 м/с при нулевом газе.
alt_hold_deadband — мёртвая зона по обе стороны от значения зависания,
в пределах которой высота удерживается автоматически. По умолчанию 20 (20%).
Например, если hover_throttle = 1400, то 20% мёртвая зона — от 1320 до 1520.

Удержание позиции (Position Hold)

Удержание позиции следует включать одновременно с удержанием высоты, назначив обе функции на один и тот же переключатель режима.

При совместной активации аппарат должен удерживать как высоту, так и положение. Он переходит в режим Angle и быстро останавливается, зависая в точке остановки.

После остановки аппарат должен оставаться в пределах 1–2 метров от целевой точки, в зависимости от качества сигнала GPS, ветра и настройки ПИД. Более агрессивные ПИД лучше держат позицию, но вызывают частые мелкие корректировки. Менее агрессивные ПИД обеспечивают более плавное поведение, но медленнее реагируют.

Для удержания позиции необходим хороший GPS-сигнал. Лучше всего работает при наличии правильно откалиброванного и исправного магнитометра.

С магнитометром точное удержание позиции доступно сразу после взлёта. Без магнитометра удержание позиции не будет работать, пока аппарат не пролетит несколько секунд прямо вперёд с умеренной скоростью без крена и рыскания. В этом случае в OSD появится предупреждение POSHOLD FAIL.

Осторожно: Если магнитометр выдаёт ложные данные о направлении, или GPS-направление повреждено, включение удержания позиции может привести к сильному наклону аппарата, круговому полёту или даже уходу на большой скорости!
Примечание: Информацию по настройке магнитометра см. на wiki Betaflight.com.

В режиме удержания позиции целевая позиция может корректироваться с помощью отклонения стиков крена и тангажа, превышающего pos_hold_deadband. Аппарат можно перемещать и даже «летать» с помощью стиков, как в обычном режиме Angle, особенно если мёртвая зона мала. Значение мёртвой зоны можно настроить в CLI параметром pos_hold_deadband (в процентах от центра стика). Если pos_hold_deadband = 0, ввод крена и тангажа будет полностью игнорироваться — положение аппарата будет заблокировано до отключения режима.

Реакция на стики будет значительно слабее, чем в обычном режиме Angle. Максимальный угол, который может задать пилот, равен половине значения autopilot_max_angle, которое по умолчанию составляет 50 градусов.

Аппарат резко останавливается при возвращении стиков в центр, особенно при высокой скорости. Например, при скорости 10–15 м/с вперёд может быть применён максимальный угол тангажа 50 градусов назад. Для более плавной остановки снизьте скорость с помощью стиков перед возвратом в центр.

Значение autopilot_max_angle можно увеличить до 70 градусов, если требуется более агрессивное поведение.

Если удержание высоты и позиции работают, и аварийный режим (failsafe) установлен на «посадку», аппарат будет плавно снижаться на текущей позиции без дрейфа. Это намного лучше старого метода. Однако GPS Rescue по-прежнему предпочтительнее для аварийного режима и имеет приоритет над удержанием позиции.

Пользовательские CLI-параметры:

pos_hold_without_mag = true — разрешает удержание позиции без магнитометра.
pos_hold_deadband — мёртвая зона вокруг центра стиков. По умолчанию 5%.
При 0 стики игнорируются. Меньшие значения удобнее для точной корректировки.
autopilot_max_angle — максимальный угол, который может применить автопилот при резкой остановке.
По умолчанию 50°, максимум 70°. Максимальный угол, который может задать пилот
— половина этого значения.
autopilot_position_P — коэффициент P для удержания позиции.
Также есть D, I и A (ускорение). По умолчанию все 30.
При слишком высоких значениях — колебания, при слишком низких — вялое управление.
Меняйте по одному, чтобы понять эффект.
autopilot_position_cutoff — фильтр сглаживания для D и A компонентов ПИД.
По умолчанию 80 (0,8 Гц). При 50 — значительно плавнее, но менее точное позиционирование.
При 200 — очень «дрожит». Выбор за вами.
gyro_filter_debug_axis — выбор оси (Pitch или Roll) для логирования расстояний и
ПИД в режиме отладки autopilot_position.

Предполётные проверки

  • Если используется магнитометр, тщательно проверьте направление на главном экране Configurator. Сравните показания с компасом на смартфоне. Значение должно быть близко к 0° при направлении на север, около 90° — на восток, 180° — на юг и т.д. Ошибка должна быть менее 20°. Проверьте точность при наклонах ±60°.
  • Выполните зависание в режиме Angle и убедитесь, что акселерометр откалиброван и аппарат удерживается стабильно. Стиками можно внести мелкие корректировки.
  • Сначала протестируйте удержание высоты отдельно. Убедитесь, что при включении нет резкого падения или набора высоты. Подстройте hover_throttle, чтобы высота не менялась резко. Потренируйтесь регулировать высоту с помощью газа.
  • Затем включите удержание позиции на том же переключателе. Убедитесь, что много спутников GPS.
  • Если магнитометра нет, необходимо пролететь прямо вперёд на хорошей скорости без крена и рыскания на 50–100 метров (иногда больше), пока стрелка «домой» в OSD не покажет прямо вверх при движении к дому. Это «калибрует» направление аппарата по GPS. Без этого удержание позиции не будет работать.
  • Если магнитометр есть — калибровочный полёт не нужен, удержание позиции работает сразу после взлёта.

Готовы к тесту? Поднимитесь на 2 метра, в прямой видимости (LOS), и включите удержание высоты и позиции одновременно. Будьте готовы отключить режим или отключить моторы. Аппарат должен просто зависнуть. Возможен небольшой дрейф в радиусе ~1 м.

  • Если аппарат сразу улетает под углом или начинает кружить — данные о направлении (Mag или GPS) некорректны. Без магнитометра повторите прямолинейный полёт на 50–100 м.
  • Если сильная тряска или колебания — ПИД слишком высокие.
  • Убедитесь, что можете перемещать аппарат с помощью стиков крена и тангажа. Делайте это осторожно. Управление будет «не как обычно». Чтобы замедлиться — делайте это плавно, или вручную «сбивайте» скорость, отклоняя стик в обратную сторону перед возвратом в центр. Иначе при резкой остановке на высокой скорости произойдёт резкое изменение угла.

Получите хорошее ощущение управления в режиме удержания позиции в LOS, прежде чем использовать в FPV.

Функции безопасности

  • Аппарат нельзя включить (армировать) в режиме удержания позиции или высоты.
  • Удержание позиции НЕ работает:
    • если нет 3D-фиксы GPS;
    • если нет магнитометра и GPS ещё не определил направление (нужно пролететь прямо);
    • если есть магнитометр, но он нужен (GPS-направление недоступно), а магнитометр «неисправен» (сломан или не калиброван).
  • В OSD появляется сообщение POS HOLD FAIL, если удержание позиции невозможно.
  • По умолчанию магнитометр обязателен. Отключить можно через set pos_hold_without_mag = true.

Если pos_hold_without_mag = true, а магнитометра нет — удержание позиции будет недоступно сразу после взлёта. Нужно пролететь прямо вперёд с углом тангажа, без крена и рыскания, чтобы ИМУ «связалось» с GPS. До этого удержание не включится и будет показывать ошибку в OSD.

Если аппарат включён, и включено удержание позиции, в OSD будет отображаться «POSH», аппарат перейдёт в режим Angle и будет ждать поднятия газа. При поднятии газа он взлетит, и при достижении ~1 м высоты удержание позиции активируется.

Есть простая проверка: если аппарат не может оставаться в пределах 10 м от начальной точки, режим отключается. Расстояние увеличивается, если при включении аппарат двигался быстро.

GPS Rescue имеет приоритет над удержанием позиции и работает в обычном режиме.

Осторожно: Если удержание позиции включается сразу после включения питания при плохой GPS-фиксации, управление высотой и позицией может быть нестабильным. Хорошая GPS-фиксация с устойчивыми данными о положении и высоте — обязательна.

Отладка — проверка ПИД и т.д.

В CLI: set debug_mode = autopilot_position — для логирования цели, расстояния и ПИД удержания позиции.

Проще всего тестировать, летя строго на север, используя только тангаж, и логируя значения по оси Pitch: set gyro_debug_axis = pitch.

  • При pitch в логе будут ПИД по широте (север-юг).
  • При roll — по долготе (восток-запад).
КаналОписание
0 Абсолютное расстояние до цели, см
1 Расстояние до цели по выбранной земной оси
2 Сумма ПИД по выбранной земной оси (в градусах × 10)
3 Заданный угол тангажа/крена (в градусах × 10)
4 Коэффициент P по оси (в градусах × 10)
5 Коэффициент I по оси (в градусах × 10)
6 Коэффициент D по оси (в градусах × 10)
7 Коэффициент A (ускорение) по оси (в градусах × 10)
Примечания:
  • Отдельные ПИД-регуляторы для движения север-юг и восток-запад.
  • A означает «Acceleration» / «ускорение» (изменение скорости).
  • Сырые GPS-данные также будут в логе (скорость, кол-во спутников и т.д.).

Как работает удержание позиции?

При включении целевая позиция устанавливается на текущие GPS-координаты. При каждом обновлении GPS рассчитывается «ошибка» — расстояние от цели по направлениям север-юг (широта) и восток-запад (долгота), с точностью до 1 см. Независимо к каждой оси применяется ПИДА-регулятор. Для каждой земной оси:

  • P реагирует на величину ошибки,
  • D и A противодействуют скорости и изменению скорости,
  • I реагирует на накопленную ошибку (например, от ветра).

Полученные значения pidSum преобразуются в вектор направления, в котором нужно наклонить аппарат для возврата к цели. Код определяет угол направления носа аппарата от севера и сравнивает с требуемым углом коррекции. Затем вычисляются необходимые углы тангажа и крена. При повороте (рыскании) аппарат корректирует оси. Например, если аппарат сильно наклонён вперёд против ветра, при повороте на 90° весь угол тангажа плавно перейдёт в крен.

Когда стики выходят за мёртвую зону, управление передаётся обычному контроллеру режима Angle, и пилот полностью управляет в этом режиме. При возвращении стиков в центр удержание позиции восстанавливается с временной целью в этой точке, в особой фазе «остановки» с повышенным D-коэффициентом. ПИДы активно останавливают движение. Когда аппарат остановится, целевая позиция сбрасывается на эту точку, и аппарат остаётся там.

Betaflight | Функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold) ID 28
0.0/3 rating (0 votes)