Ajuste de PID de Betaflight con Blackbox: corrige la causa, no el síntoma
Tu dron se pasa del objetivo después de un flip. En los foros suelen decir «baja la P» o «sube la D». El problema: ese mismo sobreimpulso puede tener tres causas, y dos requieren ajustes opuestos. Si lo provoca feedforward, bajar P lo empeora. Si al lazo le falta amortiguación, bajar FF no cambia nada. El log te permite saber cuál es tu caso. A continuación explicamos cómo lo analiza bbdoctor, con comprobaciones en seis logs reales de Betaflight 3.1.5 a 2026.6.
Orden de trabajo: mecánica → ruido → PID
- Mecánica. Buenas hélices, motores sin holgura, frame firme y batería bien sujeta. Ningún PID arregla una hélice doblada.
- Ruido y filtros. Filtro RPM (DShot bidireccional), filtrado razonable y motores fríos después de volar. Consulta la guía de ruido y filtros.
- PID. Primero roll y pitch (P/D y feedforward); después I, TPA y anti-gravity.
¿Por qué? D es la derivada del giroscopio, así que amplifica el ruido de alta frecuencia y lo envía directamente a los motores. bbdoctor no sugerirá subir D cuando el ruido de alta frecuencia de los motores supere el 2.5% del rango del motor, cuando el ruido PID provenga principalmente del término D o cuando el ruido del giroscopio sin filtrar por encima de 80 Hz alcance 10 °/s. En el caso de 4.2.5 de abajo, el lazo necesitaba más D, pero el ruido del giroscopio sin filtrar de 35.8 °/s cambió la recomendación a P −10% (p_roll 42 → 38) y revisar primero la mecánica.
El log que necesitas
- ACRO. Entre 30 y 60 segundos de rolls y flips bruscos en cada eje, soltando el stick para que vuelva al centro. En ANGLE y HORIZON de Betaflight e INAV, el setpoint viene del lazo de ángulo, no del stick; si más de la mitad del vuelo está autoestabilizada, no se calcula la respuesta. ArduPilot y PX4 registran el objetivo del controlador de velocidad (
RATE.RDes,vehicle_rates_setpoint), así que la respuesta es válida en cualquier modo. - Frecuencia de registro. La respuesta al escalón funciona desde 200 Hz; 1 kHz es el mínimo práctico. Por debajo de 500 Hz, bbdoctor no puede medir cuánto sube D realmente y limita el veredicto sobre oscilaciones a «info».
- Cuántos movimientos. El vuelo se divide en ventanas de 1 segundo, cada 1/8 s, y se conservan las que tienen una orden del stick de al menos 20 °/s. Para emitir un veredicto en un eje hacen falta 10 ventanas válidas (y al menos una cuarta parte del total); para un veredicto «crítico» y analizar la causa hacen falta 50. Las ventanas se solapan, así que 65 equivalen aproximadamente a 8 segundos de vuelo activo.
- Registra el campo setpoint; consulta los detalles de configuración en configuración de blackbox.
Cómo leer la respuesta al escalón
La respuesta al escalón muestra cómo rotaría el dron si movieras el stick instantáneamente a una velocidad determinada. 1.0 es la velocidad solicitada. Una buena curva sube rápido, supera ligeramente 1.0 y se estabiliza enseguida.
Sobreimpulso
Cuánto supera el pico el valor 1.0; hasta un 15% es normal. El veredicto usa el intervalo del 90%, no un único número:
- warn cuando el límite inferior supera el 15%; crit por encima del 35% (con al menos 50 ventanas);
- fine cuando la estimación es de hasta el 15% y el límite superior de hasta el 25%;
- borderline cuando la estimación supera ligeramente el 15% y el intervalo es estrecho: todavía no cambies nada, compara con el siguiente log;
- uncertain cuando el intervalo supera los 15 puntos: la próxima vez haz entre 5 y 6 movimientos más en ese eje.
Amortiguación ζ
bbdoctor ajusta un modelo de segundo orden a la curva y calcula su relación de amortiguación ζ, que indica cuánto sobreimpulso produce por sí solo el lazo P/D:
| ζ | Sobreimpulso del lazo | Aspecto |
|---|---|---|
| 0.36 | ~30% | Caída profunda después del pico, varios rebotes |
| 0.5 | ~16% | Caída clara, uno o dos rebotes |
| 0.6 | ~9% | Pequeño pico, casi sin caída |
| 0.7–0.9 | 5% o menos | Un pico y luego una línea plana: eso buscas |
bbdoctor solo detecta oscilación cuando coinciden dos señales: ζ de 0.5 o menos y una caída por debajo del objetivo de al menos el 4% (al menos el 2% con un 90% de confianza). Es warn con ζ de hasta 0.40 o una caída del 15% o más. Si el modelo no se ajusta bien, no muestra ζ y la caída por sí sola decide, como máximo con nivel info. Una oscilación por debajo de 6 Hz en un dron de 5 pulgadas apunta al término I o a una aeronave pesada, más que a D.
Velocidad
- t50 es el tiempo hasta alcanzar la mitad de la velocidad solicitada: entre 7 y 12 ms en los logs ágiles de esta guía.
- Retardo entre setpoint y rotación mide desde un cambio de setpoint hasta el pico de la reacción, a través de todo el lazo: PID, FF, filtros, motores y hélices. Lo normal con feedforward es entre 4 y 12 ms, y hasta 15 ms sin él. A partir de 20 ms, el eje se considera lento y bbdoctor no recomendará bajar P. El enlace de radio añade su propio retardo (12 ms en el caso de GEPRC de abajo).
Cómo se construye la curva
Nadie mueve el stick en escalones perfectos, así que la respuesta se reconstruye hacia atrás (deconvolución): para cada ventana de 1 segundo, ¿qué reacción a un escalón instantáneo transforma esta entrada del stick en este trazado del giroscopio? Hay dos trampas:
- Frecuencias altas. Por encima de unos 25 Hz, los movimientos del stick no tienen energía, así que la deconvolución solo calcula ruido. PID-Analyzer lo corta con un filtro pronunciado alrededor de 25 Hz, pero un corte brusco crea su propio rizado (efecto Gibbs): cerca de un 10% de sobreimpulso en una respuesta que no tiene ninguno. bbdoctor suprime todo lo que supera 80 Hz y suaviza con una gaussiana de 30 Hz, sin lóbulos negativos ni picos inventados.
- El sesgo propio del método. El ventaneo y el suavizado todavía dejan un pequeño pico, así que se repite el mismo cálculo con una respuesta perfecta y el setpoint retrasado el mismo t50; luego se resta su sobreimpulso (1–5% en nuestros logs). Con datos sintéticos, un retardo puro da 0% y un sistema con ζ = 0.5 da 15%, frente al 16% real.
La curva es la mediana de las ventanas; el intervalo viene de un bootstrap (200 reordenamientos aleatorios de las ventanas), de ahí el «47% (90%: 44–53%)» del informe. Así que un 10% de «sobreimpulso» en una herramienta con un corte brusco puede ser un artefacto puro.
Un sobreimpulso, tres causas
| Causa | Qué muestra el log | Qué hacer | Qué evitar |
|---|---|---|---|
| Feedforward (en 3.x, el peso del setpoint en D) | FF hace al menos el 45% del trabajo en movimientos bruscos del stick, P aporta casi nada y el giroscopio sigue al setpoint o se adelanta | Baja f_roll/f_pitch un 15% (en 3.x, dterm_setpoint_weight). Es un primer paso seguro: no calienta los motores | No toques P ni D |
| Lazo con poca amortiguación | FF hace menos del 45%, el dron no se adelanta al stick, ζ es menor de 0.5 y hay una caída después del pico y oscilación | Sube la D base un 15% (junto con su límite) si los motores están fríos; si tienen ruido, baja P un 10% | No bajes FF: no ayudará. No bajes P si el eje ya es lento (20 ms o más) |
| Adelanto | El lazo está bien amortiguado (ζ ≥ 0.6, sin caída), pero el sobreimpulso supera más del doble lo esperable para ese lazo; FF hace al menos el 35% del trabajo | Baja FF. Si nada cambia, restáurala: entonces lo provoca el término I | No bajes P: con menos P el lazo tira hacia atrás con menos fuerza y aumenta el sobreimpulso |
Otros tres patrones, comprobados por separado:
- el sobreimpulso aumenta con mucho gas: es TPA; consulta TPA y anti-gravity;
- los movimientos suaves producen más sobreimpulso que los bruscos: la D base es demasiado baja y el aumento solo actúa en movimientos bruscos; consulta D Max frente a D Min;
- los movimientos bruscos producen más sobreimpulso que los suaves: es el aumento de feedforward; consulta feedforward y suavizado de RC.

Cinco casos reales
Referencia: 2% con ζ = 0.73
El log plasmatree_good_tune (Betaflight 3.1.5) es el ajuste de referencia entre los logs usados para calibrar los umbrales de bbdoctor. Roll 2% (90%: 1–3%), pitch 5%, sin sobreimpulso en yaw. ζ de roll 0.73, sin caída, t50 de 9 ms y retardo entre setpoint y rotación de 10 ms. No copies sus valores P 19, I 12, D 18 a 4.x: allí los filtros, D y feedforward funcionan de otra forma.
Ajuste de fábrica de 3.1.5: 87% por el peso del setpoint
El log 18_stock_tune, a 7.9 kHz. Roll 87% (79–93%), pitch 65%. 3.x no registra el setpoint, así que se reconstruye a partir de los sticks y los rates. En los movimientos más bruscos, el giroscopio se adelanta al setpoint, algo que un lazo sin empuje del stick no puede hacer; el empuje viene de dterm_setpoint_weight = 190, el equivalente de feedforward en 3.x. La recomendación es 190 → 100, un ajuste para todos los ejes. Roll también oscila (ζ = 0.36), pero la D es solo el siguiente paso aquí: d_roll 20 → 23 si persiste la oscilación.
Dron de 3.5 pulgadas con 4.5.2: 47%, casi todo por FF
El log vx35_18-23. Roll 47% (44–53%), t50 de 7 ms. Feedforward hace el 60% del trabajo, con un error de seguimiento casi nulo en los movimientos más bruscos. Con ζ = 0.62, el lazo solo produciría cerca de un 9% de sobreimpulso; FF añade el resto. Pitch: 27%, con FF haciendo el 59%. La recomendación solo modifica FF:
set f_roll = 102
set f_pitch = 106
set simplified_pids_mode = OFF
save
La línea del slider es necesaria porque los PID de este log ya no coinciden con los sliders y se sobrescribirían al guardar. Además, el aumento de D solo llega a ×1.15 del ×1.67 configurado, así que el dron vuela principalmente con d_min_roll = 30, no con 50.
Betaflight 2026.6: 35% generado por el propio lazo
Log de una GEPRC F405 grabado a 247 Hz. Roll 35% (33–38%). FF solo hace el 29% del trabajo y el dron no se adelanta al stick, así que no es feedforward. Después del pico, la respuesta cae un 5% por debajo del objetivo y oscila a ~9 Hz, ζ = 0.49 (probablemente entre 0.42 y 0.50). Pitch es parecido (ζ = 0.50), así que aplicamos una corrección a ambos ejes: D base +15%.
set d_roll = 39
set d_max_roll = 46
set d_pitch = 53
set d_max_pitch = 63
set simplified_pids_mode = OFF
save
No conviene bajar P: roll ya tarda 24 ms y pitch 28 ms, más ~12 ms del enlace de radio de 50 paquetes/s antes de que el stick llegue siquiera al setpoint. A 247 Hz, el log no puede mostrar el ruido de D; toca los motores después de un primer vuelo de 1–2 minutos.

