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

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

  1. Mecánica. Buenas hélices, motores sin holgura, frame firme y batería bien sujeta. Ningún PID arregla una hélice doblada.
  2. 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.
  3. 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

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:

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 lazoAspecto
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.95% o menosUn 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

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:

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

CausaQué muestra el logQué hacerQué 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 adelantaBaja f_roll/f_pitch un 15% (en 3.x, dterm_setpoint_weight). Es un primer paso seguro: no calienta los motoresNo toques P ni D
Lazo con poca amortiguaciónFF 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ónSube 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)
AdelantoEl 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 trabajoBaja FF. Si nada cambia, restáurala: entonces lo provoca el término INo bajes P: con menos P el lazo tira hacia atrás con menos fuerza y aumenta el sobreimpulso

Otros tres patrones, comprobados por separado:

Tres respuestas al escalón de roll: un buen ajuste con 2% de sobreimpulso, el ajuste de fábrica de Betaflight 3.1.5 con 87% y un dron 4.5.2 con 47% debido a feedforward
Respuesta de roll de tres drones, normalizada al nivel estable. A: ajuste de referencia (Betaflight 3.1.5), pico 1.05, 2% tras restar el sesgo del método. B: ajuste de fábrica de 3.1.5 (log a 7.9 kHz), pico cercano a 1.9, caída a 0.8 y oscilación: 87%, debido al peso del setpoint en D. C: dron de 3.5 pulgadas con 4.5.2, pico 1.49 (47%) y una caída poco profunda: feedforward hace el 60% del trabajo.

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.

Dos respuestas al escalón de roll: un lazo con poca amortiguación que cae y oscila, y una respuesta estable; línea discontinua: respuesta perfecta procesada con el mismo método
A: Betaflight 2026.6, log a 247 Hz: pico 1.39 a ~50 ms, caída a 0.95 y oscilación a ~9 Hz, ζ = 0.49. B: Betaflight 4.5.1, 1 kHz: pico 1.16, 12% en roll y pitch, t50 de 10–12 ms; no hay que tocar nada. Línea discontinua: lo que dibuja el método para una respuesta perfecta con el mismo retardo; su pico de 4% se resta del sobreimpulso. Sombreado: dispersión entre ventanas individuales, de la que se obtienen la mediana y el intervalo.

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

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ónD baseLímite del aumento
4.0–4.2d_min_rolld_roll
4.3–4.5d_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

Seguridad

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:

Más guías