Как читать blackbox лог: от графиков к диагнозу
Открыл лог в Blackbox Explorer, а там три десятка линий. Explorer честно показывает всё, что записал полётник, но выводы делаешь сам. Ниже — семь шагов ручного разбора и один реальный лог: каждая находка bbdoctor с числами и как проверить её глазами, и когда автоматика обязана сказать «не знаю».
Чем читать лог: инструменты
| Инструмент | Что делает за тебя | Что остаётся тебе |
|---|---|---|
| Blackbox Viewer (Blackbox Explorer) | Все поля на шкале времени, синхронизация с видео, анализатор спектра: PSD, тепловые карты по газу и по оборотам, сравнение спектров через импорт CSV, экспорт в CSV. С релиза 2026.6 это вкладка Betaflight App; отдельный blackbox.betaflight.com заморожен. | Найти нужные моменты, решить, что норма, и выбрать параметр. |
| INAV Blackbox Explorer | То же для логов INAV. | То же; обороты моторов INAV не пишет. |
| PIDtoolbox | Спектрограммы по газу, step response, несколько логов рядом. | Интерпретация и выбор параметра. |
| PID-Analyzer (Plasmatree) | Скрипт на Python: step response деконволюцией, шум по газу. | Интерпретация; от 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 шагов
Поля называю так, как они записаны в логе (так их видно в CSV и в настройке графиков). Индекс 0 — roll, 1 — pitch, 2 — yaw. Анализатор спектра включается в меню View → Analyser (клавиша A), затем выбираешь линию в легенде.
- Шкала времени и режимы. В файле бывает несколько полётов, по одному на арм. Режим смотри во flightModeFlags: в ANGLE и HORIZON отклик PID читается хуже, чем в ACRO. По rcCommand[3] найди висение, сбросы газа и панчи. На кусках с разрывами записи спектрам не верь.
- Гироскоп против setpoint на флипах. gyroADC[0] и setpoint[0] на одном графике. Гироскоп проскакивает цель — перерегулирование. Качается после остановки стика — мало демпфирования или отскок. Плетётся на 20–30 мс позади — вялый отклик. Добавь axisP[0], axisD[0], axisF[0]: видно, какой член толкает квадрик.
- Моторы. motor[0..3]. 100% на панче в полный газ — нормально, короткое касание 100% на резком флипе тоже. Упираются подолгу на манёврах при среднем газе — нет запаса тяги. Мотор лежит на холостом после сброса газа — частая причина пропвоша. Одна пара в висении стабильно выше другой — центр тяжести.
- Спектр до и после фильтров. gyroUnfilt против gyroADC. Всё выше ~80 Гц — шум, а не полёт. Что осталось после фильтров, идёт в PID и греет моторы.
- Частота против газа. Диагональ, уезжающая вправо с газом, — моторы и пропы. Вертикальная полоса при любом газе — рама, стек или антенна (рис. 1).
- I-term в висении. axisI[0] и axisI[1] в норме гуляют около нуля. Держит одно значение весь полёт — компенсирует перекос: центр тяжести, кривой или уставший мотор.
- Напряжение и ток. vbatLatest и amperageLatest: просадка на банку на пиках тока, напряжение в конце. Скачок напряжения, делённый на скачок тока, — грубая оценка внутреннего сопротивления.

Шаги 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-term по pitch: медиана 45, а не около нуля, контроллер весь полёт доливает тягу назад. Обычно батарея или камера сдвинуты назад; другой вариант — много быстрого полёта вперёд, тогда в спокойном висении разницы почти нет. PID тут ни при чём: двигай батарею, пока квадрик не повиснет ровно на пальцах под центром рамы.
Roll: перерегулирование 36%, и виноват feedforward
Step response по roll — 36% (90%-интервал 29–44%), по 165 пригодным секундным окнам из 372 с движением стика (окна перекрываются); половину заданной скорости квадрик набирает за 8 мс. Нижняя граница выше 15% — это находка. Но совет не «опусти P» и не «подними D». На резких движениях стика feedforward делает 60% работы (FF против P), а гироскоп в среднем идёт на 3 мс впереди setpoint. Раз квадрик обгоняет команду, его тащит 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 при следующем сохранении перезаписал бы ручные значения.

