Налаштування PID у Betaflight за Blackbox: усунь причину, а не симптом
Квадрокоптер перелітає задане значення після фліпу. На форумі радять «зменшити P» або «додати D». Але в одного й того самого перерегулювання може бути три причини, і для двох із них потрібні протилежні виправлення. Якщо винен feedforward, зменшення P погіршить ситуацію. Якщо контуру бракує демпфування, зменшення FF нічого не змінить. Журнал покаже, який саме випадок у тебе. Нижче — як bbdoctor аналізує журнали; висновки перевірено на шести реальних записах від Betaflight 3.1.5 до 2026.6.
Порядок роботи: механіка → шуми → PID
- Механіка. Справні пропелери, мотори без люфту, жорстка рама, акумулятор, що не зсувається. PID не виправить погнутий пропелер.
- Шуми й фільтри. RPM-фільтр (двонапрямний DShot), розумне фільтрування, мотори після польоту мають бути прохолодними. Дивись посібник із шумів і фільтрів.
- PID. Спершу roll і pitch (P/D та feedforward), потім I, TPA й anti-gravity.
Чому: D — це похідна гіроскопа, тож воно підсилює високочастотний шум і передає його прямо на мотори. bbdoctor не радитиме збільшувати D, якщо високочастотний шум моторів перевищує 2,5% діапазону моторів, якщо шум PID переважно походить від D-term або якщо сирий шум гіроскопа вище 80 Гц сягає 10 град/с. У випадку 4.2.5 нижче контуру справді бракувало D, але сирий шум гіроскопа 35,8 град/с змінив рекомендацію на P −10% (p_roll 42 → 38) і перевірку механіки в першу чергу.
Який журнал потрібен
- ACRO. 30–60 секунд різких перекладок і фліпів по кожній осі з поверненням стика в центр. У режимах ANGLE і HORIZON у Betaflight та INAV задане значення надходить від контуру кута, а не від стика; якщо понад половину польоту проведено в режимі самовирівнювання, відгук не обчислюється. ArduPilot і PX4 записують ціль регулятора кутової швидкості (
RATE.RDes,vehicle_rates_setpoint), тому відгук придатний у будь-якому режимі. - Частота запису. Перехідна характеристика працює від 200 Гц; практичний мінімум — 1 кГц. Нижче 500 Гц bbdoctor не може виміряти, наскільки насправді зростає D, і обмежує висновок про коливання рівнем «інформація».
- Кількість рухів. Політ ділиться на вікна тривалістю 1 секунда з кроком 1/8 секунди; залишаються вікна, де стик задавав щонайменше 20 град/с. Для висновку по осі потрібно 10 придатних вікон (і щонайменше чверть від усіх); для висновку «критично» й аналізу причини потрібно 50. Вікна перекриваються, тож 65 вікон — це приблизно 8 секунд активного польоту.
- Записуй поле заданого значення; подробиці налаштування — у посібнику з налаштування Blackbox.
Як читати перехідну характеристику
Перехідна характеристика показує, як повертався б квадрокоптер, якби ти миттєво задав стиком певну кутову швидкість. 1,0 — це задана швидкість. Хороша крива швидко зростає, трохи перевищує 1,0 і відразу стабілізується.
Перерегулювання
Наскільки пік перевищує 1,0; до 15% — це нормально. У висновку використовується 90-відсотковий інтервал, а не одне число:
- попередження, якщо нижня межа перевищує 15%; критично, якщо понад 35% (за наявності щонайменше 50 вікон);
- добре, якщо оцінка не перевищує 15%, а верхня межа — 25%;
- на межі, якщо оцінка трохи перевищує 15%, але інтервал вузький: поки нічого не змінюй, порівняй із наступним журналом;
- невизначено, якщо ширина інтервалу перевищує 15 пунктів: наступного разу додай на цій осі ще 5–6 рухів.
Демпфування ζ
bbdoctor підбирає до кривої модель другого порядку й обчислює коефіцієнт демпфування ζ. Він показує, наскільки перерегулювання створює сам контур P/D:
| ζ | Перерегулювання від контуру | Як це виглядає |
|---|---|---|
| 0,36 | ~30% | Глибоке просідання після піка, кілька коливань |
| 0,5 | ~16% | Помітне просідання, одне чи два коливання |
| 0,6 | ~9% | Невеликий виступ, майже без просідання |
| 0,7–0,9 | 5% або менше | Виступ, а потім рівна лінія — саме те, що потрібно |
bbdoctor позначає коливання, лише коли збігаються дві ознаки: ζ не більше 0,5 і просідання нижче цілі щонайменше на 4% (щонайменше на 2% із 90-відсотковою впевненістю). Це попередження за ζ до 0,40 або просідання на 15% чи більше. Якщо модель погано відповідає даним, ζ не показується, а висновок ґрунтується лише на просіданні й має рівень не вище «інформація». Коливання нижче 6 Гц на 5-дюймовому апараті радше вказують на I-term або важкий коптер, а не на D.
Швидкість
- t50 — час до половини заданої швидкості: 7–12 мс у чутливих журналах із цього посібника.
- Затримка від заданого значення до повороту — час від зміни заданого значення до піка реакції через увесь контур: PID, FF, фільтри, мотори й пропелери. Норма з feedforward — 4–12 мс, без нього — до 15 мс. Від 20 мс вісь вважається повільною, і bbdoctor не радитиме зменшувати для неї P. Затримка радіоканалу додається зверху (12 мс у прикладі GEPRC нижче).
Як будується крива
Ніхто не рухає стик ідеальними ступенями, тому відгук відновлюється зворотним розрахунком (деконволюцією): яка реакція на миттєвий ступінчастий сигнал перетворила б рух стика в цьому 1-секундному вікні на цей графік гіроскопа? Є дві пастки:
- Високі частоти. Вище приблизно 25 Гц рухи стика не містять енергії, тож деконволюція там обчислює лише шум. PID-Analyzer відсікає ці частоти крутим фільтром близько 25 Гц, але крутий зріз сам створює пульсацію (ефект Гіббса): приблизно 10% перерегулювання навіть у відгуку, де його немає. bbdoctor пригнічує все вище 80 Гц і згладжує гаусовим фільтром 30 Гц, який не має від’ємних пелюсток і не створює штучного виступу.
- Власне зміщення методу. Віконна обробка й згладжування все одно залишають невеликий виступ, тому той самий розрахунок виконується для ідеального відгуку, задане значення затримується на той самий t50, а отримане перерегулювання (1–5% у наших журналах) віднімається. На синтетичних даних чиста затримка дає 0%, а система з ζ = 0,5 — 15% за справжнього значення 16%.
Крива — це медіана за вікнами; інтервал отримано бутстрепом (200 випадкових перемішувань вікон), звідси запис у звіті «47% (90%: 44–53%)». Отже, 10% «перерегулювання» в інструменті з крутим зрізом можуть бути лише артефактом.
Одне перерегулювання — три причини
| Причина | Що видно в журналі | Що робити | Чого не робити |
|---|---|---|---|
| Feedforward (у 3.x — вага заданого значення D) | FF виконує 45% або більше роботи під час різких рухів стиком, P майже нічого не додає, а гіроскоп не відстає від заданого значення або випереджає його | Зменш f_roll/f_pitch на 15% (у 3.x — dterm_setpoint_weight). Безпечний перший крок: мотори від цього не нагріваються | Не чіпай P і D |
| Недостатньо демпфований контур | FF дає менше 45%, квадрокоптер не випереджає рух стика, ζ нижче 0,5, після піка є просідання й коливання | Збільш базове D на 15% разом із верхньою межею, якщо мотори прохолодні; якщо вони шумлять, зменш P на 10% | Не зменшуй FF — це не допоможе. Не зменшуй P, якщо вісь і так повільна (20 мс або більше) |
| Випередження | Контур добре демпфований (ζ ≥ 0,6, без просідання), але перерегулювання більш ніж удвічі перевищує очікуване для такого контуру; FF виконує щонайменше 35% роботи | Зменш FF. Якщо нічого не зміниться, поверни значення: тоді штовхає I-term | Не зменшуй P: зі слабшим P контур відтягує назад слабше, і перерегулювання зростає |
Ще три характерні випадки, перевірені окремо:
- перерегулювання зростає на високому газі: це TPA, дивись TPA й anti-gravity;
- на плавних рухах перерегулювання сильніше, ніж на різких: базового D замало, підсилення працює лише на різких рухах; дивись D Max проти D Min;
- на різких рухах перерегулювання сильніше, ніж на плавних: підсилення feedforward; дивись feedforward і згладжування RC.

П’ять реальних випадків
Еталон: 2% за ζ = 0,73
Журнал plasmatree_good_tune (Betaflight 3.1.5) — еталонне добре налаштування серед журналів, на яких калібрували пороги bbdoctor. Roll — 2% (90%: 1–3%), pitch — 5%, на yaw перерегулювання немає. Для roll ζ = 0,73, просідання немає, t50 — 9 мс, затримка від заданого значення до повороту — 10 мс. Не копіюй його P 19, I 12, D 18 у 4.x: там інакше працюють фільтри, D і feedforward.
Заводське налаштування 3.1.5: 87% через вагу заданого значення
Журнал 18_stock_tune, 7,9 кГц. Roll — 87% (79–93%), pitch — 65%. У 3.x задане значення не записується, тому його відновлено зі стиків і швидкостей. На найрізкіших рухах гіроскоп випереджає задане значення; контур без поштовху від стика так не може, отже поштовх дає dterm_setpoint_weight = 190 — еквівалент feedforward у 3.x. Рекомендація: 190 → 100, одне значення для всіх осей. На roll також є коливання (ζ = 0,36), але D тут лише наступний крок: d_roll 20 → 23, якщо коливання залишаться.
3,5-дюймовий коптер на 4.5.2: 47%, майже все від FF
Журнал vx35_18-23. Roll — 47% (44–53%), t50 — 7 мс. Feedforward виконує 60% роботи, а на найрізкіших рухах помилка стеження майже нульова. За ζ = 0,62 сам контур дав би приблизно 9% перерегулювання; решту додає FF. Pitch: 27%, частка FF — 59%. Рекомендація змінює лише FF:
set f_roll = 102
set f_pitch = 106
set simplified_pids_mode = OFF
save
Рядок із повзунками потрібен, бо PID у цьому журналі вже не відповідають положенням повзунків і під час збереження були б перезаписані. Крім того, підсилення D зростає лише до ×1,15 від заданого ×1,67, тож коптер переважно літає на d_min_roll = 30, а не на 50.
Betaflight 2026.6: 35% від самого контуру
Журнал GEPRC F405 записаний на частоті 247 Гц. Roll — 35% (33–38%). FF виконує лише 29% роботи, і коптер не випереджає стик, тож причина не у feedforward. Після піка відгук просідає на 5% нижче цілі й коливається на частоті ~9 Гц, ζ = 0,49 (імовірно 0,42–0,50). Pitch поводиться так само (ζ = 0,50), тож для обох осей одне виправлення: базове D +15%.
set d_roll = 39
set d_max_roll = 46
set d_pitch = 53
set d_max_pitch = 63
set simplified_pids_mode = OFF
save
Зменшувати P не можна: roll уже має затримку 24 мс, pitch — 28 мс, плюс ~12 мс через радіоканал 50 пакетів/с, перш ніж команда від стика досягне заданого значення. На частоті 247 Гц журнал не показує шум D, тож після першого польоту тривалістю 1–2 хвилини перевір мотори на дотик.

Betaflight 4.2.5: 32% на плавних рухах, 1% на різких
Журнал v0002, 2 кГц. Roll — 23%, причина — контур. Якщо розділити за величиною руху стика, на плавних рухах (до 101 град/с) перерегулювання становить 32%, на різких (від 800 град/с) — 1%. На різких рухах D досягає верхньої межі ×1,52 (d_min_roll 23 → d_roll 35), а плавні рухи виконуються з базовим значенням 23. Теоретично треба збільшити базове D, але гіроскоп шумить (дивись перший розділ), тому рекомендація — P −10%.
P, I та D окремо
- P відповідає за жорсткість. Якщо для твого P замало D, виникають перерегулювання й коливання; якщо замало P — відгук млявий, затримка довга, а коптер гірше тримає траєкторію в турбулентності від пропелерів. Зменшуй P через перерегулювання лише тоді, коли причина в контурі, а вісь не повільна.
- I утримує коптер проти сталих сил: зміщеного центру ваги, вітру, тривалих маневрів. Надмірний I відносно P створює повільне хитання на 1,5–10 Гц у спокійному польоті. bbdoctor шукає вузький пік помилки стеження, коли стик у межах ±40 град/с, і перевіряє, чи спричиняє його I-term (когерентність із помилкою ≥ 0,5, I/P на цій частоті ≥ 1); тоді рекомендується I −15%. В іншому разі причина — люфт (ремінець акумулятора, щогла GPS) або вітер, тож коефіцієнти підсилення не змінюються. Якщо I довго впирається в межу (перевіряється у 2025.12+), щось постійно тягне коптер: центр ваги, нахилений мотор або пропелер. Відскок після фліпів теж часто спричиняє I; дивись відскок після фліпів.
- D відповідає за демпфування і найчастіше нагріває мотори. bbdoctor вимірює D, яке реально працює в польоті, а не лише задане в налаштуваннях. Базове D і підсилення: D Max проти D Min.
Якщо roll і pitch реагують по-різному
У тому самому журналі VX3.5 затримка roll — 3,8 мс (90%: 2,9–5,0), а pitch — 9,5 мс (8,5–10,6). Інтервали не перекриваються, отже різниця реальна, і її пояснюють коефіцієнти: P для pitch — 42, для roll — 59. Якщо P повільнішої осі нижче 85% від швидшої, bbdoctor вважає, що цього достатньо для пояснення різниці. Спершу заверши налаштування перерегулювання, а потім зменш P для roll приблизно до 50, замість того щоб збільшувати pitch, де вже є перерегулювання. Якщо різниці P немає, поширена причина — розподіл ваги: акумулятор далеко від центру збільшує інерцію pitch.
Назви D у різних версіях і пастка повзунків
| Версія | Базове D | Верхня межа підсилення |
|---|---|---|
| 4.0–4.2 | d_min_roll | d_roll |
| 4.3–4.5 | d_min_roll («Derivative») | d_roll («D Max») |
| 4.6 / 2025.12+ | d_roll («Derivative») | d_max_roll («D Max») |
Та сама рекомендація «збільшити d_roll» у 2025.12 збільшує базове D, а в 4.5 — лише верхню межу, якої коптер може майже не досягати. Приклад для 4.5 (базове 30, межа 50), збільшення демпфування roll на 10%:
set d_min_roll = 33
set d_roll = 55
set simplified_pids_mode = OFF
save
Повзунки. Поки simplified_pids_mode має значення ON, Configurator під час збереження перераховує PID за повзунками й стирає ручні зміни. Ніколи не запускай simplified_tuning apply поверх ручного налаштування: ця команда перебудовує PID за множниками повзунків і стандартними початковими значеннями.
INAV, ArduPilot, PX4
- INAV:
mc_p_roll,mc_i_roll,mc_d_roll,mc_cd_roll(CD — feedforward), а також відповідні параметри для pitch і yaw. TPA — цеtpa_rateіtpa_breakpoint. Докладніше — аналіз Blackbox в INAV. - ArduPilot:
ATC_RAT_RLL_P/_I/_D/_FF, а також відповідні параметри для PIT і YAW. В ArduCopter почни з вбудованого AUTOTUNE, а потім перевір результат за журналом. Потрібен швидкий запис (біт ATTITUDE_FAST уLOG_BITMASK). Докладніше — аналіз журналів ArduPilot. - PX4:
MC_ROLLRATE_P/_I/_D/_FF.MC_ROLLRATE_Kодночасно множить P, I та D, тож врахуй його. Автоналаштування: задайMC_AT_EN = 1, потім запусти його в QGroundControl (PID Tuning). Записуй журнал із бітом High rate уSDLOG_PROFILE. Дивись аналіз PX4 ULog.
Безпека
- Знімай пропелери, коли працюєш у CLI з під’єднаним акумулятором.
- За один політ змінюй один параметр на 10–15%, інакше не зрозумієш, що спрацювало.
- Перший політ після зміни зроби коротким і низьким, тримаючи палець напоготові на вимикачі двигунів.
- За хвилину польоту торкнись моторів. Якщо вони явно тепліші — поверни попереднє значення.
- Не намагайся звести перерегулювання до нуля: 5–12% і рівна лінія після піка — це добре налаштований коптер, а не проблема.
- Тремтіння під час скидання газу — окрема проблема: дивись турбулентність від пропелерів.
Перевір власний журнал
Безкоштовно завантаж журнал у bbdoctor. У звіті будуть перерегулювання по кожній осі з інтервалом, ζ, просідання, частка роботи FF, затримка й різниця між осями, а також команди CLI, сформовані з поточних значень і з правильними назвами для твоєї версії. Переглянь приклад звіту, а налаштування можна перевірити без польоту за допомогою diff all на сторінці перевірки конфігурації.
Часті запитання
Як відрізнити перерегулювання через feedforward від перерегулювання через P?
Подивись, хто виконує роботу під час різких рухів стиком. Якщо на FF припадає 45% або більше, а під час найрізкіших рухів гіроскоп не відстає від заданого значення або випереджає його, причина перерегулювання — FF: зменш f_roll і f_pitch на 15%, а P і D не чіпай. Якщо FF дає менше 45%, а після піка відгук просідає нижче цілі й коливається (ζ нижче 0,5), проблема в контурі P/D.
Яке значення D змінювати в Betaflight 4.5 і 2025.12?
Базове D, на якому ти літаєш більшість часу. У 4.3–4.5 це d_min_roll (стовпець Derivative), а d_roll — лише верхня межа підсилення (D Max). Починаючи з 4.6/2025.12 назви відповідають стовпцям: базове d_roll, межа d_max_roll. Змінюй обидва в однаковій пропорції, як це робить повзунок.
Наскільки сильно змінювати PID за один раз?
Один параметр за політ, по 10–15% за крок. Після першої хвилини в повітрі торкнись моторів: якщо вони явно тепліші, ніж до зміни, поверни попереднє значення. Крок у 10–15% помітно перевищує похибку вимірювання в кілька відсотків і водночас достатньо малий, щоб не перескочити оптимум.
Що означає ζ (демпфування) у звіті?
Це показник того, як швидко згасають коливання після піка. За ζ = 0,5 сам контур перерегулює приблизно на 16% і помітно коливається; за 0,7 — приблизно на 5%, майже без коливань. Хороше налаштування має ζ у межах 0,6–0,9. Значення нижче 0,5 разом із просіданням після піка означає, що для поточного P бракує демпфування (D).
Оновлено: