Capítulo 11
PID: arreglándolo todo
¿Cómo eliminamos la caída y paramos la oscilación?
Capítulo 11: PID: arreglándolo todo ↗
La caída que no desaparece
Theo: ¿Recuerdas el capítulo 2? Nuestro controlador P dejaba el dron colgando por debajo de 2 m, y ninguna lo arreglaba. Hora de averiguar qué puede arreglarlo.
Para sostener el dron, los motores tienen que empujar N, para siempre. Un controlador P solo empuja cuando hay error: . Así que, para empujar 4,9 N, necesita un error de . Con = 20 N/m eso es = 4,9/20 ≈ 24,5 cm, para siempre. La caída no es un fallo de nuestro ajuste. Es el precio que cobra P por sostener cualquier cosa.
June: Entonces necesitamos una parte del controlador que pueda empujar 4,9 N con error cero. Algo con memoria.
I: un montón de error pasado
Esta es la idea. Lleva la cuenta acumulada del error, el área bajo la curva del error, exactamente el "área acumulada" del capítulo 3. Empuja en proporción a ese montón:
Mientras el dron está por debajo de 2 m, el error es positivo y el montón no para de crecer, así que el empuje tampoco. El montón solo deja de crecer cuando el error es exactamente cero. En ese momento simplemente se queda como está, manteniendo el empuje que haya acumulado. Esa es la memoria que quería June.
Theo: Qué astuto. El dron no puede quedarse quieto en ningún sitio que no sea 2 m, porque en cualquier otro el montón seguiría cambiando.
Capítulo 11: PID: arreglándolo todo ↗
¡Primero, predice! Mika quiere que la caída desaparezca rápido, así que planea subir muchísimo . ¿Qué pasará?
El widget empieza con = 10 N/(m·s). Fíjate en tres cosas: el área sombreada en rojo (el error que se va amontonando), la parte integral del empuje, en naranja discontinuo, subiendo hasta la línea morada de la gravedad, y la lectura de la caída. Lleva a 0 para recuperar la caída del capítulo 2 y luego prueba valores más grandes. está fijo en 20 N/m.
Capítulo 11: PID: arreglándolo todo ↗
Capítulo 11: PID: arreglándolo todo ↗
Mika: ¡A tope! ¡! ¡Fuego contra la caída!
Mika: …¿por qué no para? Los rebotes han ido creciendo y creciendo, ¡y ahora sube y baja como un yoyó medio metro, para siempre!
Theo: Con 50 te pasaste de algún tipo de borde. Probé unos cuantos valores: por debajo de unos 40 se estabiliza, por encima no (y el yoyó tarda más o menos un segundo por oscilación). Enseguida veremos por qué. El montón siempre va un poco retrasado: sigue empujando hacia arriba cuando el dron ya ha pasado los 2 m.
Ese es el error de Mika, y es muy común: la integral arregla la caída, pero añade retraso, y el retraso hace oscilar las cosas (eso nos lo enseñó la ducha). Necesitamos algo que empuje en contra de la velocidad. (Según las matemáticas, sus oscilaciones deberían crecer para siempre. Se frenan en torno al medio metro solo porque el empuje llega a 0 N en cada oscilación: las hélices no pueden tirar hacia abajo, el límite del capítulo 10.)
D: un amortiguador virtual
June: En el capítulo 7, el amortiguador era lo que calmaba al resorte. ¿Y si el controlador finge ser un amortiguador?
Un amortiguador empuja en contra de la velocidad. Así que añadamos un término que empuje en contra de lo rápido que se mueve el dron:
Mira la ecuación del dron: el rozamiento ya aporta . El término D añade encima, así que el dron se comporta como si su rozamiento fuera . Estamos añadiendo resistencia del aire por software.
Capítulo 11: PID: arreglándolo todo ↗
Capítulo 11: PID: arreglándolo todo ↗
Activa la gran ganancia I de Mika y luego añade amortiguamiento. Incluso N·s/m lo devuelve a estable (lleva el borde hasta ): el yoyó sin fin se convierte en un rebote que se apaga. Pero sigue pasándose al menos una cuarta parte, añadas la D que añadas. Ese montón enorme simplemente recuerda demasiado. Ahora quita la de Mika (vuelve a 10) y prueba –5: calma. I y D se compensan: D te da margen para I, pero no un margen ilimitado.
June: Si 4 va bien, 10 tiene que ir mejor. ¡Amortiguador a tope!
Mika: Sube tan despacito… ¿y luego se pasa de los 2 m igualmente? ¿Tarde?
Theo: June, ¡es otra vez tu dron de miel del capítulo 7! Pasado , la pareja rápida está sobreamortiguada. Pero ahora también hay un montón, y un dron lento le da al montón tiempo de llenarse de más.
El amortiguamiento crítico está donde ζ = 1: N·s/m con = 20. Con = 10, pasar de = 4 a 10 lleva el sobreimpulso de 0 a un 8 %, y el tiempo de establecimiento de menos de un segundo a unos 5 s. Más D no siempre es mejor; ahora el widget te lo dice cuando te pasas.
Mika: ¡O sea que D predice el futuro! Ve adónde va el dron y llega antes.
Theo: No exactamente. Solo conoce la pendiente ahora mismo. Es como adivinar dónde caerá una pelota suponiendo que sigue en línea recta. Normalmente es una suposición decente, pero no es magia. Espera a que le demos un sensor nervioso.
Lo que hace cada mando a los polos
Hora de usar el mapa del capítulo 10. Escribamos el lazo entero, con :
La integral es incómoda, así que toma la pendiente de los dos lados. Pendiente y área se deshacen mutuamente (capítulo 3), así que la pendiente de es simplemente . La gravedad es constante, así que su pendiente es cero: simplemente desaparece. Con una consigna fija, . Término a término:
Vuelve a juntarlos y pasa a la izquierda todo lo que lleva . Los tres puntos de significan la pendiente de la pendiente de la pendiente:
Theo: La gravedad ha desaparecido de la ecuación. Ese es el mata-caídas en forma de álgebra: a la altura final le da igual . Siempre que llegue a estabilizarse, claro. El dron de Mika con nunca lo hizo.
Vuelve a suponer . Con I activa, la ecuación es cúbica, así que hay tres polos. Si , no hay integrador: tomar la pendiente añadió una raíz falsa en , el factor común se cancela y el dron PD tiene dos polos.
Para una cúbica con todos los coeficientes positivos, , hay una prueba clásica (el criterio de Routh–Hurwitz) que dice que los tres polos están en la mitad izquierda justo cuando . Para nuestro dron, ese es el borde del abismo:
Mika: Una regla con el nombre de dos personas. ¿Nos la tenemos que creer sin más?
Theo: Para nada. Podemos encontrar el borde nosotros mismos.
En el instante en que una pareja oscilante llega al eje vertical, su parte real es cero, así que prueba en la cúbica. Como e , las partes reales y las partes laterales tienen que sumar cero cada una por su lado:
La segunda dice que . Métela en la primera:
Capítulo 11: PID: arreglándolo todo ↗
Con los valores iniciales ( = 20, sin D) el borde está en 40. Justo ahí es donde el dron de Mika se volvió loco, y su yoyó tardaba más o menos un segundo por oscilación: 6,32 rad/s es la propia ωn del dron P del capítulo 7. Añadir lleva el borde hasta 200. No te fíes de nosotros: cambia los números de arriba, o los deslizadores de abajo, y mira los polos, el minimapa y la respuesta al escalón.
Capítulo 11: PID: arreglándolo todo ↗
- El mando I () añade un tercer polo al lazo y puede empujar una pareja a la derecha. Si te pasas, cruza la línea.
- El mando D () eleva el límite estable de ganancia I al añadir amortiguamiento. Las trayectorias pueden girar: más D no mueve todos los polos a la izquierda.
- El mando P () sobre todo separa la pareja oscilante hacia arriba y abajo: más rápido, pero más oscilante si D no acompaña.
El patio de ajuste
Ahora lo de verdad: despegar del suelo hasta 2 m con motores reales (0–20 N). Consigue las cuatro estrellas. Cada vez que cambias una ganancia, el último vuelo se queda como un fantasma tenue.
Capítulo 11: PID: arreglándolo todo ↗
June: Quité el anti-windup, puse = 30, = 60, = 2… ¡y el dron salió disparado hasta 4 m, fuera de su dibujo!
Theo: El montón siguió creciendo todo el tiempo que los motores iban a tope. Con el anti-windup activado, las mismas ganancias tienen su pico en 2,8 m. Los mismos mandos, una memoria muy distinta.
Dos avisos sobre D
Aviso 1: la patada derivativa
El dron flota a 1 m. En s movemos la consigna a 1,5 m. Si D usa la pendiente del error, el error salta medio metro en un instante. Su pendiente es enorme, y el empuje también.
Capítulo 11: PID: arreglándolo todo ↗
Capítulo 11: PID: arreglándolo todo ↗
Mika: ¿Con el error pide más de 200 N? ¿A unos motores que no pasan de 20?
June: Y no pueden decir que no con educación. Se ponen a tope un instante y el dron se lleva una buena patada.
Usar en su lugar la pendiente de la altura medida lo arregla: el dron no puede teletransportarse, así que su altura no tiene saltos. El mismo amortiguamiento, sin patada. Casi todos los PID reales lo hacen así.
Aviso 2: el ruido
Los sensores de altura reales tiemblan un par de centímetros. Un par de centímetros de temblor, mil veces por segundo, tiene una pendiente enorme. D lo amplifica y lo manda directo a los motores. La solución es suavizar la medida antes de calcular su pendiente (un filtro con constante de tiempo ), a costa de reaccionar un poco más tarde.
Capítulo 11: PID: arreglándolo todo ↗
Capítulo 11: PID: arreglándolo todo ↗
Mika: Vale, D no predice el futuro. Predice lo que le apeteció al ruido hace un milisegundo.
Lo que hemos arreglado
Lo que descubrimos
- P empuja en proporción al error, pero tiene que dejar una caída para sostener el dron.
- I amontona el error pasado; el único punto de reposo es error cero, así que elimina la caída, que se extingue con una constante de tiempo de unos . Añade retraso, así que demasiada hace oscilar.
- D empuja contra la velocidad: un amortiguador virtual que se suma al rozamiento , así que . Más D no siempre es mejor: sobreamortiguado, el dron se arrastra y el montón se llena de más.
- El lazo cerrado es ; es estable justo cuando .
- Calcula D a partir de la medida (sin patada) y fíltrala (menos ruido).
June probó nuestro PID de dron en la ducha… y oscilaba exactamente igual que nosotros en el capítulo 0. ¿Qué tiene el retardo?