bbdoctor
Diagnóstico de drones pelo log: Betaflight, INAV, ArduPilot, PX4
RUENESPTUA

Como ler um log de Blackbox: das linhas tortas ao diagnóstico

Você abre um log no Blackbox Explorer e encontra trinta traços. O Explorer mostra tudo que a controladora de voo registrou; as conclusões ficam por sua conta. A seguir: uma leitura manual em sete etapas e, depois, um log real com cada achado do bbdoctor, seus números e como conferi-los visualmente, além dos casos em que a automação precisa dizer "não sei".

Ferramentas para ler um log

FerramentaO que ela faz por vocêO que fica por sua conta
Blackbox Viewer (Blackbox Explorer)Cronologia de cada campo, sincronização de vídeo, analisador de espectro (PSD, mapas de calor de acelerador e RPM, comparação de espectros por importação de CSV), exportação CSV. Desde a versão 2026.6, é uma aba do Betaflight App; o blackbox.betaflight.com independente não recebe atualizações.Encontrar os momentos, avaliar o que é normal e escolher o parâmetro.
INAV Blackbox ExplorerO mesmo para logs do INAV.O mesmo; o INAV não registra RPM dos motores.
PIDtoolboxEspectrogramas do acelerador, resposta ao degrau, comparação lado a lado de vários logs.Interpretação e escolha do parâmetro.
PID-Analyzer (Plasmatree)Script Python: resposta ao degrau por deconvolução, ruído em relação ao acelerador.Interpretação; ele não diz se o overshoot vem de FF ou de P/D.
blackbox_decodeConverte o log em CSV.Todo o resto, nos seus próprios scripts.
Mission Planner, UAV Log Viewer (ArduPilot)Gráficos de mensagens .bin: RATE, PIDR/PIDP, VIBE, BAT, RCOU; FFT na ferramenta web Filter Review.Conclusões e limites de VIBE.
PX4 Flight ReviewGráficos online de .ulg: acompanhamento de rate, saídas dos motores, espectrogramas.Conclusões e parâmetros.
bbdoctorAchados "o que está errado → o que fazer", com números, intervalos de 90% e comandos para Betaflight, EmuFlight, INAV, Rotorflight, ArduPilot e PX4.Não mostra a sequência quadro a quadro nem vídeo (para isso, use o Explorer). Você decide se aplica a recomendação.

As ferramentas se complementam: o Explorer examina um segundo do voo; a automação indica qual segundo olhar e o que alterar.

Como ler um log manualmente em 7 etapas

Nomes dos campos conforme são armazenados no log. O índice 0 é roll, 1 é pitch, 2 é yaw. No Explorer, View → Analyser (ou a tecla A) abre o analisador de espectro; depois clique em um traço na legenda.

  1. Cronologia e modos. Um arquivo pode conter vários voos, um por armação. Confira flightModeFlags: a resposta do PID parece muito pior em ANGLE e HORIZON do que em ACRO. rcCommand[3] mostra hovers, cortes de acelerador e punch-outs. Não confie nos espectros em trechos com falhas de gravação.
  2. Giroscópio e setpoint nos flips. Veja gyroADC[0] e setpoint[0] juntos. Se o giroscópio passa do alvo, há overshoot. Balanço depois que o stick para: pouco amortecimento ou bounce-back. Se fica 20–30 ms atrás: resposta lenta. Adicione axisP[0], axisD[0], axisF[0] para ver qual termo impulsiona o drone.
  3. Motores. motor[0..3]. Chegar a 100% em um punch com acelerador no máximo ou por um instante em um flip rápido é normal; ficar no limite durante manobras com acelerador médio significa falta de margem de empuxo. Um motor parado em idle depois de um corte de acelerador é uma causa comum de propwash. Se um par fica acima do outro durante todo o hover, isso aponta para o centro de gravidade.
  4. Espectro antes e depois dos filtros. Compare gyroUnfilt com gyroADC. Acima de cerca de 80 Hz é ruído, não movimento de voo. O que passa pelos filtros chega aos PIDs e aquece os motores.
  5. Frequência em relação ao acelerador. Uma linha diagonal que se desloca para a direita junto com o acelerador vem dos motores e das hélices. Uma faixa vertical em todos os níveis de acelerador vem do frame, da stack ou de uma antena (fig. 1).
  6. Termo I em hover. axisI[0] e axisI[1] devem oscilar em torno de zero. Se um deles mantém o mesmo valor durante todo o voo, está compensando um desequilíbrio: centro de gravidade, motor inclinado ou desgastado.
  7. Tensão e corrente. Confira vbatLatest e amperageLatest: queda de tensão por célula nos picos de corrente e tensão no fim. A variação de tensão dividida pela variação de corrente dá uma estimativa aproximada da resistência interna.
Mapas de calor do ruído bruto do giroscópio em relação ao acelerador: à esquerda, uma linha diagonal dos motores; à direita, faixas verticais de ressonância do frame
Ruído bruto do giroscópio em relação ao acelerador. A: roll, Betaflight 4.2.5, 4S, log a 2 kHz. A diagonal é dos motores: 242 Hz com 20–25% de acelerador, 398 Hz com 50–55%, cerca de 600 Hz no máximo. B: pitch, Betaflight 4.5.1, 6S, log a 1013 Hz, portanto a escala termina em 506 Hz. As faixas próximas de 186 e 225 Hz ficam paradas entre 15 e 80% de acelerador: são do frame ou da stack, não dos motores. O bbdoctor as sinaliza (aparecem como 186 Hz em pitch e 198 Hz em roll) sem notch: com gravação a 1013 Hz, 186 Hz pode na verdade ser 827 ou 1199 Hz. As linhas vazias indicam faixas de acelerador que o drone quase não usou.

As etapas 4 e 5 exigem uma taxa de gravação suficientemente alta: qualquer frequência acima da metade da taxa de gravação se dobra e vira um pico falso. Configuração: guia de configuração do blackbox.

Um log real, do começo ao fim

O log público por trás do relatório de exemplo: Betaflight 4.5.2, SpeedyBee F405 Mini, 4S, drone de 3.5 polegadas, a julgar pelo nome do craft VX3.5. Log de 110 s, 107 no ar, todo em ACRO. Giroscópio a 8 kHz, PID a 4 kHz, gravação a 1 kHz com giroscópio bruto e eRPM. Dos 20 itens do relatório, estes são os principais e a origem de cada número.

Motores traseiros carregados 50% a mais: o centro de gravidade

Comando médio: M1 e M3 traseiros a 28.7%, dianteiros a 19.2%. Acima de 12% é um alerta; acima de 30%, crítico. Confirmação: a mediana do termo I de pitch é 45, longe de zero, então o controlador adiciona empuxo traseiro durante todo o voo. Geralmente a bateria ou a câmera fica muito para trás; caso contrário, pode ser muito voo rápido para a frente, e em um hover tranquilo quase não há diferença. Não é um problema de PID: mova a bateria até o drone ficar nivelado quando apoiado nos dedos, sob o centro do frame.

Roll: overshoot de 36%, causado pelo feedforward

Resposta ao degrau de roll: overshoot de 36% (intervalo de 90%: 29–44%), calculado a partir de 165 janelas utilizáveis de um segundo (sobrepostas), entre 372 com movimento do stick; metade do rate solicitado em 8 ms. O limite inferior passa de 15%: é um achado. Mas a recomendação não é "reduza P" nem "aumente D". Em movimentos rápidos do stick, o feedforward faz 60% do trabalho (FF em relação a P), e o giroscópio fica em média 3 ms à frente do setpoint: o FF está puxando o drone. Então altere só o FF: f_roll 120 → 102, redução de 15% em relação ao valor do seu header; P e D ficam como estão. Se o overshoot continuar apenas nos flips rápidos, depois reduza feedforward_boost de 15 para 8. Pitch, mesma situação: 28% (23–37%), FF 56%, f_pitch 125 → 106.

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

Por que simplified_pids_mode: os PIDs deste log não correspondem aos sliders, e o Configurator os sobrescreveria no próximo save.

A entrada de roll mais brusca no log de exemplo: setpoint e giroscópio acima; termos P, D e feedforward abaixo, com grandes picos de FF
Entrada de roll mais brusca no log de exemplo, 0.8 s. A: o stick se move aos 200 ms. A 100 deg/s, o giroscópio fica 10 ms atrás do setpoint; a 200 deg/s, fica 13 ms à frente. Pico de 267 deg/s, alvo de 245. Ao soltar o stick, o giroscópio cai 66 deg/s abaixo do setpoint (496 ms). B: FF chega a +446 e −467 nos movimentos do stick; P fica abaixo de 95, D abaixo de ±88 (unidades PID registradas).

Visualmente, você não verá 36%: aqui o pico fica apenas 22 deg/s (9%) acima do alvo. A resposta ao degrau é a reação a um degrau instantâneo ideal, obtida por deconvolução de 165 janelas; uma entrada real do stick é uma rampa de cerca de 100 ms. A rampa mostra a mesma coisa de outro jeito: o giroscópio fica à frente do setpoint, e os picos de FF chegam a quase cinco vezes os de P. Mais em ajuste de PID a partir do blackbox.

Ruído bruto de 4.1 deg/s: mecânica, não filtros

Ruído bruto do giroscópio acima de 80 Hz: roll 4.1, pitch 2.4, yaw 2.5 deg/s, pouco acima do alerta de 4 deg/s. Filtrado: 0.53 deg/s com cerca de 1.4 ms de atraso; o relatório considera os filtros bons. Então deixe-os como estão e confira as hélices, os rolamentos e a fixação da stack. A vibração de 1× por motor é equilibrada (M1 1.1, M2 0.5, M3 1.8, M4 1.9 deg/s), e o RPM na mesma posição do acelerador varia no máximo 1.9%. Para investigar um motor ruim quando a diferença é grande: guia de vibração dos motores.

Motores chegam a 610 Hz, mas a gravação é a 1 kHz

O eRPM mostra motores chegando a 610 Hz, mas um log de 1000 Hz só enxerga até 500; acima disso, as frequências se dobram, então 610 Hz aparece como 390. A análise por motor dá conta disso (usa a fase de rotação do eRPM), mas o espectro e as frequências de ressonância ficam ambíguos. A correção:

set blackbox_sample_rate = 1/2
save

Jitter de FF vindo do rádio: 2.1% da faixa dos motores

Com os sticks em movimento, o FF acima de 40 Hz (um tranco a cada atualização do rádio) é 2.1% da faixa dos motores em roll e 1.7% em pitch, com 34 e 28 trancos por segundo acima de 5%. O FF útil abaixo de 12 Hz é 1.5 e 1.2%. Com os sticks parados, cai para 0.40%, então a origem são os passos dos sticks. Link a 494 Hz, suavização do stick a 185 Hz. O FF responde por 89% do ruído de saída PID de alta frequência, e D por 10%; não reduza D nem os filtros do termo D por causa disso, pois só aumentaria o atraso. Reduza o FF primeiro e suavize no próximo voo:

set feedforward_averaging = 2_POINT
set feedforward_smooth_factor = 65
save

O D boost quase não entra em ação

Configurado: d_min_roll = 30, d_roll = 45, boost até ×1.50. O bbdoctor mede o multiplicador real a partir do termo D registrado (inclinação de axisD em relação à derivada do giroscópio entre 8 e 40 Hz, blocos de 0.25 s, com TPA removido). Nas manobras mais bruscas, D chega só a ×1.06 em roll e ×1.04 em pitch. Você voa no d_min; portanto, altere o amortecimento pelo D base (coluna Derivative), não pelo D Max. Na versão 2025.12, os nomes seguem a interface (D base d_roll, limite d_max_roll); consulte o guia de ajuste de PID.

Propwash de 1.1 deg/s: normal

Um corte de acelerador: o acelerador cai mais de 25% do curso em 0.15 s, partindo de acima de 35%. Há 46; dois emendaram direto em um flip, e o bbdoctor os descarta porque o movimento do stick produz as mesmas frequências de 15–80 Hz. Em 44 cortes limpos, giroscópio menos setpoint entre 15 e 80 Hz, de 0.08 a 0.6 s após o corte: RMS de 1.1 deg/s, principalmente em ~20 Hz; o normal é até 4. Não há nada para corrigir; se ainda incomodar, veja o guia de propwash.

Bateria: 3.23 V por célula a 72 A

Começou com 3.84 V por célula, não estava carregada. Mínimo sustentado (por mais de 0.5 s) de 3.23 V, pico de 72 A, 3.66 V no fim, cerca de 248 mAh. Resistência interna ≈ 7 mΩ por célula, calculada a partir de 182 mudanças bruscas de corrente, incluindo a fiação. A bateria está no limite: alerta.

O restante

Como conferir cada achado no Explorer

AchadoO que plotarO que você deve ver
Centro de gravidademotor[0..3], axisI[1]Em hover, M1 e M3 (traseiros no layout do Betaflight) acima de M2 e M4; axisI[1] perto de 45.
Overshoot causado pelo FFsetpoint[0], gyroADC[0], axisF[0], axisP[0]O giroscópio passa do setpoint enquanto ainda está subindo; axisF atinge picos várias vezes maiores que axisP. Pouco FF e balanço depois da parada indicam P/D.
Ruído brutogyroUnfilt[0], gyroADC[0] no analisadorO espectro bruto fica claramente mais alto entre 100 e 500 Hz; depois da filtragem, o nível fica quase plano.
Motores mais rápidos que a gravaçãoeRPM[0..3]Hz do motor = campo × 100 / (motor_poles / 2) / 60. Com 14 polos, 610 Hz aparece como 2562.
Jitter de FFaxisF[0], setpoint[0]Um pico curto em axisF a cada passo do setpoint; quase nada com o stick parado.
PropwashrcCommand[3], gyroADC[0..1]Oscilação de ~20 Hz entre 0.1 e 0.6 s após o corte; com 1 deg/s, quase não aparece.
Queda de tensãovbatLatest, amperageLatestMínimo perto de 12.9 V nos picos de até 72 A.

Por que alguns achados dizem "dados insuficientes"

Com poucos dados, o analisador precisa ficar quieto para não recomendar bobagem com confiança. Mínimos do bbdoctor:

VerificaçãoMínimoAbaixo desse valor
Log inteiro10 s no arTudo é rebaixado para informação, sem comandos
Resposta ao degrau por eixo10 janelas utilizáveis, pelo menos um quarto do total"Dados insuficientes para a resposta ao degrau"
Overshoot crítico, verificações profundas de PID50 janelas por eixoNo máximo alerta; algumas verificações ficam sem resultado
Bounce-back depois de flips6 paradas bruscas por eixoNão avaliado
Quedas nos punch-outs6 punch-outs sem movimento do stickNão avaliado
Propwash3 cortes limpos; 5 para emitir alertaSem estimativa; apenas informação com 3–4

Exemplo: um log do Betaflight 4.2.5 (2 kHz, 4S, 215 s no ar) tem 15 cortes de acelerador, mas 12 emendam direto em um flip ou roll. Na média, o "propwash" dá 18.4 deg/s: crítico (limite 10). Cada corte varia de 1.4 a 58.6 deg/s; os valores altos vêm dos flips. Nos três cortes limpos: 1.8 deg/s, normal. Uma ferramenta que incluísse as manobras faria você aumentar D e idle em um drone sem propwash.

Segunda proteção: "viés do método já subtraído". A deconvolução mostra um pouco de overshoot mesmo em uma resposta perfeita, especialmente quando o setpoint não é registrado e é reconstruído a partir dos sticks. O bbdoctor faz o mesmo cálculo com um setpoint deslocado pelo mesmo atraso e subtrai o resultado. Em um log do Betaflight 4.5.1 sem setpoint (801 Hz, 6S): pitch teve 29% de overshoot bruto, dos quais 9% eram viés; o valor informado é 20%. Em yaw, os 9.6% brutos eram todos viés: não houve overshoot.

Como saber se os números são confiáveis

Fluxo de trabalho: uma mudança por voo

  1. Grave 1–2 minutos em ACRO: hover, curvas suaves, 5–6 cortes de acelerador, 6–8 flips e vários rolls com retorno brusco ao centro, 6–8 punch-outs com os sticks parados.
  2. Envie o log para o analisador online de blackbox. Comece pelos itens críticos e pela mecânica; ajustar PIDs em um frame desequilibrado com hélices lascadas não adianta.
  3. Faça uma mudança por voo. Neste caso: bateria, depois FF e depois suavização de FF. blackbox_sample_rate pode ser alterado junto com qualquer etapa, pois não afeta o voo. Retire as hélices ao configurar com a bateria conectada.
  4. Use as mesmas hélices, uma bateria parecida e com carga semelhante, e o mesmo estilo de voo.
  5. Use "Comparar análises" no histórico. Intervalos de 90% sobrepostos antes e depois significam "sem mudança"; voos com estilos diferentes (acelerador médio com diferença de 10% do curso ou mais, ou um voo três vezes mais longo) são sinalizados.

Limitações

A seguir, por problema: ruído e filtros, propwash, PIDs a partir da resposta ao degrau.

Perguntas frequentes

O que posso usar no lugar do Blackbox Explorer?

Desde a versão 2026.6, o visualizador de logs do Betaflight fica no Betaflight App (app.betaflight.com), na aba Blackbox Viewer; o Explorer independente não recebe mais atualizações. O INAV tem seu próprio INAV Blackbox Explorer. Para obter achados com números e comandos CLI, envie o log para o bbdoctor.

Quais arquivos de log o bbdoctor lê?

Blackbox de Betaflight, EmuFlight, INAV e Rotorflight (.bbl, .bfl, .txt), ArduPilot .bin e PX4 .ulg, detectados pelo conteúdo. Logs de texto .log e .tlog do ArduPilot não são compatíveis, assim como logs de ArduPlane, Rover ou PX4 de asa fixa.

Posso confiar em uma análise automática de blackbox?

Cada estimativa tem um intervalo de 90%; abaixo de uma quantidade mínima de dados, não há veredito. O viés do método é subtraído e as recomendações passam por verificações cruzadas. Ainda assim, é uma indicação, não uma decisão: altere um ajuste por vez e confira o próximo log.

Meu log fica armazenado?

Apenas para que a análise possa ser refeita; ele é excluído automaticamente. A política de privacidade informa por quanto tempo o log e o relatório são mantidos. Você pode compartilhar o link do relatório com qualquer pessoa.

Atualizado:

Mais guias