Betaflight | Функции удержания высоты (Altitude Hold) и удержания позиции (Position Hold)
Внимание.Такой черновик присутствует на официальном сайта 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.
В режиме удержания позиции целевая позиция может корректироваться с помощью отклонения стиков крена и тангажа, превышающего 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 имеет приоритет над удержанием позиции и работает в обычном режиме.
Отладка — проверка ПИД и т.д.
В 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-коэффициентом. ПИДы активно останавливают движение. Когда аппарат остановится, целевая позиция сбрасывается на эту точку, и аппарат остаётся там.
