Análisis de Blackbox de INAV: ajuste de PIDs y filtros a partir del registro
La gente usa INAV para la navegación: mantener posición, volver al punto de despegue y ejecutar misiones. Todo depende del bucle interno de velocidad angular. Si el giroscopio tiene ruido y los PIDs no están bien ajustados, el cuadricóptero mantiene peor la altitud, se balancea en POSHOLD y recalienta los motores. A continuación: cómo grabar un registro útil para analizar, qué hacen los ajustes de INAV y qué mostraron nueve registros reales de INAV 6–8 en bbdoctor.
Configuración del registro: frecuencia, giroscopio sin filtrar y motores
INAV define la frecuencia de registro como una fracción de la frecuencia del bucle: 1,000,000 / looptime × blackbox_rate_num / blackbox_rate_denom. Con el valor estándar looptime = 500 (2 kHz), 1/2 da 1 kHz y 1/32, aproximadamente 62 Hz. Dos cuadricópteros con INAV 7.1 de nuestra colección registraron a 60 y 58 fotogramas por segundo.
- 500 Hz o más. El ruido de motores y hélices está por encima de 80 Hz; las resonancias del bastidor suelen aparecer a partir de unos 100 Hz. Un registro solo muestra frecuencias de hasta la mitad de su frecuencia de muestreo, así que uno de 60 Hz llega hasta 30 Hz. bbdoctor solo ejecuta sus comprobaciones de vibración y ruido de motor a partir de 500 Hz. En teoría, 1/4 da 500 Hz, pero el bucle real de nuestros registros funcionó entre 1890 y 1990 Hz, por lo que 1/4 queda justo por debajo del umbral. Usa 1/2.
- GYRO_RAW. El giroscopio antes del filtrado. Sin este dato no puedes separar la vibración del bastidor del comportamiento de los filtros, medir el retardo de filtrado ni distinguir un sensor averiado de un fallo del firmware.
- MOTORS. Las órdenes a los motores. Sin ellas no hay datos de ruido de motor, reparto de carga ni respuesta a la palanca, y bbdoctor rechaza el registro, como ocurrió con una de nuestras muestras de INAV 7.0 (Matek H743).
- Almacenamiento. La memoria flash integrada guarda unos minutos a 1 kHz; una tarjeta SD debe poder seguir el ritmo. Un registro de INAV 6.1.1 de una placa H7 perdió el 27 % de sus fotogramas y tuvo 6 interrupciones, así que todas sus cifras deben tomarse con cautela.
blackbox GYRO_RAW blackbox MOTORS set blackbox_rate_num = 1 set blackbox_rate_denom = 2 save
Si la memoria flash es pequeña, mantén 500 Hz y haz vuelos de prueba cortos de 30–60 s. Para identificar una resonancia, graba un registro corto a 1/1 (2 kHz). Recomendaciones generales: la guía de configuración de Blackbox.
INAV 8 y versiones posteriores registran activeFlightModeFlags, que indica los modos realmente activos, así que es fácil distinguir ACRO de la estabilización automática y los modos de navegación. INAV 7 y anteriores solo registran flightModeFlags, es decir, los interruptores de modo activados; un modo de navegación seleccionado puede no llegar a activarse (por ejemplo, si no hay señal GPS).
Qué maniobras hacer para el registro
Los PIDs solo se pueden evaluar en ACRO. En ANGLE, HORIZON y los modos de navegación, la palanca ordena un ángulo; entre la palanca y el bucle de velocidad angular hay un bucle de ángulo, así que la respuesta dice poco sobre los PIDs. bbdoctor excluye esos tramos de la evaluación de los PIDs. En el segundo vuelo del cuadricóptero H743 de abajo (73 s, 78 % en ANGLE/HORIZON), el informe analiza el ruido, los filtros y el reparto de carga, pero no evalúa la sobreoscilación: no hay datos para hacerlo.
- Haz 6–8 giros y flips bruscos, devuelve la palanca de golpe al centro y mantenla allí medio segundo. Con menos de seis paradas por eje no se puede comprobar el rebote; el buen registro del H743 tenía una por eje.
- Haz 5–8 cortes de gas limpios: asciende con más del 35 % de gas, bájalo de golpe a cero y deja las palancas centradas durante un segundo. Un corte que acaba en un flip no sirve para analizar el lavado de hélice.
- Haz varios acelerones desde estacionario hasta máxima potencia y vuela a velocidad constante con distintos niveles de gas para obtener el mapa de ruido.
Con una aeronave grande no hace falta hacer flips: bastan inclinaciones breves y bruscas a una altura segura. Desactiva la navegación.
Ajustes de INAV que puedes afinar a partir del registro
| Ajuste | Valor predeterminado | Qué hace y cuándo modificarlo |
|---|---|---|
mc_p_roll, mc_i_roll, mc_d_roll (lo mismo para pitch) | 40 / 30 / 23 | PIDs principales. La sobreoscilación depende del bucle P/D: reduce P o aumenta D. I compensa fuerzas constantes, como un centro de gravedad descentrado o el viento. |
mc_p_yaw, mc_i_yaw, mc_d_yaw | 85 / 45 / 0 | D de yaw es cero, así que el registro no contiene el campo axisD[2]. |
mc_cd_roll, mc_cd_pitch, mc_cd_yaw | 60 | Control Derivative, el feedforward de INAV, que responde a la velocidad de movimiento de la palanca. Se registra como axisF. |
gyro_main_lpf_hz | 60 Hz | Filtro pasa bajos principal del giroscopio (gyro_lpf_hz en la cabecera). Un valor menor reduce el ruido, pero ralentiza la respuesta. |
dterm_lpf_hz, dterm_lpf_type | 110 Hz, PT2 | Filtro pasa bajos del término D. Si los motores se calientan y D deja pasar ruido, bájalo aproximadamente un 15 %. |
dynamic_gyro_notch_enabled, dynamic_gyro_notch_min_hz, dynamic_gyro_notch_q | ON, 50 Hz, 120 | Notch dinámicos (Matrix Filter). El límite inferior debe estar por debajo de la resonancia; de lo contrario, el notch no podrá alcanzarla. |
rpm_gyro_filter_enabled, rpm_gyro_min_hz | OFF, 100 Hz | Usa la telemetría del ESC; actívalo solo si proporciona RPM fiables (normalmente a través de un cable aparte). |
setpoint_kalman_enabled, setpoint_kalman_q | ON, 100 | Filtro de Kalman del giroscopio. Cuanto mayor sea q, menos filtra y menos retardo introduce. |
d_boost_min, d_boost_max | 0.5 / 1.25 | D se reduce (×0.5) en movimientos rápidos de palanca y aumenta (×1.25) ante perturbaciones externas bruscas. |
tpa_rate, tpa_breakpoint, tpa_on_yaw | 0 / 1500 / OFF | Por encima del umbral, TPA reduce P, D y CD (FF); 0 = desactivado. Si hay sobreoscilación o vibraciones solo con mucho gas, actívalo. |
mc_iterm_relax, mc_iterm_relax_cutoff | RP / 15 | Evita que I se acumule durante movimientos rápidos de palanca. Si hay rebote, cambia el corte de 15 a 10; para incluir yaw, usa mc_iterm_relax = RPY. |
antigravity_gain, antigravity_accelerator | 1 / 1 | Anti-gravity: 1 significa desactivado. Si el morro baja al dar gas bruscamente, configura 2. |
airmode_type | STICK_CENTER | STICK_CENTER evita que I aumente cuando el gas está a cero y las palancas centradas. La documentación de INAV recomienda THROTTLE_THRESHOLD para hélices de hasta 7". |
throttle_idle | 8 (%) | Ralentí del motor. Si hay lavado de hélice mientras un motor está al ralentí, aumenta 2 puntos. |
ez_enabled | OFF | EzTune: cuando está activado, los PIDs, filtros y tasas se calculan a partir de ez_filter_hz, ez_response, ez_damping y otros controles deslizantes, y se sobrescriben los cambios manuales. |
Los valores predeterminados proceden de Settings.md de INAV; comprueba los tuyos con get. Muchos ajustes no aparecen en la cabecera del registro: allí están las cadenas de PID, gyro_lpf_hz, dterm_lpf_hz, dynamicGyroNotchMinHz, TPA y rpm_gyro_*, pero no d-boost, anti-gravity, I-term relax, airmode_type ni ningún ajuste de EzTune; además, bbdoctor reconstruye throttle_idle a partir de minthrottle. Por eso el informe recomienda «comprobar con get» para esos valores. Guarda primero tus valores actuales:
get mc_ get dterm_lpf get dynamic_gyro_notch get antigravity get mc_iterm_relax get throttle_idle get airmode_type
Para revisar toda la configuración, pega tu diff all en el comprobador de configuración.
Registros reales de INAV y lo que revelaron
INAV 7.1 a 60 Hz: sin datos de vibración ni de PIDs
Un Matek F722SE con 6S (vuelos de 213 y 171 segundos) y un SpeedyBee F7 V3 (26 segundos), ambos con blackbox_rate_denom = 32 y un bucle de 2 kHz: 60 y 58 fotogramas por segundo. El F722SE tampoco registraba GYRO_RAW y todos los vuelos fueron enteramente en ANGLE/HORIZON. Solo se ven de 0 a 30 Hz, así que el ruido de motor, las resonancias y los filtros quedan fuera de rango; tampoco se pueden evaluar los PIDs por dos motivos: frecuencia incorrecta y modo incorrecto.
Aun así, sirven para analizar el reparto de carga entre motores (en el F722SE, los motores de la derecha trabajan un 17 % más: el centro de gravedad está desplazado a la derecha; revisa la batería y cualquier componente pesado descentrado), el voltaje de la batería bajo carga, los eventos de failsafe y la cronología de un accidente. Son procesos lentos, así que 60 Hz bastan.

INAV 8, Matek H743, 6S: resonancia a 117 Hz y sobreoscilación que no se debe al FF
Un buen registro: 995 Hz, GYRO_RAW y 55 segundos en ACRO, con ganancias muy superiores a las de fábrica: roll P 80, I 22, D 32, FF 100; pitch 88 / 24 / 35 / 110.
- Ruido sin filtrar por encima de 80 Hz: roll 8,0, pitch 6,8 y yaw 4,6 deg/s. Los rangos de bbdoctor: menos de 4 es aceptable, 4–10 indica ruido y más de 10 es crítico. Tras el filtrado: 1,07 deg/s con unos 2,3 ms de retardo, así que los filtros funcionan bien.
- Resonancia de 117 Hz solo en pitch, 12 dB por encima del fondo y fija en todos los niveles de gas: es mecánica (figura inferior). Los filtros la reducen unos 17 dB, pero aún llega al bucle PID. Con una frecuencia de registro de 995 Hz, la frecuencia real es ambigua: 117 Hz, o 878 o 1112 Hz plegados. Además,
dynamicGyroNotchMinHzestá en 126 Hz, así que, si el pico realmente está en 117 Hz, el notch dinámico no puede alcanzarlo: las posiciones registradas (gyroPeakPitch[0..2], INAV 8) muestran el primer notch de pitch fijado en su límite inferior, entre 125 y 127 Hz, durante una cuarta parte del vuelo. Orden de trabajo: refuerza el bastidor, la pila, la cámara y la antena; graba un registro corto a 1/1 (2 kHz) y después decide si necesitas un notch. - Ruido de motor del 2,9 % (máximo en M3); bbdoctor lo detecta a partir del 2,5 % y lo considera crítico desde el 4 %. Los términos PID registrados muestran que D recibe entre 4 y 4,5 veces más ruido que P, mientras que FF recibe casi nada. El informe sugiere bajar
dterm_lpf_hzde 185 a 157. - Sobreoscilación: 30 % en roll (133 tramos con movimiento de palanca; el 90 % de los valores está entre 24 y 36 %) y 25 % en pitch. La amortiguación ζ ≈ 0,42 y 0,41, frente al intervalo saludable de 0,6–0,9: la respuesta cae un 14 % por debajo del objetivo tras el pico y oscila a unos 7 Hz. FF solo aporta el 22 % (roll) y el 19 % (pitch) del trabajo y nunca se adelanta a la palanca, así que el propio bucle P/D genera la sobreoscilación; bajar
mc_cd_*no ayudará. - Retardo desde la consigna hasta el pico de respuesta en roll: 31 ms (27,7–33,6), frente a 4–12 ms en un ajuste ágil con feedforward. No aumentes FF para reducirlo mientras el eje sobreoscile.
- El lavado de hélice (0,6 deg/s, 12 cortes limpios de 15) y los acelerones (pitch 1,0°, roll 0,6°) están bien. No se pudo comprobar el rebote: solo hubo una parada brusca por eje.
La lógica del informe: reduce P de pitch un 10 %. Mantén P de roll, porque el eje ya responde con 31 ms de retardo; aumenta D de roll un 10 % (32 a 35) solo cuando desaparezca el ruido de motor, o si los motores se calientan más.
set dterm_lpf_hz = 157 set mc_p_pitch = 79 save
Pero comprueba EzTune primero. Los filtros de este registro coinciden exactamente con la fórmula de EzTune para ez_filter_hz = 190: gyro_lpf_hz en 190, dterm_lpf_hz 5 Hz por debajo, el límite del notch en dos tercios (126) y Q del notch en 250. Las ganancias de pitch son 1,1 veces las de roll, lo que corresponde a ez_axis_ratio 110. Si get ez_enabled indica ON, EzTune sobrescribirá los comandos anteriores. Puedes ejecutar set ez_enabled = OFF (se mantienen los PIDs y filtros actuales) y luego aplicarlos, o usar el control deslizante: al bajar ez_filter_hz de 190 a 160, dterm_lpf_hz pasa a 155, pero también baja el filtro pasa bajos del giroscopio a 160 Hz (más retardo) y el límite del notch a 106 Hz.
escRPM está activo en este registro y sigue el gas, pero rpm_gyro_filter_enabled = 0. El filtro RPM eliminaría parte del ruido de motor, pero no la resonancia de 117 Hz, que no cambia con la velocidad del motor.

INAV 8, BetaFPV F411, whoop de 1S: D es doce veces mayor que P
Diez segundos a 973 Hz con GYRO_RAW. PID de roll: P 17, I 86, D 50, FF 60; pitch 40 / 90 / 35 / 60. D de roll es tres veces P, mientras que en INAV de fábrica D es 23 y P, 40. En el registro, el término D de roll es 12 veces mayor que P y acumula casi todo el ruido de motor: 5,5 % en los motores (M4, crítico), 22,1 deg/s de ruido de roll sin filtrar y 4,8 deg/s después del filtrado. Parece una errata o que se intercambiaron los valores; por ahí empieza el informe:
set mc_d_roll = 35 save
Hay tres hallazgos más. El filtro RPM está activado (rpm_gyro_filter_enabled = 1), pero escRPM mantiene durante todo el vuelo el mismo valor, que no tiene sentido; al parecer, el filtro funcionó sin datos de RPM. La diagonal M1+M4 trabaja más que el resto todo el tiempo (46 %): el mezclador corrige yaw constantemente, así que revisa si hay un motor inclinado o hélices distintas. El lavado de hélice fue de 9,4 deg/s, pero solo se analizaron tres cortes limpios (para una conclusión fiable hacen falta cinco); en dos de ellos, el motor más débil permaneció al ralentí durante al menos 150 ms de la ventana de medio segundo posterior al corte. No es que falte D: al controlador de vuelo ya no le queda capacidad de frenado. Si el siguiente vuelo lo confirma, sube throttle_idle de 8 a 10 y configura airmode_type = THROTTLE_THRESHOLD. Más información en la guía sobre el lavado de hélice.
INAV 6.x: el giroscopio filtrado cayó a cero, pero el giroscopio sin filtrar siguió funcionando
Dos cuadricópteros, ambos accidentados. INAV 6.1.1 en un AocodaRC H7 Dual (3S): el giroscopio filtrado marca cero exacto durante 0,9 s cuando se activa el failsafe, aunque siguen llegando paquetes RC. INAV 6.0.0 en un iFlight Blitz F7 (6S): marca cero durante 1,5 s; el failsafe se activa 1,4 s antes de un impacto de 9 g, el gas cae del 32 % al 4 % y siguen llegando paquetes RC. En ambos casos, el giroscopio sin filtrar siguió detectando el giro: el sensor funcionaba y el valor cero procedía del firmware.
bbdoctor lo identifica como un bloqueo cuando los tres ejes del giroscopio permanecen exactamente constantes durante 0,3 s o más en vuelo. Sin GYRO_RAW, no puedes distinguir un fallo del firmware de un sensor averiado. Qué hacer: actualiza el firmware, comprueba si el failsafe está asignado a un interruptor de la radio y revisa failsafe_procedure. Si también ocurre sin failsafe, revisa las soldaduras y la alimentación de 3,3 V de la controladora de vuelo.
Orden de ajuste para INAV
- Registro. Usa 500 Hz o más, GYRO_RAW y MOTORS. Decide cómo usar EzTune: ajusta sus controles deslizantes o configura
ez_enabled = OFFpara ajustar manualmente. - Mecánica. Si el ruido sin filtrar supera 4 deg/s en roll o pitch, hay picos que suben con el gas (hélices, motores) o un pico cuya frecuencia no cambia (bastidor), revisa primero las hélices, los tornillos y la pila montada sobre soportes blandos. Los filtros no solucionan problemas mecánicos. Más información en la guía de ruido y filtros.
- Filtros. Si el ruido de motor es del 2,5 % o más y los motores están calientes, reduce
dterm_lpf_hzun 15 %. Si todavía pasa ruido, reducegyro_main_lpf_hzun 15 %. Si una resonancia está por debajo dedynamic_gyro_notch_min_hz, baja el límite después de confirmar la frecuencia con un registro a 2 kHz. Si la telemetría del ESC funciona, activa el filtro RPM. Si hay poco ruido y los motores están fríos, relaja un poco los filtros para reducir el retardo. - P y D. Si hay sobreoscilación, comprueba primero la contribución de FF. Si es pequeña, la sobreoscilación se debe a P/D: reduce P y, si ζ está por debajo de 0,6 y los motores están fríos, aumenta D en pasos del 10 %.
- I, relax, anti-gravity y TPA. Si hay rebote, cambia
mc_iterm_relax_cutoffde 15 a 10 y luego reduce I un 10 %. Si el morro baja al dar gas bruscamente, configuraantigravity_gain = 2. Si solo hay sobreoscilación o vibraciones con mucho gas, cambiatpa_ratede 0 a 20 o súbelo 15 si TPA ya está activado (en INAV reduce P, D y CD). - Lavado de hélice. Si un motor queda al ralentí durante los cortes, aumenta
throttle_idleen 2 y configuraairmode_type = THROTTLE_THRESHOLD; no aumentes D. Airmode debe estar activado: usafeature AIRMODEo el interruptor AIR MODE. - Deja FF y el suavizado de palanca para el final, cuando el bucle ya no tenga sobreoscilación.
Haz un solo cambio por vuelo y comprueba la temperatura de los motores después de cada uno. La guía Ajuste de PIDs a partir de Blackbox explica cómo leer la respuesta al escalón.
Cuándo no cambiar nada. Si el registro está por debajo de 500 Hz, deja los filtros como están. Si el vuelo fue en ANGLE o en un modo de navegación, deja los PIDs como están. Con menos de cinco cortes limpios, no ajustes el lavado de hélice; con menos de seis paradas bruscas por eje, no cambies relax ni I. Si se perdió una cantidad apreciable de fotogramas, vuelve a volar. Si el ruido sin filtrar está por debajo de 4 deg/s, el ruido de motor por debajo del 2,5 % y la amortiguación entre 0,6 y 0,9, deja el ajuste como está: filtrar más añade retardo y aumentar D calienta los motores.
En qué se diferencian los registros de INAV de los de Betaflight
- Nombres. La cabecera guarda las ganancias en una línea;
rollPID:80,22,32,100significa P, I, D y FF. En la CLI se usan por separadomc_p_roll,mc_i_roll,mc_d_rollymc_cd_roll. Los comandos de Betaflight, comop_rollof_roll, no funcionan. - Campos. La consigna está en
axisRate, no ensetpoint; los términos PID sonaxisP,axisDyaxisF. bbdoctor los usa para repartir entre P, D y FF el ruido de motor y la sobreoscilación. - No hay RPM por motor. El registro no permite identificar un motor desequilibrado; solo muestra el ruido general, las resonancias y la carga. ¿Sospechas de un motor? Identifícalo intercambiando componentes.
- La numeración de los motores Quad X es la misma: M1 trasero derecho, M2 delantero derecho, M3 trasero izquierdo y M4 delantero izquierdo.
Ajusta la navegación solo cuando el bucle interno funcione bien
Los controladores de posición y altitud de INAV generan un ángulo objetivo y una orden de gas, que deben ejecutar los bucles de ángulo y de velocidad angular que acabas de ajustar. Si roll sobreoscila un 30 % y oscila a 7 Hz, POSHOLD se balanceará; cambiar nav_mc_pos_xy_p o nav_mc_vel_xy_p sería ajustar el bucle equivocado. Sigue este orden:
- Un bucle interno limpio, evaluado a partir de un registro en ACRO.
- Gas de estacionario: busca el valor del gas (el campo
rcCommand[3]) con el que el cuadricóptero se mantiene sin subir ni bajar y configúralo ennav_mc_hover_thr(en las mismas unidades de 1000–2000); el controlador de altitud parte de ese valor. - Después, ajusta las ganancias de altitud (
nav_mc_pos_z_p,nav_mc_vel_z_*) y de posición (nav_mc_pos_xy_p,nav_mc_vel_xy_*), una por vuelo.
bbdoctor analiza el bucle interno, no los controladores de navegación.
Haz una comprobación automática
bbdoctor analiza gratis y en línea los registros Blackbox de INAV (.txt y .bbl): mide todo lo descrito en los ejemplos e incluye comandos con la sintaxis de la CLI de INAV, calculados a partir de tus valores actuales. Como los umbrales se ajustaron con cuadricópteros FPV de Betaflight, el informe advierte que son aproximados para aeronaves grandes. Consulta un informe de ejemplo.
Preguntas frecuentes
¿Cómo registro el giroscopio sin filtrar en INAV?
En la CLI escribe blackbox GYRO_RAW y luego save. Si escribes blackbox sin argumentos, se muestran los campos registrados; MOTORS también debe estar activado. La frecuencia se configura con blackbox_rate_num y blackbox_rate_denom: para analizar vibraciones y filtros necesitas 500 Hz o más; con looptime 500, usa 1/2 (aproximadamente 1 kHz). En la práctica, 1/4 queda justo por debajo de 500 Hz y las comprobaciones de vibración no se ejecutan.
¿INAV tiene ajuste automático para multirrotores?
El modo AUTOTUNE integrado de INAV es para aeronaves de ala fija. Los multirrotores se ajustan manualmente a partir del registro o, de forma sencilla, con EzTune (ez_enabled), que calcula PIDs y filtros a partir de unos pocos controles deslizantes. Si EzTune está activado, se sobrescriben los cambios manuales de PID.
¿Qué es mc_cd_roll en INAV?
Control Derivative, el equivalente de INAV al feedforward de Betaflight. Hace que la aeronave empiece a moverse según la rapidez con que mueves la palanca, antes de que actúe P. El valor predeterminado es 60 en todos los ejes. En la cabecera del registro es el cuarto número de rollPID; en los datos del registro es el campo axisF.
¿Por qué mi registro de INAV se grabó a 60 Hz?
La frecuencia de registro es la frecuencia del bucle multiplicada por blackbox_rate_num / blackbox_rate_denom. Con looptime 500 (2 kHz) y una proporción de 1/32, obtienes unos 62 Hz, así que el registro solo muestra de 0 a 30 Hz. Configura blackbox_rate_num = 1 y blackbox_rate_denom = 2 para obtener 1 kHz.
Actualizado: