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

Configuração do Blackbox no Betaflight: grave um log que dê para diagnosticar

O blackbox grava o giroscópio, os sticks e o setpoint, termos PID, motores, RPM, tensão e corrente. Mas um log com as configurações de fábrica muitas vezes mostra muito pouco. Exemplos reais dos logs que analisamos: um drone de 3.5 polegadas no Betaflight 4.5.2 gravando a 1 kHz enquanto os motores chegam a 644 Hz; um log do Betaflight 2026.6 a 247 Hz sem giroscópio bruto nem RPM; um drone de 7 polegadas no 4.6 gravando a 2 kHz em um cartão SD com 182 lacunas; um log do INAV 7.1 a 58 Hz que não diz nada sobre vibração.

O que cada verificação precisa

Os limites vêm direto do código do analisador; abaixo deles, a verificação não mostra nada ou indica que há poucos dados.

VerificaçãoCampos do logTaxa de gravaçãoComo voar
Vibração por motor: qual motor ou hélice está vibrandogiroscópio sem filtro + eRPM~250 Hz ou mais; funciona mesmo acima de Nyquistmeio minuto de voo estável com o acelerador variando
Ruído e filtros, ressonâncias do framegiroscópio sem filtro e filtrado500 Hz ou mais; frequência exata de ressonância em 1/1 (ou 2 kHz ou mais para ressonâncias abaixo de 500 Hz)hover e uma subida lenta do acelerador até 100%
Ruído dos motores e qual termo PID o carregamotor, axisP, axisD, axisF500 Hz ou maisqualquer voo
Resposta ao degrau e latênciasetpoint + giroscópio200 Hz ou maisAcro; pelo menos 10 janelas úteis de um segundo com o stick a 20 deg/s ou mais; 50 para um resultado “crítico”
Propwashsetpoint, acelerador200 Hz ou maispelo menos 3 cortes limpos, 5 para um resultado confiável
Bounce-back depois dos flipssetpoint, axisP/I/D/F200 Hz ou maispelo menos 6 paradas bruscas do stick por eixo
Afundamento no punch-out (anti-gravity)setpoint, acelerador, axisI100 Hz ou maispelo menos 6 punch-outs com os outros sticks centralizados
Queda de tensão e resistência da bateriavbat; também sensor de corrente para medir resistênciaqualquerpara resistência, pelo menos 5 janelas de um segundo com variação de corrente de 8 A ou mais
Análise de crashacelerômetro, giroscópio, RSSI/failsafe, eRPM, vbatqualquer—

Com menos de 10 segundos no ar, todos os achados de tuning caem para “info” e perdem os comandos CLI, e bounce-back e punch-outs não são medidos. Se mais da metade do voo foi em Angle ou Horizon, as verificações de resposta ao degrau e bounce-back são ignoradas: nesses modos, o stick comanda um ângulo, não uma taxa de rotação.

Taxa de gravação e aliasing

Por que 1 kHz engana em drones pequenos

Um log gravado a N Hz só mostra vibração até N/2, a frequência de Nyquist. O que é mais rápido não desaparece: reflete de volta para baixo desse limite. Um motor a 644 Hz em um log de 1000 Hz aparece a 1000 − 644 = 356 Hz. Isso cria um pico bem definido no espectro onde não há nada acontecendo: um alvo fácil para um notch ou filtro mal ajustado.

Três logs de um VX3.5 no Betaflight 4.5.2 (loop PID de 4 kHz, 1/4, portanto 1 kHz) mostraram os motores chegando a 583, 605 e 644 Hz, acima de 500 Hz em todos os casos. A figura mostra o mesmo efeito em outro drone: um log de 2 kHz mantendo um a cada quatro frames, exatamente o que blackbox_sample_rate faz, descartando frames sem filtragem prévia.

Ruído do giroscópio bruto em função do acelerador a 2000 Hz e o mesmo voo a 500 Hz, em que a linha do motor reflete de volta a partir de 250 Hz
Giroscópio bruto de roll em função do acelerador. A: o log original a 2000 Hz (Betaflight 4.2.5, 4S, GYRO_SCALED). B: o mesmo voo mantendo um a cada quatro frames, ou seja, 500 Hz. Em A, a linha do motor se desloca para a direita com o acelerador: 289 Hz a 30%, 398 Hz a 50%, 609 Hz a 90%. Em B, tudo acima de 250 Hz é refletido: 289 → 211 Hz, 398 → 102 Hz, 609 → cerca de 109 Hz. “Ruído” cuja frequência cai quando o acelerador aumenta é um sinal claro de aliasing.

O bbdoctor mede a vibração de cada motor pela fase de rotação (eRPM), então sabe onde a cópia refletida aparece e essa verificação ainda funciona a 1 kHz; não dá para recuperar o espectro de ruído e as ressonâncias. Quando o RPM máximo em um log do Betaflight passa de 95% da frequência de Nyquist, o relatório acrescenta “A taxa de gravação está abaixo da frequência do motor” e mostra o divisor correto como comando.

Como escolher blackbox_sample_rate

A partir do 4.3, a taxa é um divisor do loop PID: 1/1, 1/2, 1/4, 1/8 ou 1/16, com 1/4 como padrão. O bbdoctor escolhe o maior divisor que ainda mantém pelo menos 2 kHz:

Loop PIDPadrão (1/4)DefinirResultado
8 kHz2 kHz1/42 kHz
4 kHz1 kHz1/22 kHz
3.2 kHz (BMI270)800 Hz1/13.2 kHz

A taxa do loop fica na aba Configuration. Nem todo build precisa de 2 kHz: o bbdoctor só recomenda isso quando os motores passam da taxa de gravação. Um drone 6S de 7 polegadas do nosso conjunto não passou de 315 Hz, então 1 kHz teria sido suficiente. Um drone 4S de 3 a 3.5 polegadas geralmente passa disso a 1 kHz, e não são só eles: em quatro logs de 1 kHz de um drone 6S no 4.5.1, os motores chegaram a 529–554 Hz. Em um BMI270, 1/1 consome a flash mais rápido; se o espaço for limitado, 1/2 (1.6 kHz) ainda cobre motores até cerca de 760 Hz. 1/8 e 1/16 não servem para análise (500 e 250 Hz em um loop de 4 kHz), e a verificação de configuração sinaliza esses divisores.

Espaço na flash

Tamanho dos arquivos no nosso conjunto: a 1 kHz com todos os campos, cerca de 34 KB/s sem campos de debug e 41–43 KB/s com um modo de debug ativado; a 2 kHz, 58–70 KB/s. Uma flash de 8 MB dura cerca de 3 a 4 minutos a 1 kHz e 2 minutos a 2 kHz. Aquele VX3.5 (debug_mode = GYRO_SCALED) encheu sua flash de 8 MB até o último byte em 195 segundos a 1 kHz e parou no meio do voo. O bbdoctor detecta isso (fim truncado ou arquivo com exatamente 2, 4, 8 ou 16 MB) e avisa, junto com a recomendação de taxa, que o tempo de gravação cairá pela metade.

Então apague a flash antes dos testes (Erase flash na aba Blackbox ou flash_erase na CLI), voe packs de teste de 1 a 2 minutos e remova os campos de que não precisa. Um cartão SD tem espaço, mas um cartão lento perde frames: o drone de 7 polegadas no 4.6 gravando a 2 kHz no SD teve 182 lacunas. Use um cartão bom e recém-formatado; se as lacunas continuarem, reduza a taxa um nível.

Configurações do Betaflight por versão

4.5 e 2025.12+

Para um loop PID de 4 kHz (use 1/4 em 8 kHz e 1/1 em 3.2 kHz):

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

Um log do Betaflight 2026.6.1 foi gravado em 1/16 (247 Hz em um loop de 4 kHz) com o giroscópio bruto e o RPM desativados, embora o DShot bidirecional estivesse funcionando. O relatório forneceu os dois comandos para ativá-los de novo. Em um log do 4.5.1, o setpoint estava desativado: o bbdoctor o reconstrói a partir dos sticks e rates, com uma estimativa de PID menos precisa, e informa isso.

4.3–4.4

set blackbox_sample_rate = 1/2
set debug_mode = GYRO_SCALED
save

Escolha o divisor na tabela acima. Ainda não há campos para giroscópio sem filtro ou RPM. O giroscópio passa pelo debug, e só um modo de debug funciona por vez, então DSHOT_RPM_TELEMETRY fica de fora (o bbdoctor também não lê RPM do debug). Mesmo com o DShot bidirecional funcionando, ele recomenda o 4.5, porque sem RPM não consegue identificar o motor desbalanceado. As configurações blackbox_disable_… existem desde o 4.3 (rpm e gyrounfilt a partir do 4.5): confira se o setpoint está ativado.

4.0–4.2

set blackbox_p_ratio = 64
set debug_mode = GYRO_SCALED
save

Essas versões usam blackbox_p_ratio. A taxa é aproximadamente p_ratio × 31.25 Hz: 32 resulta em cerca de 1 kHz, 64 em cerca de 2 kHz, limitada à taxa do loop PID. Um log do 4.2.11 do nosso conjunto foi gravado a apenas 534 Hz e ainda teve 36 lacunas.

Campos que você pode desativar e os que deve manter

blackbox_disable_gps, blackbox_disable_mag e blackbox_disable_alt (barômetro) podem ser ativados com segurança, a menos que você analise navegação. Mantenha:

RPM no log

O RPM vem do DShot bidirecional: set dshot_bidir = ON, save, com protocolo DShot e ESCs usando Bluejay, AM32 ou BLHeli_32. Depois, tire as hélices, gire os motores com os sliders na aba Motors e confira se o RPM aparece com erros próximos de zero. Confira também motor_poles: a frequência do motor é calculada a partir do eRPM usando o número de polos. A maioria dos motores de 5 polegadas tem 14 polos; alguns pequenos têm 12. Se o valor estiver errado, todas as frequências dos motores no log estarão erradas. Veja mais no guia do filtro RPM e do DShot bidirecional.

INAV

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

No INAV, a taxa de gravação é a fração blackbox_rate_num/blackbox_rate_denom dos ciclos do loop. O INAV 8 e versões posteriores usam por padrão um loop de 2 kHz (looptime = 500), em que 1/2 resulta em 1 kHz; o INAV 7 e anteriores usam por padrão 1 kHz (looptime = 1000), em que 1/2 resulta em 500 Hz. As verificações de vibração e filtros precisam de 500 Hz ou mais. Três logs do INAV 7.1.2 do nosso conjunto, de um drone de 7 polegadas e um de 5, foram gravados em 1/32, ou 58–60 Hz: só mostram o balanceamento dos motores e a bateria. Um log do INAV 8.0 em 1/2 chegou a 995 Hz, com ruído e filtros bem visíveis.

Veja os detalhes no guia do blackbox no INAV.

ArduPilot e PX4 em resumo

ArduPilot. Sem os bits de alta taxa em LOG_BITMASK (nenhum vem ativado por padrão), o ArduCopter grava o giroscópio a 25 Hz, como ocorreu em todos os dez logs do ArduCopter do nosso conjunto, das versões 4.1 a 4.8-dev. Para análise, defina o bit 0 (ATTITUDE_FAST) e o bit 19 (IMU_RAW) em LOG_BITMASK, além de INS_RAW_LOG_OPT = 9 no 4.5 ou posterior para obter o giroscópio antes e depois da filtragem. O RPM vem da telemetria do ESC ou do DShot bidirecional (SERVO_BLH_BDMASK). Use o arquivo .bin do cartão SD (APM/LOGS), não um .tlog. Para os PIDs do ArduCopter, o AUTOTUNE integrado é mais confiável; use o log para analisar vibração e filtros. Veja o guia de análise de logs do ArduPilot.

PX4. Adicione os bits 4 (High rate) e 8 (Raw FIFO gyro) a SDLOG_PROFILE: partindo do padrão 1, o valor fica 273. Ou execute param set SDLOG_PROFILE 273 no MAVLink Console do QGroundControl e reinicie: o perfil é lido na inicialização. O arquivo .ulg fica em Analyze Tools → Log Download. Veja o guia de ULog do PX4.

O voo de teste

No freestyle, esses eventos acontecem por acaso; um pack de teste de 1.5 a 2 minutos permite fazer de propósito 6 a 8 de cada:

  1. Antes de decolar. Hélices novas, pack carregado, flash apagada e chave BLACKBOX ligada se você usar uma.
  2. Modo Acro. Angle e Horizon impedem a análise de resposta ao degrau e bounce-back.
  3. 30 segundos de hover e voo nivelado e suave; depois, se houver espaço, suba lentamente o acelerador do hover a 100% ao longo de 5 segundos para mapear o ruído em função do acelerador.
  4. 6 a 8 flips ou rolls por eixo, além de giros de yaw. Solte o stick de volta ao centro em menos de 0.2 s e mantenha-o ali por meio segundo. Os movimentos contam a partir de 150 deg/s em roll e pitch e 120 deg/s em yaw; um retorno lento ao centro é descartado.
  5. 6 a 8 punch-outs a partir do hover (cerca de 30% de acelerador, sempre abaixo de 70%): percorra mais de um quarto do curso do acelerador em 0.2 s. Não mexa em roll e pitch; acima de 80 deg/s de setpoint, o punch-out não conta.
  6. 6 a 8 cortes retos: suba, corte o acelerador até zero e mantenha os sticks centralizados por cerca de um segundo. O corte conta se o acelerador estava acima de 35% e caiu mais de 25% em 0.15 s. Não faça flips logo em seguida: em um log de 2 kHz, 12 de 15 cortes foram seguidos imediatamente por um flip ou roll, deixando só 3 válidos para analisar propwash.
  7. Pouso. Pouse suavemente, sem cortar o acelerador logo acima do chão: um corte que termina em impacto é excluído da análise de propwash.

Um drone grande não precisa de flips; inclinações curtas e bruscas dos sticks a uma altura segura resolvem. Só o tempo de voo não garante nada: cinco minutos de voo normal em um drone de 7 polegadas produziram 5 cortes (um limpo), 1 punch-out e uma parada brusca de roll.

Setpoint e acelerador durante todo o voo, com os cortes de acelerador, punch-outs e paradas bruscas dos sticks detectados
Um voo de 195 segundos em um drone de 3.5 polegadas (Betaflight 4.5.2), como o bbdoctor o interpreta. Em cima: setpoint de roll (azul) e pitch (laranja); as marcas acima indicam as paradas dos sticks contadas para bounce-back: roll 12, pitch 6, yaw 26 (verde). Embaixo: acelerador. Triângulos vermelhos: 63 cortes, 38 limpos, 24 seguidos por flip ou roll e um descartado por impacto ou pouso. Triângulos verdes: 15 punch-outs contados entre 48 subidas bruscas do acelerador; nos demais, os sticks estavam se movendo. Os primeiros ~28 s são um hover estável.

Como baixar o log

No Betaflight e no INAV, use Save flash to file na aba Blackbox ou o modo Mass Storage para que a controladora apareça como uma unidade. Com cartão SD, copie o arquivo. Arquivos do INAV geralmente terminam em .TXT; o ArduPilot usa .bin e o PX4, .ulg.

Um arquivo pode conter vários voos, um por armação; nosso conjunto inclui um arquivo do Betaflight 2026.6 com 66. Por padrão, o bbdoctor escolhe o voo mais longo (o número 58 nesse arquivo), e o relatório permite selecionar qualquer outro.

Erros comuns

SintomaCausaSolução
Log vazio ou sem nenhum voochave BLACKBOX desligada, blackbox_device = NONE, flash já cheiaconfira Modes e Blackbox e apague a flash
O log para no meio do vooflash cheia: o arquivo tem exatamente 8 ou 16 MBapague antes de voar e use packs de 1 a 2 minutos
“Lacunas na gravação”cartão SD lento ou taxa alta demaisuse um cartão bom; se não resolver, reduza um nível do divisor
“O setpoint não foi gravado”blackbox_disable_setpoint = ONset blackbox_disable_setpoint = OFF
Sem resultado de PIDmais da metade do voo em Angle/Horizonfaça um pack de teste em Acro
Log do INAV a 60 Hzblackbox_rate_denom altouse 1/2 no voo de teste
INAV: “sem comandos dos motores”campo MOTORS desativadoblackbox MOTORS
Sem RPMDShot bidirecional desativado, Betaflight anterior ao 4.5 ou blackbox_disable_rpm = ONative o DShot bidirecional, atualize e reative o campo
Picos no espectro que nenhuma mudança de filtro “corrige”motores acima de ~475 Hz em um log de 1 kHz: frequências refletidasuse um divisor para ~2 kHz (1/2 em um loop de 4 kHz) e grave um novo log

Verifique o log automaticamente

Envie o arquivo para o bbdoctor; é grátis e não precisa de conta. Primeiro, ele verifica o próprio log: tempo de voo, lacunas e frames perdidos, fim truncado, giroscópio bruto, RPM e setpoint, taxa de gravação em relação à frequência máxima dos motores e tempo em modo de autoestabilização. O relatório identifica o que estiver faltando e mostra comandos para sua versão do firmware. Veja o relatório de exemplo.

Você também pode conferir as configurações antes de voar: cole seu diff all na verificação de configuração. Ela sinaliza o blackbox desativado, divisores 1/8 ou 1/16, campos desativados, falta de GYRO_SCALED no 4.0–4.4 e taxa baixa ou falta de GYRO_RAW no INAV. Para analisar o log pronto, veja como ler um log do blackbox.

Perguntas frequentes

Que taxa de gravação do blackbox devo usar?

Cerca de 2 kHz: blackbox_sample_rate = 1/4 em um loop PID de 8 kHz, 1/2 em 4 kHz e 1/1 em 3.2 kHz (giroscópio BMI270). Drones grandes cujos motores ficam abaixo de cerca de 450 Hz funcionam bem a 1 kHz, mas em um drone 4S de 3 a 3.5 polegadas e em muitos builds 6S um log de 1 kHz já mostra picos falsos no espectro.

Por que meu log do blackbox está vazio?

Normalmente, o modo BLACKBOX está em uma chave que ficou desligada, a flash já estava cheia ou blackbox_device está em NONE. Confira as abas Modes e Blackbox, apague a flash antes do voo e voe por pelo menos 30 a 60 segundos.

Preciso de debug_mode no Betaflight 4.5 ou 2025.12?

Não. A partir do 4.5, o giroscópio sem filtro e o RPM dos motores têm campos próprios no log; com debug_mode = NONE, os campos de debug não são gravados. GYRO_SCALED só é necessário no 4.0 a 4.4.

Quanto tempo dura a flash onboard a 2 kHz?

Nos nossos logs, 1 kHz com todos os campos ocupa 34 KB/s sem campos de debug e 41–43 KB/s com eles; 2 kHz ocupa 58–70 KB/s. Uma flash de 8 MB enche em cerca de 3 a 4 minutos a 1 kHz e cerca de 2 minutos a 2 kHz; 16 MB dura o dobro.

Atualizado:

Mais guias