Betaflight 4.2.5: 32% en movimientos suaves y 1% en los bruscos
El log v0002, a 2 kHz. Roll 23%, producido por el lazo. Separados por intensidad del stick, los movimientos suaves (hasta 101 °/s) tienen un sobreimpulso del 32%; los bruscos (desde 800 °/s), del 1%. D alcanza su límite de ×1.52 en movimientos bruscos (d_min_roll 23 → d_roll 35), mientras que en los suaves se vuela con el valor base 23. La solución de manual es subir la D base, pero este giroscopio tiene mucho ruido (consulta la primera sección), así que se recomienda P −10%.
P, I y D, uno por uno
- P da rigidez. Si hay muy poca D para la P que tienes, aparece sobreimpulso y oscilación; con muy poca P, la respuesta se siente blanda, tarda más y el dron mantiene peor la trayectoria en propwash. Baja P por sobreimpulso solo cuando la causa sea el lazo y el eje no sea lento.
- I mantiene el dron frente a fuerzas constantes: centro de gravedad descentrado, viento y maniobras largas. Demasiada I en relación con P causa un bamboleo lento de 1.5–10 Hz en vuelo tranquilo. bbdoctor busca un pico estrecho en el error de seguimiento cuando el stick está dentro de ±40 °/s y comprueba si lo impulsa el término I (coherencia con el error ≥ 0.5 e I/P en esa frecuencia ≥ 1); entonces recomienda I −15%. Si no, puede ser holgura (correa de batería, mástil GPS) o viento, y se dejan las ganancias como están. Si I permanece en el límite durante mucho tiempo (comprobado en 2025.12 y posteriores), algo tira constantemente del dron: el centro de gravedad, un motor inclinado o una hélice. El rebote después de flips también suele deberse a I; consulta rebote después de flips.
- D aporta amortiguación y es la principal causa de que se calienten los motores. bbdoctor mide la D que realmente trabaja en vuelo, no solo la configurada. D base y aumento: D Max frente a D Min.
Cuando roll y pitch responden de forma distinta
En el mismo log VX3.5, el retardo de roll es de 3.8 ms (90%: 2.9–5.0) y el de pitch, 9.5 ms (8.5–10.6). Los intervalos no se solapan, así que la diferencia es real, y las ganancias la explican: P de pitch 42 y P de roll 59. Cuando la P del eje más lento está por debajo del 85% de la del eje más rápido, bbdoctor dice que eso explica por sí solo la diferencia. Primero termina los ajustes del sobreimpulso; después baja la P de roll hacia ~50 en vez de subir la de pitch, que ya tiene sobreimpulso. Si no hay diferencia de P, una causa común es la distribución del peso: una batería lejos del centro añade inercia en pitch.
Nombres de D según la versión y la trampa de los sliders
| Versión | D base | Límite del aumento |
|---|---|---|
| 4.0–4.2 | d_min_roll | d_roll |
| 4.3–4.5 | d_min_roll («Derivative») | d_roll («D Max») |
| 4.6 / 2025.12+ | d_roll («Derivative») | d_max_roll («D Max») |
La misma recomendación, «sube d_roll», sube la D base en 2025.12, pero solo el límite en 4.5, al que el dron quizá rara vez llegue. Ejemplo para 4.5 (base 30, límite 50), con un 10% más de amortiguación en roll:
set d_min_roll = 33
set d_roll = 55
set simplified_pids_mode = OFF
save
Sliders. Mientras simplified_pids_mode no esté en OFF, al guardar el Configurator recalcula los PID desde los sliders y borra los cambios manuales. Nunca ejecutes simplified_tuning apply sobre un ajuste manual: reconstruye los PID a partir de los multiplicadores de los sliders y los valores de fábrica.
INAV, ArduPilot y PX4
- INAV:
mc_p_roll,mc_i_roll,mc_d_roll,mc_cd_roll(CD es feedforward), y lo mismo para pitch y yaw. TPA estpa_rateytpa_breakpoint. Más información en análisis de blackbox de INAV. - ArduPilot:
ATC_RAT_RLL_P/_I/_D/_FF, y lo mismo para PIT y YAW. En ArduCopter, empieza con AUTOTUNE integrado y usa el log para comprobar el resultado. Necesitas un registro rápido (el bit ATTITUDE_FAST enLOG_BITMASK). Más información en análisis de logs de ArduPilot. - PX4:
MC_ROLLRATE_P/_I/_D/_FF.MC_ROLLRATE_Kmultiplica P, I y D en conjunto, así que tenlo en cuenta. Para el autotune:MC_AT_EN = 1y luego inícialo desde QGroundControl (PID Tuning). Registra con el bit High rate enSDLOG_PROFILE. Consulta análisis de ULog de PX4.
Seguridad
- Quita las hélices siempre que estés en la CLI con la batería conectada.
- Haz un cambio por vuelo, entre un 10 y un 15% cada vez, o no sabrás qué funcionó.
- El primer vuelo después de un cambio debe ser corto y bajo, con un dedo en el interruptor de desarmado.
- Después de un minuto en el aire, toca los motores. Si están claramente más calientes, revierte el cambio.
- No busques el cero: un sobreimpulso del 5–12% con una línea plana después del pico indica un buen ajuste, no un problema.
- Las sacudidas al cortar gas son otro tema: consulta propwash.
Comprueba tu propio log
Sube gratis tu log a bbdoctor. El informe muestra el sobreimpulso de cada eje con su intervalo, ζ, la caída, la proporción del trabajo que hace FF, el retardo y la diferencia entre ejes. También genera comandos CLI a partir de tus valores actuales con los nombres correctos para tu versión. Consulta uno en el informe de ejemplo y revisa tus ajustes sin volar con un diff all en la página de comprobación de configuración.
Preguntas frecuentes
¿Cómo distingo el sobreimpulso de feedforward del sobreimpulso de P?
Fíjate en qué parámetro hace el trabajo durante los movimientos bruscos de stick. Si feedforward aporta un 45% o más y, en los movimientos más bruscos, el giroscopio sigue al setpoint o se adelanta, el sobreimpulso viene de FF: baja f_roll y f_pitch un 15% y deja P y D como están.
¿Qué D debo cambiar en Betaflight 4.5 y en 2025.12?
La D base con la que vuelas la mayor parte del tiempo. En 4.3–4.5 es d_min_roll (la columna Derivative) y d_roll es solo el límite del aumento (D Max). Desde 4.6/2025.12, los nombres coinciden con las columnas: d_roll base y d_max_roll como límite. Cambia ambas en la misma proporción, como hace el slider.
¿Cuánto debo cambiar los PID cada vez?
Un parámetro por vuelo, entre un 10 y un 15% por paso. Después del primer minuto en el aire, toca los motores: si están claramente más calientes que antes del cambio, revierte el ajuste. Un paso del 10–15% basta para que se note en el log por encima de la variación de medida de unos pocos puntos porcentuales, y es lo bastante pequeño para no pasarte del punto ideal.
¿Qué significa ζ (amortiguación) en el informe?
Indica con qué rapidez se apaga la oscilación después del pico. Con ζ = 0.5, el lazo por sí solo produce cerca de un 16% de sobreimpulso y oscila de forma visible; con 0.7, cerca de un 5% y casi sin oscilación. Un buen ajuste queda entre 0.6 y 0.9. Por debajo de 0.5, si hay una caída después del pico, falta amortiguación (D) para la P actual.
Actualizado: