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

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.

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.

  1. 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.
  2. 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.
  3. 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

AjusteValor predeterminadoQué hace y cuándo modificarlo
mc_p_roll, mc_i_roll, mc_d_roll (lo mismo para pitch)40 / 30 / 23PIDs 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_yaw85 / 45 / 0D de yaw es cero, así que el registro no contiene el campo axisD[2].
mc_cd_roll, mc_cd_pitch, mc_cd_yaw60Control Derivative, el feedforward de INAV, que responde a la velocidad de movimiento de la palanca. Se registra como axisF.
gyro_main_lpf_hz60 HzFiltro 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_type110 Hz, PT2Filtro 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_qON, 50 Hz, 120Notch 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_hzOFF, 100 HzUsa 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_qON, 100Filtro de Kalman del giroscopio. Cuanto mayor sea q, menos filtra y menos retardo introduce.
d_boost_min, d_boost_max0.5 / 1.25D se reduce (×0.5) en movimientos rápidos de palanca y aumenta (×1.25) ante perturbaciones externas bruscas.
tpa_rate, tpa_breakpoint, tpa_on_yaw0 / 1500 / OFFPor 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_cutoffRP / 15Evita 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_accelerator1 / 1Anti-gravity: 1 significa desactivado. Si el morro baja al dar gas bruscamente, configura 2.
airmode_typeSTICK_CENTERSTICK_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_idle8 (%)Ralentí del motor. Si hay lavado de hélice mientras un motor está al ralentí, aumenta 2 puntos.
ez_enabledOFFEzTune: 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.

Espectro del giroscopio de pitch: arriba, un registro de INAV 8 a 995 Hz con un pico de 117 Hz en el giroscopio sin filtrar; abajo, un registro de INAV 7.1 a 60 Hz cuyo espectro termina en 30 Hz
A: INAV 8 a 995 Hz, giroscopio de pitch sin filtrar (gris) y filtrado (azul): un pico de 117 Hz y una elevación cerca de 147 Hz que los filtros casi eliminan. B: INAV 7.1 a 60 Hz, misma escala: el espectro termina en 30 Hz; la zona rayada nunca llegó al registro.

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.

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.

Mapa del ruido del giroscopio de pitch según el gas: a la izquierda, el giroscopio sin filtrar con una banda vertical intensa a 117 Hz; a la derecha, tras el filtrado, la banda es más débil y desaparece el ruido por encima de 200 Hz
INAV 8.0, Matek H743, 995 Hz: ruido de pitch según el gas. Izquierda, giroscopio sin filtrar: una banda a 117 Hz en todos los niveles de gas, 12 dB por encima del fondo. Derecha, tras el filtrado: desaparece el ruido por encima de 200 Hz; la banda de 117 Hz se reduce unos 17 dB, pero sigue presente.

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

  1. Registro. Usa 500 Hz o más, GYRO_RAW y MOTORS. Decide cómo usar EzTune: ajusta sus controles deslizantes o configura ez_enabled = OFF para ajustar manualmente.
  2. 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.
  3. Filtros. Si el ruido de motor es del 2,5 % o más y los motores están calientes, reduce dterm_lpf_hz un 15 %. Si todavía pasa ruido, reduce gyro_main_lpf_hz un 15 %. Si una resonancia está por debajo de dynamic_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.
  4. 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 %.
  5. I, relax, anti-gravity y TPA. Si hay rebote, cambia mc_iterm_relax_cutoff de 15 a 10 y luego reduce I un 10 %. Si el morro baja al dar gas bruscamente, configura antigravity_gain = 2. Si solo hay sobreoscilación o vibraciones con mucho gas, cambia tpa_rate de 0 a 20 o súbelo 15 si TPA ya está activado (en INAV reduce P, D y CD).
  6. Lavado de hélice. Si un motor queda al ralentí durante los cortes, aumenta throttle_idle en 2 y configura airmode_type = THROTTLE_THRESHOLD; no aumentes D. Airmode debe estar activado: usa feature AIRMODE o el interruptor AIR MODE.
  7. 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

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:

  1. Un bucle interno limpio, evaluado a partir de un registro en ACRO.
  2. 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 en nav_mc_hover_thr (en las mismas unidades de 1000–2000); el controlador de altitud parte de ese valor.
  3. 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:

Más guías