Почему глазами 36% не увидишь: на этом движении пик всего на 22 °/с (9%) выше цели. Step response — ответ на идеальную мгновенную ступеньку, вычисленный деконволюцией по 165 окнам, а реальный стик — рампа около 100 мс. Зато на рампе видно то же самое в другой форме: гироскоп обгоняет setpoint, а всплески FF почти впятеро больше P. Подробнее — настройка PID по логу.
Сырой шум 4.1 °/с: механика, а не фильтры
Шум сырого гироскопа выше 80 Гц: roll 4.1, pitch 2.4, yaw 2.5 °/с при границе «внимания» 4 °/с — едва за чертой. После фильтров 0.53 °/с при задержке ~1.4 мс, и отчёт пишет «Фильтры в норме». Значит, фильтры не трогаешь, а проверяешь пропы, подшипники и подвес стека. Вибрация 1× по моторам ровная: M1 1.1, M2 0.5, M3 1.8, M4 1.9 °/с; обороты при одинаковой команде расходятся не больше чем на 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, рывков больше 5% — 34 и 28 в секунду. Полезная часть FF ниже 12 Гц — 1.5 и 1.2%. На неподвижных стиках — 0.40%, значит, источник в ступеньках стика. Пульт 494 Гц, сглаживание 185 Гц. ВЧ-шум PID-выхода на 89% даёт FF, на 10% — D. Поэтому D и фильтры D-term ради него не трогай, это только добавит задержку. Сначала снизить FF, а сглаживание — следующим полётом:
set feedforward_averaging = 2_POINT set feedforward_smooth_factor = 65 save
Буст D почти не включается
Настроено d_min_roll = 30 и d_roll = 45, буст до ×1.50. bbdoctor меряет реальный коэффициент по записанному D-term: наклон axisD к производной гироскопа в полосе 8–40 Гц, блоками по 0.25 с, без вклада TPA. На самых резких движениях D дорастает лишь до ×1.06, по pitch — до ×1.04. Летаешь ты на d_min, поэтому демпфирование меняют через базовый D (колонка Derivative), а не через D Max. В 2025.12 имена сменили под интерфейс: базовый D — d_roll, потолок — d_max_roll; таблица по версиям — в гайде настройка PID.
Пропвош 1.1 °/с: в норме
Сброс газа — падение с уровня выше 35% больше чем на 25% хода за 0.15 с. Их 46, два сразу перешли во флип, и bbdoctor их выкидывает: движение стика даёт те же 15–80 Гц. По 44 чистым сбросам ошибка gyro − setpoint в полосе 15–80 Гц через 0.08–0.6 с после сброса — 1.1 °/с (RMS), основная частота ~20 Гц, норма — до 4. Трогать нечего; если пропвош всё же мешает — см. гайд пропвош.
Батарея: 3.23 В на банку при 72 А
Старт с 3.84 В на банку, не с полной. Устойчивый минимум 3.23 В (дольше 0.5 с), пик тока 72 А, в конце 3.66 В, ~248 мАч. Внутреннее сопротивление ≈ 7 мОм на банку — оценка по 182 участкам с резкой сменой тока, вместе с проводами. Банка на пределе — «внимание».
Что ещё
- Задержка setpoint → вращение: roll 4.1 мс, yaw 4.6 мс при норме с FF 4–12 мс, от пульта до setpoint ещё 1.3 мс; по pitch надёжного значения нет.
- 34 панча: отклонение за 0.4 с — pitch 2.5°, roll 0.5° при норме до 3°.
- Резких остановок стика мало (roll 2, pitch 1 при нужных 6), отскок не проверен.
Как проверить каждую находку в Explorer
| Находка | Что вывести | Что должен увидеть |
|---|---|---|
| Центр тяжести | motor[0..3], axisI[1] | В висении M1 и M3 (задние в раскладке Betaflight) выше M2 и M4, axisI[1] около 45. |
| Перелёт от FF | setpoint[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 в поле. |
| Дрожание FF | axisF[0], setpoint[0] | На каждой ступеньке setpoint — короткий всплеск axisF; на неподвижном стике почти ноль. |
| Пропвош | rcCommand[3], gyroADC[0..1] | Качание ~20 Гц через 0.1–0.6 с после сброса; при 1 °/с его почти не видно. |
| Просадка | vbatLatest, amperageLatest | Минимум около 12.9 В на пиках до 72 А. |
Почему иногда «не хватает данных»
Когда данных мало, автоматика обязана промолчать, иначе она уверенно советует ерунду. Пороги bbdoctor:
| Проверка | Минимум | Если меньше |
|---|---|---|
| Весь лог | 10 с в воздухе | Всё понижается до «инфо», команд нет |
| Step response по оси | 10 пригодных окон, не меньше четверти всех | «Мало данных для отклика» |
| «Критично» по перелёту, глубокий разбор PID | 50 окон на ось | Не выше «внимания», часть проверок молчит |
| Отскок после флипов | 6 резких остановок на ось | Не проверяется |
| Клевок на панчах | 6 панчей без движения стиков | Не проверяется |
| Пропвош | 3 чистых сброса, для «внимания» — 5 | Без оценки; при 3–4 — только «инфо» |
Пример: лог Betaflight 4.2.5 (2 кГц, 4S, 215 с в воздухе): 15 сбросов газа, но 12 сразу переходят во флип или ролл. Усреднить все 15 — «пропвош» 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% целиком оказались погрешностью: «перерегулирования нет».
Как понять, можно ли верить числам
- Интервалы. Отклик считается по каждому секундному окну, перелёт берётся с медианной кривой. 90%-интервал — бутстрэп: 200 раз случайно пересобрать набор окон и пересчитать кривую. «36% (29–44%)» значит: даже по нижней оценке больше 15%.
- Вердикты. Нижняя граница выше 15% — находка с командами, выше 35% при 50+ окнах — «критично». Оценка до 15% и верх до 25% — норма. Узкий интервал чуть выше нормы — «на границе», менять нечего (в том логе 4.5.1 так вышел roll: 17%, 15–24%). Широкий — «оценка неуверенная», нужны ещё 5–6 манёвров.
- Перекрёстные проверки. Если моторы шумят или шум идёт через D, поднять D отчёт не предложит. Когда FF делает от 45% работы, а P к нему почти ничего не добавляет, режут FF, а не P.
- Метод не рисует перелёт сам. Жёсткая отсечка частот при деконволюции (25 Гц, как в PID-Analyzer) даёт около 10% ложного перелёта (эффект Гиббса). bbdoctor сглаживает отклик гауссовым ядром 30 Гц; на синтетических логах чистая задержка даёт 0%, затухание ζ = 0.5 — 15% при истинных 16%.
Порядок работы: одно изменение за полёт
- Запиши 1–2 минуты в ACRO: висение, плавные развороты, 5–6 сбросов газа, по 6–8 флипов и роллов с резким возвратом стика в центр, 6–8 панчей без движения стиков.
- Загрузи файл в онлайн-анализ blackbox лога. Начинай с «критично» и механики; PID на перекошенной раме и битых пропах подбирать бесполезно.
- Одно изменение — один полёт. Для этого лога: батарея на место, потом FF, потом сглаживание FF. blackbox_sample_rate меняй с любым шагом: на полёт он не влияет. Настраиваешь с батареей на столе — пропы сняты.
- Те же пропы, похожая банка с похожим зарядом, тот же стиль полёта.
- Сравни кнопкой «Сравнить анализы» под историей. Если 90%-интервалы до и после пересекаются, это «без изменений»; полёты разного стиля (средний газ отличается на 10% хода и больше или длительность — втрое) помечаются.
Ограничения
- INAV и EmuFlight не пишут обороты каждого мотора, так что вибрации по моторам и сравнения оборотов для них нет. См. INAV blackbox.
- ArduPilot и PX4 по умолчанию пишут гироскоп редко, а спектр, step response и пропвош считаются от 200 Гц записи. ArduPilot: бит IMU_RAW (19) в LOG_BITMASK и INS_RAW_LOG_OPT = 9 (с 4.5); PX4: в SDLOG_PROFILE биты 4 (High rate) и 8 (Raw FIFO gyro). Подробнее — ArduPilot и PX4.
- Вертолёты Rotorflight — без проверок баланса моторов, без «критично», отклик PID только для сведения.
- Логи ArduPlane, Rover, Sub и самолётов PX4 не принимаются; лог симулятора (SITL) идёт без проверок железа и батареи.
- Пороги подобраны на FPV-квадриках Betaflight. Для больших дронов они ориентировочные — сравнивай с прошлыми логами того же аппарата.
- Разрывы записи сами по себе не мешают: анализ идёт по непрерывным кускам. Но если лог повреждён (отброшено от 10% кадров или битые кадры с частыми разрывами), находки по PID, шуму и резонансам идут как «инфо» без команд.
Дальше — по конкретным проблемам: шум и фильтры, пропвош, PID по step response.
Частые вопросы
Чем открыть blackbox лог Betaflight?
В Blackbox Viewer: с релиза 2026.6 это вкладка Betaflight App (app.betaflight.com), а отдельный Blackbox Explorer заморожен. Для INAV есть свой INAV Blackbox Explorer. Если нужен готовый разбор с числами и командами CLI, загрузи файл в bbdoctor.
Какие файлы логов понимает bbdoctor?
Blackbox Betaflight, EmuFlight, INAV и Rotorflight (.bbl, .bfl, .txt), ArduPilot .bin и PX4 .ulg. Формат определяется по содержимому. Текстовый .log ArduPilot и .tlog не подходят, логи ArduPlane, Rover и самолётов PX4 тоже.
Можно ли доверять автоматическому анализу?
Каждая оценка идёт с 90%-интервалом, а ниже минимума данных вывода просто нет. Погрешность метода вычитается, советы сверяются между собой. Но это подсказка, а не приговор: меняй по одному параметру и проверяй следующим логом.
Сохраняется ли мой лог?
Лог хранится только для пересчёта анализа и удаляется автоматически; сроки хранения лога и отчёта указаны в политике конфиденциальности. Ссылку на отчёт ты можешь отправить кому захочешь.
Обновлено: