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

Настройка blackbox: лог, по которому видно всё

Blackbox пишет гироскоп до и после фильтров, стики и setpoint, P, I, D и feedforward, команды моторам, обороты, напряжение и ток. Проблема в том, что лог «на настройках из коробки» часто почти ничего не показывает. Вот что попадалось нам в реальных логах: 3,5-дюймовик на Betaflight 4.5.2 пишет 1 кГц, а моторы у него крутятся до 644 Гц; лог Betaflight 2026.6 записан с частотой 247 Гц, без сырого гироскопа и без оборотов; 7-дюймовик на 4.6 пишет 2 кГц на SD-карту, но в записи 182 разрыва; лог INAV 7.1 записан с частотой 58 Гц, и по нему вибрации не оценить вообще.

Ниже — от требований каждой проверки bbdoctor к командам для твоей прошивки и к тестовому полёту.

Что нужно каждой проверке

Пороги в таблице взяты прямо из кода анализатора. Ниже порога проверка либо молчит, либо выдаёт вывод с пометкой «мало данных».

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

Общие условия: если в воздухе меньше 10 секунд, выводы по настройке понижаются до «инфо» и выходят без команд CLI, а отскок и панчи не считаются совсем. Если больше половины полёта прошло в ANGLE или HORIZON, отклик PID и отскок не оцениваются: стик там задаёт угол, а не скорость вращения.

Частота записи и алиасинг

Почему 1 кГц врёт на маленьких квадах

Лог, записанный с частотой N Гц, видит колебания только до N/2 (частота Найквиста). Всё, что выше, не пропадает, а отражается от этой границы, как от зеркала. Мотор на 644 Гц в логе 1000 Гц виден как 1000 − 644 = 356 Гц. В спектре появляется аккуратный пик там, где ничего нет, и по нему легко поставить нотч или занизить фильтр не на той частоте.

В трёх логах 3,5-дюймовика VX3.5 на Betaflight 4.5.2 (PID-цикл 4 кГц, запись 1/4 = 1 кГц) моторы раскручивались до 583, 605 и 644 Гц, то есть выше 500 Гц каждый раз. На рисунке тот же эффект на другом квадрике. Мы взяли лог, записанный на 2 кГц, и оставили в нём каждый четвёртый кадр. Ровно так работает blackbox_sample_rate: он просто пропускает кадры и ничего перед этим не фильтрует.

Карта шума сырого гироскопа по газу: лог 2000 Гц и тот же полёт при 500 Гц, где линия моторов отражается от 250 Гц
Сырой гироскоп по крену в зависимости от газа. 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 кГц. Спектр шума и частоты резонансов так не спасти. Если в логе 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 кГц, как правило, выходят за границу, и не только они: в четырёх логах 6S-квадрика на 4.5.1 при 1 кГц моторы доходили до 529–554 Гц. На BMI270 запись 1/1 расходует флешку быстрее всего; если места мало, 1/2 (1,6 кГц) видит моторы до ~760 Гц. Делители 1/8 и 1/16 для разбора не годятся. Проверка конфига отдельно ругается на них: при цикле 4 кГц это 500 и 250 Гц.

Флешка: сколько влезет

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

Отсюда правила: стирай флешку перед тестом (кнопка Erase flash на вкладке Blackbox или команда flash_erase в CLI), летай короткие тестовые паки по 1–2 минуты, выключи ненужные поля. С SD-картой места хватает, но медленная карта теряет кадры: в логе 7-дюймовика на 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 кГц), без сырого гироскопа и оборотов, хотя bidirectional DShot работал. Отчёт выдал две команды: blackbox_disable_gyrounfilt = OFF и blackbox_disable_rpm = OFF. В логе на 4.5.1 было выключено поле setpoint: bbdoctor восстанавливает его по стикам и рейтам, но отклик PID оценивает грубее и предупреждает об этом.

4.3–4.4

set blackbox_sample_rate = 1/2
set debug_mode = GYRO_SCALED
save

Делитель — по таблице выше. Отдельных полей для сырого гироскопа и оборотов здесь ещё нет. Гироскоп идёт через debug, а debug-режим работает один: обороты через DSHOT_RPM_TELEMETRY уже не записать, да bbdoctor их из debug и не читает. Поэтому даже с работающим bidirectional DShot он посоветует обновиться до 4.5, иначе не найти мотор с дисбалансом. Настройки 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 разрывов.

Какие поля можно выключить

Если не разбираешь навигацию, смело ставь ON для blackbox_disable_gps, blackbox_disable_mag и blackbox_disable_alt (барометр): лог станет меньше. Не трогай:

Обороты моторов в логе

Обороты в лог даёт bidirectional DShot: set dshot_bidir = ON, save. Нужны протокол DShot и ESC на Bluejay, AM32 или BLHeli_32. После этого сними пропы, на вкладке Motors раскрути моторы ползунками и проверь, что обороты показываются, а процент ошибок около нуля. Проверь и motor_poles: из eRPM частота мотора считается через число полюсов. У большинства моторов 5" их 14, у некоторых мелких — 12. С неверным значением все частоты моторов в логе съедут. Подробнее — в гайде про RPM-фильтр и bidirectional 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. Для разбора включи в LOG_BITMASK бит 0 (ATTITUDE_FAST) и бит 19 (IMU_RAW), а с 4.5 ещё INS_RAW_LOG_OPT = 9 (гироскоп до и после фильтров). Обороты дают ESC-телеметрия или bidirectional DShot (SERVO_BLH_BDMASK). Нужен бинарный .bin с SD-карты (APM/LOGS), а не .tlog. Для настройки PID в ArduCopter надёжнее встроенный AUTOTUNE, лог нужен, чтобы понять вибрации и фильтры. Подробно — в разборе логов ArduPilot.

PX4. В SDLOG_PROFILE добавь биты 4 (High rate) и 8 (Raw FIFO gyro): из значения по умолчанию 1 получается 273. В MAVLink Console в QGroundControl это param set SDLOG_PROFILE 273, затем перезагрузи полётник: профиль читается при старте. Лог .ulg скачивается через Analyze Tools → Log Download. Подробно — в гайде про ULog PX4.

Тестовый полёт: сценарий

Обычный фристайл даёт часть событий случайно, а тестовый пак собирает их нарочно, по 6–8 на каждую проверку. Сценарий на 1,5–2 минуты:

  1. Перед взлётом. Свежие пропы, заряженный аккумулятор, стёртая флешка. Проверь, что тумблер BLACKBOX (если он назначен) включён.
  2. Режим Acro. В ANGLE и HORIZON отклик PID и отскок не оцениваются.
  3. 30 секунд висения и плавного полёта, затем, если место позволяет, медленно, секунд за 5, подними газ от висения до 100%: из этого строится карта шума по газу.
  4. 6–8 флипов или роллов по каждой оси, плюс пируэты по рысканью. Стик резко возвращай в центр (быстрее 0,2 с) и держи там полсекунды. Засчитываются движения от 150 °/с по крену и тангажу и от 120 °/с по рысканью. Плавный возврат стика проверка отбрасывает.
  5. 6–8 панчей с висения (газ около 30%, обязательно ниже 70%): газ вверх резко, больше чем на четверть хода за 0,2 с. Крен и тангаж в это время не трогай: если setpoint превысит 80 °/с, панч не засчитается.
  6. 6–8 прямых сбросов газа: разгон вверх, газ в ноль, стики в центре около секунды. Сброс засчитывается, если газ был выше 35% и упал больше чем на 25% за 0,15 с. Никаких флипов сразу после: в одном логе на 2 кГц за 12 из 15 сбросов сразу шёл флип или ролл, и для пропвоша осталось всего 3 сброса.
  7. Посадка. Сядь мягко, без сброса газа в ноль у самой земли: если сразу после сброса удар о землю, этот сброс в оценку пропвоша не попадёт.

Большому аппарату флипы не нужны: хватит коротких резких наклонов стиком на безопасной высоте. Длинный полёт сам по себе ничего не гарантирует. За 5 минут обычного полёта 7-дюймовика нашлось 5 сбросов газа (чистый из них один), 1 панч и 1 резкая остановка по крену.

Setpoint и газ за весь полёт с отмеченными сбросами газа, панчами и резкими остановками стика
Полёт 3,5-дюймовика на 195 с (Betaflight 4.5.2) глазами bbdoctor. Сверху setpoint по крену (синий) и тангажу (оранжевый). Штрихи над графиком — засчитанные резкие остановки стика: крен 12, тангаж 6, рысканье 26 (зелёные). Снизу газ. Красные треугольники — 63 сброса газа: 38 чистых, после 24 сразу шёл флип или ролл, один отброшен как удар или посадка. Зелёные треугольники — 15 засчитанных панчей из 48 резких прибавок газа, в остальных двигались стики. Первые ~28 с — ровное висение.

Как достать лог

В Betaflight и INAV: вкладка Blackbox → Save flash to file, или режим Mass Storage, когда контроллер определяется как диск. С SD-картой проще: вынул и скопировал. У INAV файлы часто с расширением .TXT, у ArduPilot — .bin, у PX4 — .ulg.

Один файл может содержать много полётов, по одному на каждый арм. В нашем наборе есть файл Betaflight 2026.6 с 66 полётами. bbdoctor по умолчанию берёт самый длинный (там это был №58), а в отчёте можно выбрать любой другой полёт из файла.

Частые ошибки

СимптомПричинаЧто сделать
Лог пустой или в нём нет полётатумблер BLACKBOX выключен, blackbox_device = NONE, флешка уже полнапроверь Modes и Blackbox, сотри флешку
Лог обрывается посреди полётазаполнилась флешка: файл ровно 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: «нет команд моторам»выключено поле MOTORSblackbox MOTORS
Нет оборотовbidirectional DShot выключен, Betaflight до 4.5 или blackbox_disable_rpm = ONвключить bidirectional DShot, обновиться, вернуть поле
Пики в спектре, которые «не лечатся» фильтрамимоторы быстрее ~475 Гц при записи 1 кГц: отражённые частотыделитель на ~2 кГц (1/2 при цикле 4 кГц) и новый лог

Проверь лог автоматически

Загрузи файл на bbdoctor. Это бесплатно и без регистрации. До всякой диагностики сервис проверяет сам лог: время в воздухе, разрывы и потерянные кадры, обрыв записи, сырой гироскоп, обороты и setpoint, частоту записи против оборотов моторов и долю самовыравнивания. Чего не хватает, отчёт называет прямо и даёт команды для твоей прошивки и версии. Как выглядит отчёт, видно в примере.

Настройки можно проверить ещё до полёта: вставь diff all на странице проверки конфига. Она отметит выключенный blackbox, делитель 1/8 или 1/16, выключенные поля, отсутствие GYRO_SCALED на 4.0–4.4, а в INAV — низкую частоту и выключенный GYRO_RAW. Что делать с готовым логом — в гайде как читать blackbox лог.

Частые вопросы

Какую частоту записи blackbox ставить?

Около 2 кГц: при PID-цикле 8 кГц это blackbox_sample_rate = 1/4, при 4 кГц — 1/2, при 3,2 кГц (гироскоп BMI270) — 1/1. Крупным квадам с моторами до ~450 Гц хватает и 1 кГц, а у 3–3,5 дюйма на 4S и многих 6S-сборок при 1 кГц в спектре уже появляются ложные пики.

Почему blackbox лог пустой или не записался?

Чаще всего на тумблер назначен режим BLACKBOX и он был выключен, флешка уже заполнена или blackbox_device = NONE. Проверь вкладку Modes и Blackbox, сотри флешку перед полётом и летай хотя бы 30–60 секунд.

Нужен ли debug_mode в Betaflight 4.5 и 2025.12?

Нет. С 4.5 нефильтрованный гироскоп и обороты моторов пишутся отдельными полями, а при debug_mode = NONE debug-поля в лог вообще не попадают. GYRO_SCALED нужен только в 4.0–4.4.

Сколько минут влезает во флешку при 2 кГц?

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

Обновлено:

Другие гайды