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

Налаштуй Blackbox у Betaflight: запиши лог, який можна діагностувати

Blackbox записує гіроскоп, стіки й setpoint, складові PID, мотори, RPM, напругу та струм. Але лог із заводськими налаштуваннями часто показує дуже мало. Приклади з проаналізованих нами логів: 3,5-дюймовий дрон на Betaflight 4.5.2 записував 1 кГц, а мотори розкручувалися до 644 Гц; лог Betaflight 2026.6 мав частоту 247 Гц без сирого гіроскопа й RPM; 7-дюймовий дрон на 4.6 записував 2 кГц на SD-карту з 182 пропусками; лог INAV 7.1 на 58 Гц нічого не говорить про вібрації.

Що потрібно для кожної перевірки

Порогові значення взято безпосередньо з коду аналізатора; нижче них перевірка нічого не повідомляє або позначає недостатню кількість даних.

ПеревіркаПоля логуЧастота записуЩо виконати в польоті
Вібрація кожного мотора: який мотор або пропелер тремтитьнефільтрований гіроскоп + eRPM~250 Гц і вище; працює навіть за межами Найквістапів хвилини рівного польоту з різним газом
Шум, фільтри, резонанси раминефільтрований і фільтрований гіроскоп500 Гц і вище; точна частота резонансу при 1/1 (або від 2 кГц для резонансів нижче 500 Гц)висіння та повільне збільшення газу до 100%
Шум моторів і складова PID, у якій він з'являєтьсяmotor, axisP, axisD, axisF500 Гц і вищебудь-який політ
Перехідна характеристика (step response) і затримкаsetpoint + гіроскоп200 Гц і вищеAcro; понад 10 придатних вікон тривалістю секунду зі стіком від 20 град/с, 50 для вердикту «критично»
Пропвошsetpoint, газ200 Гц і вищещонайменше 3 чистих скидання газу, 5 для впевненого висновку
Відскок після фліпівsetpoint, axisP/I/D/F200 Гц і вищепонад 6 різких зупинок стіком на кожній осі
Просідання під час панчу (anti-gravity)setpoint, газ, axisI100 Гц і вищепонад 6 панчів з іншими стіками по центру
Просідання напруги й опір акумулятораvbat; для опору також датчик струмубудь-якадля опору — понад 5 вікон по секунді зі зміною струму від 8 А
Аналіз крашуакселерометр, гіроскоп, RSSI/failsafe, eRPM, vbatбудь-яка—

Якщо політ тривав менше 10 секунд, усі висновки щодо тюнінгу знижуються до рівня «інформація» й команди CLI прибираються; відскок і панчі не вимірюються. Якщо понад половину польоту ти був у режимі Angle або Horizon, перевірки step response і відскоку пропускаються: у цих режимах стік задає кут, а не швидкість обертання.

Частота запису й аліасинг

Чому 1 кГц вводить в оману на малих дронах

Лог, записаний із частотою N Гц, показує вібрації лише до частоти Найквіста N/2. Швидші коливання не зникають, а віддзеркалюються нижче цієї межі. Мотор на 644 Гц у лозі 1000 Гц з'являється на частоті 1000 − 644 = 356 Гц. У спектрі виникає виразний пік там, де нічого не відбувається: його легко сплутати з причиною для неправильно підібраного notch або фільтра.

У трьох логах VX3.5 на Betaflight 4.5.2 (цикл PID 4 кГц, 1/4, тобто 1 кГц) пікові частоти моторів становили 583, 605 і 644 Гц — щоразу вище 500 Гц. На рисунку той самий ефект для іншого дрона: лог 2 кГц, у якому залишено кожен четвертий кадр, саме так працює blackbox_sample_rate, без попередньої фільтрації.

Сирий шум гіроскопа залежно від газу при 2000 Гц і той самий політ при 500 Гц, де лінія мотора віддзеркалюється від 250 Гц
Сирий гіроскоп roll залежно від газу. A: оригінальний лог 2000 Гц (Betaflight 4.2.5, 4S, GYRO_SCALED). B: той самий політ, залишено кожен четвертий кадр, тобто 500 Гц. У A лінія мотора рухається вправо зі збільшенням газу: 289 Гц при 30%, 398 Гц при 50%, 609 Гц при 90%. У B усе вище 250 Гц віддзеркалюється: 289 → 211 Гц, 398 → 102 Гц, 609 → приблизно 109 Гц. «Шум», частота якого знижується зі збільшенням газу, однозначно вказує на аліасинг.

bbdoctor вимірює вібрацію кожного мотора за фазою його обертання (eRPM), тому визначає, куди потрапляє віддзеркалена копія, і ця перевірка працює навіть при 1 кГц; спектр шуму й резонанси відновити не вдасться. Коли пікові RPM у лозі Betaflight перевищують 95% частоти Найквіста, звіт додає «Частота запису нижча за частоту моторів» і вказує правильний дільник як команду.

Вибір blackbox_sample_rate

Починаючи з 4.3, частота є дільником циклу PID: 1/1, 1/2, 1/4, 1/8 або 1/16; типове значення — 1/4. bbdoctor обирає найбільший дільник, за якого лишається щонайменше 2 кГц:

Цикл PIDТипове значення (1/4)ВстановитиРезультат
8 кГц2 кГц1/42 кГц
4 кГц1 кГц1/22 кГц
3,2 кГц (BMI270)800 Гц1/13,2 кГц

Частоту циклу знайдеш на вкладці Configuration. Не кожній збірці потрібно 2 кГц: bbdoctor просить підвищити частоту лише тоді, коли мотори обертаються швидше за частоту запису. У наших даних 7-дюймовий дрон 6S жодного разу не перевищив 315 Гц, тож йому вистачило б 1 кГц. 3–3,5-дюймовий дрон 4S зазвичай перевищує цю межу навіть при 1 кГц, та й не лише він: у чотирьох логах 1 кГц із дрона 6S на 4.5.1 мотори досягали 529–554 Гц. На BMI270 режим 1/1 найшвидше заповнює flash; якщо місця мало, 1/2 (1,6 кГц) покриває мотори приблизно до 760 Гц. 1/8 і 1/16 непридатні для аналізу (500 і 250 Гц для циклу 4 кГц), і перевірка конфігурації позначить їх.

Місце у flash

Розміри файлів у наших даних: при 1 кГц з усіма полями — приблизно 34 КБ/с без debug-полів і 41–43 КБ/с із увімкненим режимом debug; при 2 кГц — 58–70 КБ/с. Flash на 8 МБ вистачає приблизно на 3–4 хвилини при 1 кГц і на 2 хвилини при 2 кГц. На тому VX3.5 (debug_mode = GYRO_SCALED) flash на 8 МБ заповнилася до останнього байта за 195 секунд при 1 кГц, і запис зупинився посеред польоту. bbdoctor виявляє це (обірваний кінець або файл рівно 2, 4, 8 чи 16 МБ) і разом із порадою щодо частоти попереджає, що час запису скоротиться вдвічі.

Тож перед тестом очисть flash (Erase flash на вкладці Blackbox або flash_erase у CLI), виконай тестові польоти по 1–2 хвилини й вимкни непотрібні поля. На SD-карті місця достатньо, але повільна карта пропускає кадри: на 7-дюймовому дроні з Betaflight 4.6 при записі 2 кГц на SD було 182 пропуски. Використовуй якісну, щойно відформатовану карту; якщо пропуски не зникають, знизь частоту на один крок.

Налаштування Betaflight за версіями

4.5 і 2025.12+

Для циклу PID 4 кГц (для 8 кГц використовуй 1/4, для 3,2 кГц — 1/1):

set blackbox_mode = NORMAL
set blackbox_sample_rate = 1/2
set blackbox_disable_gyrounfilt = OFF
set blackbox_disable_rpm = OFF
set blackbox_disable_setpoint = OFF
set blackbox_disable_pids = OFF
set blackbox_disable_motors = OFF
set debug_mode = NONE
save

Лог Betaflight 2026.6.1 записувався з дільником 1/16 (247 Гц при циклі 4 кГц), сирий гіроскоп і RPM були вимкнені, хоча двонаправлений DShot працював. У звіті наведено обидві команди, щоб їх знову ввімкнути. У лозі 4.5.1 було вимкнено setpoint: bbdoctor відновлює його зі стіків і rates, оцінка PID виходить менш точною, і звіт про це повідомляє.

4.3–4.4

set blackbox_sample_rate = 1/2
set debug_mode = GYRO_SCALED
save

Обери дільник із таблиці вище. Полів нефільтрованого гіроскопа й RPM ще немає. Дані гіроскопа записуються через debug, а одночасно працює лише один режим debug, тож DSHOT_RPM_TELEMETRY використовувати не можна (bbdoctor усе одно не читає RPM із debug). Навіть якщо двонаправлений DShot працює, рекомендується перейти на 4.5: без RPM не можна визначити незбалансований мотор. Налаштування blackbox_disable_… доступні з 4.3 (rpm і gyrounfilt — з 4.5): перевір, що setpoint не вимкнено.

4.0–4.2

set blackbox_p_ratio = 64
set debug_mode = GYRO_SCALED
save

У цих версіях використовується blackbox_p_ratio. Частота приблизно дорівнює p_ratio × 31,25 Гц: значення 32 дає близько 1 кГц, 64 — близько 2 кГц, але не вище частоти циклу PID. Один лог 4.2.11 у наших даних записувався лише на 534 Гц і до того ж мав 36 пропусків.

Які поля можна вимкнути, а які — ні

blackbox_disable_gps, blackbox_disable_mag і blackbox_disable_alt (барометр) можна безпечно ввімкнути, якщо ти не аналізуєш навігацію. Залиш увімкненими:

RPM у лозі

RPM надходить через двонаправлений DShot: виконай set dshot_bidir = ON, save, якщо протокол DShot, а на ESC встановлено Bluejay, AM32 або BLHeli_32. Потім зніми пропелери, розкрути мотори повзунками на вкладці Motors і перевір, що RPM відображається, а кількість помилок близька до нуля. Перевір також motor_poles: частота мотора обчислюється з eRPM з урахуванням кількості полюсів. У більшості 5-дюймових моторів 14 полюсів, у деяких малих — 12; якщо вказати неправильно, частота кожного мотора в лозі буде неточною. Докладніше — у посібнику з RPM-фільтра й двонаправленого DShot.

INAV

set blackbox_rate_num = 1
set blackbox_rate_denom = 2
blackbox GYRO_RAW
blackbox MOTORS
save

В INAV частота запису дорівнює частці циклів blackbox_rate_num/blackbox_rate_denom. У INAV 8 і новіших типова частота циклу — 2 кГц (looptime = 500), тож 1/2 дає 1 кГц; у INAV 7 і старіших типова частота — 1 кГц (looptime = 1000), тож 1/2 дає 500 Гц. Для перевірки вібрацій і фільтрів потрібно від 500 Гц. Три логи INAV 7.1.2 з наших даних — 7- і 5-дюймові дрони — записувалися з частотою 1/32, або 58–60 Гц: вони показують лише баланс моторів та акумулятор. Лог INAV 8.0 з частотою 1/2 мав 995 Гц, на ньому добре видно шум і роботу фільтрів.

Докладніше — у посібнику з Blackbox в INAV.

Коротко про ArduPilot і PX4

ArduPilot. Без швидких полів у LOG_BITMASK (типово жодне не ввімкнено) ArduCopter записує гіроскоп на 25 Гц — так було в усіх десяти логах ArduCopter з наших даних, версії від 4.1 до 4.8-dev. Для аналізу встанови біти 0 (ATTITUDE_FAST) і 19 (IMU_RAW) у LOG_BITMASK, а на версії 4.5+ також INS_RAW_LOG_OPT = 9, щоб отримати гіроскоп до й після фільтрації. RPM надходить із телеметрії ESC або двонаправленого DShot (SERVO_BLH_BDMASK). Використовуй файл .bin із SD-карти (APM/LOGS), а не .tlog. Для PID ArduCopter надійніше використовувати вбудований AUTOTUNE; лог потрібен для аналізу вібрацій і фільтрів. Див. посібник з аналізу логів ArduPilot.

PX4. Додай біти 4 (High rate) і 8 (Raw FIFO gyro) до SDLOG_PROFILE: якщо типове значення 1, встанови 273 через param set SDLOG_PROFILE 273 у MAVLink Console в QGroundControl, а потім перезавантаж контролер: профіль зчитується під час запуску. Файл .ulg знайдеш у Analyze Tools → Log Download. Див. посібник із PX4 ULog.

Тестовий політ

Під час фрістайлу потрібні події трапляються випадково; тестовий політ на 1,5–2 хвилини допоможе цілеспрямовано зібрати по 6–8 кожної:

  1. Перед зльотом. Нові пропелери, заряджений акумулятор, очищена flash, перемикач BLACKBOX увімкнено, якщо використовуєш його.
  2. Режим Acro. Angle і Horizon не дадуть перевірити step response і відскок.
  3. 30 секунд висіння й плавного польоту, а потім, якщо є місце, повільно збільшуй газ від висіння до 100% протягом 5 секунд, щоб побудувати карту шуму залежно від газу.
  4. 6–8 фліпів або ролів на кожній осі, а також обертання по yaw. Поверни стік у центр менш ніж за 0,2 с і тримай його там пів секунди. Зараховуються рухи від 150 град/с по roll і pitch та від 120 град/с по yaw; повільне повернення в центр не враховується.
  5. 6–8 панчів із висіння (приблизно 30% газу, завжди нижче 70%): переміщуй газ більш ніж на чверть ходу за 0,2 с. Не чіпай roll і pitch; якщо setpoint перевищує 80 град/с, панч не зараховується.
  6. 6–8 прямих скидань газу: набери висоту, скинь газ до нуля й тримай стіки по центру приблизно секунду. Скидання зараховується, якщо газ був вище 35% і впав більш ніж на 25% за 0,15 с. Одразу після нього не роби фліпів: в одному лозі 2 кГц 12 із 15 скидань одразу переходили у фліп або рол, тож для аналізу пропвошу залишилося лише 3.
  7. Посадка. Сідай м'яко, не скидай газ безпосередньо над землею: скидання, що завершилося ударом, не враховується для перевірки пропвошу.

На великому дроні фліпи не потрібні: достатньо коротких і різких нахилів стіком на безпечній висоті. Самої тривалості польоту недостатньо: за п'ять хвилин звичайного польоту на 7-дюймовому дроні було лише 5 скидань газу (одне чисте), 1 панч і 1 різка зупинка roll.

Setpoint і газ протягом усього польоту з позначеними виявленими скиданнями газу, панчами й різкими зупинками стіків
Політ на 195 секунд на 3,5-дюймовому дроні (Betaflight 4.5.2) у поданні bbdoctor. Зверху: setpoint roll (синій) і pitch (помаранчевий); риски вгорі позначають враховані зупинки стіків для аналізу відскоку: roll — 12, pitch — 6, yaw — 26 (зелені). Знизу: газ. Червоні трикутники: 63 скидання, 38 чистих, 24 з наступним фліпом або ролом, одне відкинуте через удар або посадку. Зелені трикутники: 15 врахованих панчів із 48 різких збільшень газу; під час решти рухалися стіки. Перші приблизно 28 секунд — рівне висіння.

Як перенести лог

У Betaflight та INAV скористайся Save flash to file на вкладці Blackbox або режимом Mass Storage, щоб контролер підключився як диск. Якщо записано на SD-карту, скопіюй файл. Файли INAV часто мають розширення .TXT, ArduPilot — .bin, PX4 — .ulg.

Один файл може містити багато польотів — по одному на кожен армінг; серед наших є файл Betaflight 2026.6 із 66 польотами. Типово bbdoctor аналізує найдовший (у цьому файлі — номер 58), але у звіті можна вибрати будь-який інший.

Поширені помилки

СимптомПричинаВиправлення
Порожній лог або в ньому немає польотуперемикач BLACKBOX вимкнений, blackbox_device = NONE, flash уже заповненаперевір Modes і Blackbox, очисть flash
Лог зупиняється посеред польотуflash заповнена: розмір файла рівно 8 або 16 МБочищай перед польотом, літай по 1–2 хвилини
«Пропуски в записі»повільна SD-карта або зависока частотаякісна карта, інакше знизь частоту на один крок
«Setpoint не записано в лог»blackbox_disable_setpoint = ONset blackbox_disable_setpoint = OFF
Немає висновку щодо PIDпонад половину польоту проведено в Angle/Horizonтестовий політ у Acro
Лог INAV на 60 Гцзавелике значення blackbox_rate_denom1/2 для тестового польоту
INAV: «немає команд моторів»поле MOTORS вимкненеblackbox MOTORS
Немає RPMдвонаправлений DShot вимкнений, Betaflight старіший за 4.5 або blackbox_disable_rpm = ONувімкни двонаправлений DShot, онови прошивку, знову ввімкни поле
Піки спектра, які «виправляються» зміною фільтрамотори швидші за ~475 Гц у лозі 1 кГц: віддзеркалені частотивстанови дільник для ~2 кГц (1/2 при циклі 4 кГц) і запиши новий лог

Автоматично перевір лог

Завантаж файл у bbdoctor — це безкоштовно й без реєстрації. Спершу сервіс перевіряє сам лог: тривалість польоту, пропуски й втрачені кадри, обірваний кінець, сирий гіроскоп, RPM і setpoint, частоту запису щодо пікової частоти моторів і час у режимі стабілізації. Про всі проблеми буде повідомлено з командами для твоєї версії прошивки. Див. приклад звіту.

Налаштування можна перевірити до польоту: встав свій diff all у перевірку конфігурації. Вона позначить вимкнений Blackbox, дільник 1/8 або 1/16, вимкнені поля, відсутній GYRO_SCALED у версіях 4.0–4.4, а в INAV — низьку частоту або відсутній GYRO_RAW. Про готовий лог читай у посібнику як читати лог Blackbox.

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

Яку частоту запису Blackbox обрати?

Приблизно 2 кГц: blackbox_sample_rate = 1/4 для циклу PID 8 кГц, 1/2 для 4 кГц і 1/1 для 3,2 кГц (гіроскоп BMI270). Для великих квадрокоптерів, у яких мотори не розкручуються вище приблизно 450 Гц, достатньо 1 кГц. Але на 3–3,5-дюймовому дроні 4S і багатьох збірках 6S спектр уже на лозі 1 кГц показує хибні піки.

Чому мій лог Blackbox порожній?

Зазвичай режим BLACKBOX призначено на вимкнений перемикач, пам'ять flash уже заповнена або blackbox_device має значення NONE. Перевір вкладки Modes і Blackbox, перед польотом очисть flash і літай щонайменше 30–60 секунд.

Чи потрібен debug_mode у Betaflight 4.5 або 2025.12?

Ні. Починаючи з 4.5, нефільтрований гіроскоп і RPM моторів мають окремі поля логу, а з debug_mode = NONE поля debug взагалі не записуються. GYRO_SCALED потрібен лише у версіях 4.0–4.4.

На скільки вистачає вбудованої flash-пам'яті за 2 кГц?

У наших логах 1 кГц з усіма полями займає 34 КБ/с без debug-полів і 41–43 КБ/с із ними, а 2 кГц — 58–70 КБ/с. Пам'ять на 8 МБ заповнюється приблизно за 3–4 хвилини при 1 кГц і за 2 хвилини при 2 кГц; 16 МБ вистачає вдвічі довше.

Оновлено:

Інші гайди