bbdoctor
Діагностика дрона за логом: Betaflight, INAV, ArduPilot, PX4
RUENESPTUA

Як читати лог Blackbox: від хвилястих ліній до діагнозу

Відкриваєш лог у Blackbox Explorer — бачиш тридцять графіків. Explorer показує все, що записав польотний контролер; висновки робиш ти. Нижче — ручний аналіз за сім кроків, а потім розбір реального логу з усіма знахідками bbdoctor, цифрами, способами перевірити їх на око та поясненням, коли автоматичний аналіз має сказати «не знаю».

Інструменти для читання логу

ІнструментЩо він робитьЩо залишається тобі
Blackbox Viewer (Blackbox Explorer)Хронологія всіх полів, синхронізація з відео, аналізатор спектра (PSD, теплові карти газу й RPM, порівняння спектрів через імпорт CSV), експорт CSV. Із версії 2026.6 — вкладка в Betaflight App; окремий blackbox.betaflight.com заморожено.Знайти потрібні моменти, визначити, що є нормою, і вибрати параметр.
INAV Blackbox ExplorerТе саме для логів INAV.Те саме; INAV не записує оберти окремих моторів.
PIDtoolboxСпектрограми газу, перехідна характеристика, перегляд кількох логів поруч.Інтерпретація та вибір параметра.
PID-Analyzer (Plasmatree)Скрипт Python: перехідна характеристика через деконволюцію, шум залежно від газу.Інтерпретація; він не визначить, чи перерегулювання спричинив FF, чи P/D.
blackbox_decodeПеретворює лог на CSV.Усе інше — у власних скриптах.
Mission Planner, UAV Log Viewer (ArduPilot)Графіки повідомлень .bin: RATE, PIDR/PIDP, VIBE, BAT, RCOU; FFT у вебінструменті Filter Review.Висновки та граничні значення VIBE.
PX4 Flight ReviewОнлайн-графіки .ulg: відстеження кутової швидкості, виходи моторів, спектрограми.Висновки та параметри.
bbdoctorЗнахідки у форматі «що не так → що робити» з цифрами, 90% інтервалами й командами для Betaflight, EmuFlight, INAV, Rotorflight, ArduPilot і PX4.Немає перегляду кадр за кадром і відео (для цього є Explorer). Ти вирішуєш, чи застосовувати рекомендації.

Ці інструменти доповнюють один одного: Explorer допомагає розібрати одну секунду польоту, а автоматичний аналіз підказує, яку секунду дивитися і що змінити.

Як читати лог вручну за 7 кроків

Назви полів наведено так, як вони записані в лог. Індекс 0 — roll, 1 — pitch, 2 — yaw. В Explorer відкрий View → Analyser (або натисни A), щоб запустити аналізатор спектра, а потім клацни графік у легенді.

  1. Хронологія та режими. В одному файлі може бути кілька польотів — по одному на кожне армування. Перевір flightModeFlags: у режимах ANGLE і HORIZON відгук PID виглядає значно гірше, ніж в ACRO. rcCommand[3] показує висіння, скидання газу й панчі. Не довіряй спектрам через розриви в записі.
  2. Гіроскоп і setpoint під час фліпів. Виведи разом gyroADC[0] і setpoint[0]. Гіроскоп перевищує ціль: перерегулювання. Коливання після зупинки стика: слабке демпфування або відскок. Відставання на 20–30 мс: млявий відгук. Додай axisP[0], axisD[0], axisF[0], щоб побачити, який складник штовхає квадрокоптер.
  3. Мотори. motor[0..3]. 100% під час панчу на повному газі або короткого різкого фліпу — нормально; якщо мотори впираються в максимум під час маневрів на середньому газі, запасу тяги немає. Мотор, що зависає на холостому ходу після скидання газу, часто спричиняє пропвош. Якщо одна пара моторів увесь час працює сильніше під час висіння, перевір центр мас.
  4. Спектр до і після фільтрів. Порівняй gyroUnfilt із gyroADC. Вище приблизно 80 Гц — це шум, а не рух апарата. Те, що проходить крізь фільтри, потрапляє в PID і нагріває мотори.
  5. Частота залежно від газу. Діагональна лінія, що рухається вправо зі збільшенням газу, — це мотори й пропелери. Вертикальна смуга за будь-якого газу — резонанс рами, стека або антени (рис. 1).
  6. I-складова під час висіння. axisI[0] і axisI[1] мають коливатися навколо нуля. Якщо значення весь політ тримається на одному рівні, контролер компенсує дисбаланс: зміщений центр мас, перекошений або зношений мотор.
  7. Напруга і струм. Дивись vbatLatest і amperageLatest: просідання напруги на банку під час піків струму та напругу наприкінці польоту. Співвідношення стрибка напруги до стрибка струму приблизно показує внутрішній опір.
Теплові карти сирого шуму гіроскопа залежно від газу: ліворуч діагональна лінія моторів, праворуч вертикальні смуги резонансу рами
Сирий шум гіроскопа залежно від газу. A: roll, Betaflight 4.2.5, 4S, лог 2 кГц. Діагональ показує мотори: 242 Гц за газу 20–25%, 398 Гц за 50–55%, близько 600 Гц на повному газі. B: pitch, Betaflight 4.5.1, 6S, лог 1013 Гц, тому шкала закінчується на 506 Гц. Смуги біля 186 і 225 Гц залишаються на місці за газу від 15 до 80%: це рама або стек, а не мотори. bbdoctor позначає їх (на графіку видно 186 Гц для pitch і 198 Гц для roll), але не встановлює notch: за частоти запису 1013 Гц реальна частота 186 Гц може бути 827 або 1199 Гц. Порожні рядки — діапазони газу, якими квадрокоптер майже не користувався.

Для кроків 4 і 5 потрібен достатньо швидкий запис: частоти вище половини частоти запису складаються в хибні піки. Налаштування: посібник із налаштування Blackbox.

Один реальний лог від початку до кінця

Публічний лог, на якому побудовано приклад звіту: Betaflight 4.5.2, SpeedyBee F405 Mini, 4S, судячи з назви апарата VX3.5 — розмір 3,5 дюйма. Лог триває 110 с, у повітрі апарат був 107 с, увесь час у ACRO. Гіроскоп 8 кГц, PID 4 кГц, запис 1 кГц із сирими даними гіроскопа й eRPM. Нижче — головні з 20 пунктів звіту та пояснення, звідки взято кожну цифру.

Задні мотори навантажені на 50% більше: центр мас

Середня команда: задні M1 і M3 — 28,7%, передні — 19,2%. Понад 12% — попередження, понад 30% — критичне значення. Підтвердження: медіана I-складової pitch дорівнює 45, а не близька до нуля, тобто контролер увесь політ додає тягу ззаду. Зазвичай акумулятор або камера стоїть надто далеко позаду; якщо причина інша — це тривалий швидкий політ уперед, і під час спокійного висіння різниця майже зникає. Це не проблема PID: пересунь акумулятор так, щоб квадрокоптер висів рівно на пальцях під центром рами.

Roll: перерегулювання 36% через feedforward

Перехідна характеристика roll: перерегулювання 36% (90% інтервал 29–44%). Результат отримано з 165 придатних перекривних вікон тривалістю одну секунду з 372 вікон, де рухався стик; половини заданої кутової швидкості досягнуто за 8 мс. Нижня межа понад 15% — це знахідка. Але рекомендація тут не «знизь P» і не «підніми D». Під час швидких рухів стиком feedforward виконує 60% роботи (FF порівняно з P), а гіроскоп у середньому випереджає setpoint на 3 мс: FF перетягує квадрокоптер. Тож змінюємо тільки FF: f_roll 120 → 102, на 15% нижче значення у твоєму профілі; P і D не чіпаємо. Якщо перерегулювання залишиться лише на різких фліпах, наступним кроком буде feedforward_boost 15 → 8. Для pitch та сама картина: 28% (23–37%), FF — 56%, f_pitch 125 → 106.

set f_roll = 102
set f_pitch = 106
set simplified_pids_mode = OFF
save

Навіщо simplified_pids_mode: у цьому лозі значення PID не відповідають повзункам, і Configurator перезапише їх під час наступного збереження.

Найрізкіший рух стиком roll у прикладі логу: setpoint і гіроскоп зверху, складники P, D та feedforward знизу з великими піками FF
Найрізкіший рух стиком roll у прикладі логу, 0,8 с. A: стик рухається на позначці 200 мс. За 100 град/с гіроскоп відстає від setpoint на 10 мс; за 200 град/с випереджає його на 13 мс. Пік — 267 град/с за цілі 245. Після відпускання стика гіроскоп опускається на 66 град/с нижче setpoint (496 мс). B: під час рухів стиком FF дає піки +446 і −467; P залишається в межах 95, D — у межах ±88 (одиниці PID у лозі).

На око ти не побачиш 36%: тут пік лише на 22 град/с (9%) перевищує ціль. Перехідна характеристика — це реакція на ідеальний миттєвий стрибок, обчислена деконволюцією 165 вікон; реальний рух стиком — це наростання приблизно за 100 мс. На ньому видно те саме інакше: гіроскоп випереджає setpoint, а піки FF майже вп’ятеро більші за P. Докладніше: налаштування PID за Blackbox.

Сирий шум 4,1 град/с: справа в механіці, а не у фільтрах

Сирий шум гіроскопа вище 80 Гц: roll — 4,1, pitch — 2,4, yaw — 2,5 град/с, трохи вище порога попередження 4 град/с. Після фільтрації — 0,53 град/с із затримкою близько 1,4 мс; у звіті фільтри оцінено як справні. Тож залиш їх і перевір пропелери, підшипники та кріплення стека. Вібрація з частотою обертання кожного мотора однакова (M1 — 1,1, M2 — 0,5, M3 — 1,8, M4 — 1,9 град/с), а різниця RPM за однакової команди не перевищує 1,9%. Як шукати несправний мотор, коли розкид великий: посібник із вібрації моторів.

Мотори розкручуються до 610 Гц, а лог записується на 1 кГц

За eRPM мотори розкручуються до 610 Гц, але лог із частотою 1000 Гц бачить лише до 500 Гц. Вищі частоти складаються вниз, тому 610 Гц відображається як 390 Гц. Аналіз окремих моторів справляється з цим (він використовує фазу обертання з eRPM), але спектр і резонансні частоти стають неоднозначними. Виправлення:

set blackbox_sample_rate = 1/2
save

Тремтіння FF через радіоканал: 2,1% діапазону моторів

Поки рухаються стики, FF вище 40 Гц (поштовх на кожному кроці радіоканалу) становить 2,1% діапазону моторів для roll і 1,7% для pitch; відповідно 34 і 28 поштовхів за секунду перевищують 5%. Корисний FF нижче 12 Гц: 1,5 і 1,2%. Коли стики нерухомі — 0,40%, отже, причина у кроках стика. Частота каналу — 494 Гц, згладжування стика — 185 Гц. На FF припадає 89% високочастотного шуму виходу PID, на D — 10%, тож не знижуй D і не змінюй D-фільтри: це лише збільшить затримку. Спершу знизь FF, а наступного польоту додай згладжування:

set feedforward_averaging = 2_POINT
set feedforward_smooth_factor = 65
save

Підсилення D майже не вмикається

Налаштовано: d_min_roll = 30, d_roll = 45, підсилення — до ×1,50. bbdoctor вимірює фактичний множник за записаною D-складовою (нахил axisD відносно похідної гіроскопа на частотах 8–40 Гц, блоки по 0,25 с, із вилученою дією TPA). На найрізкіших маневрах D сягає лише ×1,06 для roll і ×1,04 для pitch. Ти літаєш на d_min, тож змінюй демпфування базовим D (стовпець Derivative), а не D Max. У версії 2025.12 назви відповідають інтерфейсу (базове d_roll, межа d_max_roll); дивись посібник із налаштування PID.

Пропвош 1,1 град/с: усе гаразд

Скидання газу: газ падає більш ніж на 25% свого діапазону за 0,15 с, починаючи з рівня понад 35%. Таких випадків 46; два одразу перейшли у фліп, і bbdoctor вилучає їх, оскільки рух стиком створює ті самі частоти 15–80 Гц. Для 44 чистих скидань газу різниця між гіроскопом і setpoint на частотах 15–80 Гц через 0,08–0,6 с після скидання становить 1,1 град/с RMS, переважно близько 20 Гц; норма — до 4. Виправляти нічого не треба; якщо проблема все ж дошкуляє, дивись посібник із пропвошу.

Акумулятор: 3,23 В на банку за струму 72 А

На старті було 3,84 В на банку — акумулятор не повністю заряджений. Мінімальна напруга під навантаженням (понад 0,5 с) — 3,23 В, піковий струм — 72 А, наприкінці — 3,66 В, витрачено близько 248 мА·год. Внутрішній опір — приблизно 7 мОм на банку, за 182 різкими змінами струму, разом із проводкою. Акумулятор працює на межі: попередження.

Інші результати

Як перевірити кожну знахідку в Explorer

ЗнахідкаЩо вивести на графікЩо має бути видно
Центр масmotor[0..3], axisI[1]Під час висіння M1 і M3 (задні в розкладці Betaflight) мають вищі значення, ніж M2 і M4; axisI[1] — близько 45.
Перерегулювання через FFsetpoint[0], gyroADC[0], axisF[0], axisP[0]Гіроскоп перевищує setpoint, поки ще зростає; піки axisF у кілька разів вищі за axisP. Якщо FF малий, а після зупинки є коливання — причина в P/D.
Сирий шумgyroUnfilt[0], gyroADC[0] в аналізаторіСирий спектр помітно вищий у діапазоні 100–500 Гц; після фільтрації рівень майже рівний.
Мотори швидші за частоту записуeRPM[0..3]Частота мотора в Гц = значення поля × 100 / (motor_poles / 2) / 60. Для 14 полюсів 610 Гц відповідає значенню 2562.
Тремтіння FFaxisF[0], setpoint[0]Короткий пік axisF на кожному кроці setpoint; майже нічого, коли стик нерухомий.
ПропвошrcCommand[3], gyroADC[0..1]Коливання близько 20 Гц через 0,1–0,6 с після скидання газу; за 1 град/с його майже не видно.
Просідання напругиvbatLatest, amperageLatestМінімум близько 12,9 В під час піків струму до 72 А.

Чому деякі знахідки повідомляють «замало даних»

За малої кількості даних аналізатор має промовчати, інакше він упевнено рекомендуватиме нісенітниці. Мінімальні вимоги bbdoctor:

ПеревіркаМінімумЯкщо даних менше
Увесь лог10 с у повітріУсі результати знижено до інформаційних, без команд
Перехідна характеристика для кожної осі10 придатних вікон, щонайменше чверть усіх«Недостатньо даних для перехідної характеристики»
Критичне перерегулювання, поглиблена перевірка PID50 вікон на вісьМаксимум попередження, деякі перевірки не виконуються
Відскок після фліпів6 різких зупинок на вісьНе перевіряється
Просідання під час панчів6 панчів без руху стикомНе перевіряється
Пропвош3 чисті скидання газу, 5 для попередженняОцінки немає; за 3–4 випадків — лише інформаційний результат

Приклад: у лозі Betaflight 4.2.5 (2 кГц, 4S, 215 с у повітрі) є 15 скидань газу, але 12 із них одразу переходять у фліп або рол. Середній «пропвош» становить 18,4 град/с — критичне значення (поріг 10). Для окремих скидань діапазон — від 1,4 до 58,6 град/с; великі значення припадають на фліпи. Для трьох чистих скидань — 1,8 град/с, норма. Інструмент, який враховував би маневри, порадив би підвищити D та оберти холостого ходу квадрокоптера, де пропвошу немає.

Другий запобіжник — «похибку методу вже віднято». Деконволюція показує невелике перерегулювання навіть для ідеального відгуку, особливо коли setpoint не записано й його відновлюють за рухом стиків. bbdoctor виконує той самий розрахунок для setpoint, зміщеного на таку саму затримку, і віднімає результат. У лозі Betaflight 4.5.1 без setpoint (801 Гц, 6S) сире перерегулювання pitch становило 29%, із них 9% — похибка методу, у звіті лишилося 20%. Для yaw усе сире значення 9,6% пояснювалося похибкою: перерегулювання не було.

Як визначити, чи можна довіряти цифрам

Порядок роботи: одна зміна за політ

  1. Запиши 1–2 хвилини в ACRO: висіння, плавні повороти, 5–6 скидань газу, 6–8 фліпів і стільки ж ролів із різким поверненням стика в центр, 6–8 панчів із нерухомими стиками.
  2. Завантаж лог у онлайн-аналізатор Blackbox. Спершу перевір критичні проблеми та механіку: налаштовувати PID на незбалансованій рамі зі сколотими пропелерами немає сенсу.
  3. Одна зміна за політ. Тут: акумулятор, потім FF, потім згладжування FF. blackbox_sample_rate можна змінити разом із будь-яким кроком, оскільки на політ він не впливає. Перед налаштуванням від акумулятора зніми пропелери.
  4. Залиш ті самі пропелери, візьми подібний акумулятор із приблизно таким самим зарядом і літай у тому самому стилі.
  5. Скористайся пунктом «Порівняти аналізи» в історії. Якщо 90% інтервали до і після зміни перекриваються, це означає «без змін». Польоти в різному стилі буде позначено (середній газ відрізняється на 10% діапазону або більше чи один політ утричі довший).

Обмеження

Далі — за проблемою: шум і фільтри, пропвош, PID за перехідною характеристикою.

Часті запитання

Що можна використовувати замість Blackbox Explorer?

Починаючи з випуску 2026.6 переглядач логів Betaflight доступний у Betaflight App на app.betaflight.com у вкладці Blackbox Viewer; окремий Explorer більше не розвивається. В INAV є власний INAV Blackbox Explorer. Щоб отримати знахідки з цифрами й командами CLI, завантаж лог у bbdoctor.

Які файли логів читає bbdoctor?

Логи Blackbox Betaflight, EmuFlight, INAV і Rotorflight (.bbl, .bfl, .txt), ArduPilot .bin і PX4 .ulg; формат визначається за вмістом. Текстові .log і .tlog ArduPilot не підтримуються, як і логи ArduPlane, Rover та літаків із нерухомим крилом PX4.

Чи можна довіряти автоматичному аналізу Blackbox?

Для кожної оцінки вказано 90% інтервал; якщо даних менше за мінімум, висновку не буде. Похибку методу віднімають, а рекомендації проходять перехресну перевірку. Усе одно це орієнтир, а не остаточний вердикт: змінюй по одному налаштуванню й перевіряй наступний лог.

Чи зберігається мій лог?

Лише для повторного запуску аналізу; його буде автоматично видалено. У політиці конфіденційності зазначено, як довго зберігаються лог і звіт. Посиланням на звіт можна поділитися з будь-ким.

Оновлено:

Інші гайди