Guia compendio: PID normal vs PID potenciado por IA

Simulacion 2D educativa de un robot auto-balanceado de dos ruedas. Este documento junta la guia teorica, las metricas, la animacion y las actividades en un solo HTML.

1. Objetivo de aprendizaje

Comprender como se estabiliza un robot auto-balanceado usando un controlador PID clasico y como una capa de inteligencia artificial puede ajustar sus ganancias para mejorar el desempeno ante una perturbacion.

Idea central: el PID IA no reemplaza al PID. Lo potencia ajustando Kp, Ki y Kd segun el estado del robot: cerca del equilibrio actua suave; ante riesgo de caida actua mas fuerte; ante deriva intenta volver hacia el origen.

2. Teoria del modelo 2D

Un robot auto-balanceado de dos ruedas es un sistema naturalmente inestable. Si esta perfectamente vertical puede mantenerse por un instante, pero cualquier pequeno error angular genera un torque por gravedad que hace crecer la inclinacion. Por eso se estudia como un pendulo invertido sobre una base movil.

La variable principal es theta, el angulo del cuerpo respecto a la vertical. Cuando theta = 0, el centro de masa esta alineado sobre el eje de las ruedas. Cuando theta se aleja de cero, el centro de masa queda desplazado y la gravedad empieza a tumbar el robot.

theta_ddot = (g / L) * sin(theta) - (x_ddot / L) * cos(theta) - damping * theta_dot

La intuicion fisica es esta: el robot no se endereza empujando el cuerpo directamente; se endereza moviendo la base. Las ruedas deben acelerar para colocar el punto de apoyo debajo del centro de masa. Si aceleran en el sentido incorrecto, la caida empeora.

3. Teoria de control: PID normal y PID IA

PID normal

El PID normal usa ganancias fijas durante toda la simulacion. Calcula una accion de control a partir del error angular, su acumulacion y su velocidad de cambio:

u = Kp * error + Ki * integral(error) + Kd * derivative(error)
  • Kp: empuja mas fuerte cuando el angulo esta lejos de cero.
  • Ki: corrige errores persistentes, pero puede causar acumulacion excesiva.
  • Kd: frena el movimiento cuando el robot se inclina muy rapido.

Su ventaja es que es simple y facil de explicar. Su desventaja es que responde igual aunque el robot este casi estable, cayendo rapido o derivando.

PID potenciado por IA

El PID IA usa una mezcla de expertos. No es una caja negra completa: sigue siendo un PID, pero sus ganancias cambian segun el estado del robot.

  • Balance: movimientos suaves cerca de cero grados.
  • Recuperacion: accion fuerte cuando hay riesgo de caida.
  • Deriva: corrige desplazamiento horizontal acumulado.

La capa inteligente calcula pesos para cada experto. Si aumenta el riesgo de caida, sube el peso de recuperacion; si el robot se aleja del origen, sube el peso de deriva. La mejora esperada no es que el robot nunca se mueva, sino que se aleje menos de la vertical y termine con menor error.

4. Perturbacion y como leer las graficas

La simulacion aplica una perturbacion externa en t = 4.0 s. En las graficas aparece como una linea vertical. Esa linea representa un golpe o empuje sobre el sistema: no es un error de la grafica, es la prueba que usamos para ver si el controlador puede recuperarse.

Antes del golpe: se observa que tan bien el controlador mantiene el robot cerca de cero. Durante el golpe: aparece un cambio brusco en inclinacion, RPM o aceleracion. Despues del golpe: se evalua si el robot vuelve hacia la vertical y si la deriva |x| baja o queda creciendo.

La deriva firmada x indica hacia que lado se movio el robot. La magnitud |x| indica que tan lejos esta del origen sin importar el lado. Por eso se agrego la grafica Magnitud de deriva |x|: ahi se ve mas claro si el robot termina mas cerca del punto inicial.

5. Resumen de resultados

Mejora visible 18.2% menos picoEl PID IA alcanza menor inclinacion maxima: 14.64 deg vs 15.95 deg.
Mejora visible 210.3% menos errorEl error absoluto integrado baja de 1.5019 a 1.3478.
Costo de la mejora+32.1% RPM maxEl PID IA usa mas esfuerzo: 133.3 rpm vs 100.9 rpm.
Deriva final26.6% menos |x| finalAl final queda mas cerca del origen: 0.094 m vs 0.129 m.
ControladorMax tiltIAEMax x|x| finalMax RPMInterpretacion
PID normal15.95 deg1.50190.166 m0.129 m100.9Base estable y sencilla.
PID IA14.64 deg1.34780.225 m0.094 m133.3Mejor estabilidad angular y menor deriva final con mas esfuerzo.

6. Animacion de estabilizacion

PID normalPID IAt = 0.00 s

7. Graficas principales

PID normalPID IA

Inclinacion del cuerpo

La linea vertical marca el golpe externo; despues se compara que controlador vuelve mas cerca de cero.

perturbacion t=4.0s 0 s 12.0 s 18.48 deg -18.21 deg PID normal: -12.13 degPID IA: 9.68 deg

Comando equivalente de motor

Aqui se ve el costo de la mejora: el PID IA puede pedir mas motor para corregir antes.

perturbacion t=4.0s 0 s 12.0 s 151.89 rpm -117.73 rpm PID normal: -62.89 rpmPID IA: 57.67 rpm

Deriva horizontal

La curva muestra hacia donde se desplaza la base; el valor final permite ver si la deriva baja.

perturbacion t=4.0s 0 s 12.0 s 0.32 m -0.27 m PID normal: 0.13 mPID IA: -0.09 m

Magnitud de deriva |x|

Esta grafica elimina el signo y muestra si la distancia al origen va bajando despues de la perturbacion.

perturbacion t=4.0s 0 s 12.0 s 0.32 m -0.10 m PID normal: 0.13 mPID IA: 0.09 m

Ganancia Kp usada

En el PID IA, Kp cambia porque la mezcla de expertos ajusta la agresividad del controlador.

perturbacion t=4.0s 0 s 12.0 s 16.52 12.15 PID normal: 13.50PID IA: 13.91

Peso del experto de recuperacion

Despues de la perturbacion deberia subir cuando el controlador detecta mayor riesgo de caida.

perturbacion t=4.0s 0 s 12.0 s 0.64 -0.10 PID normal: 0.00PID IA: 0.19

8. Actividades para estudiantes

Actividad 1: Observar la mejora

  1. Reproduce la animacion.
  2. Compara cual cuerpo se aleja mas de la vertical.
  3. Relaciona lo observado con la metrica de max tilt.

Actividad 2: Cambiar condiciones iniciales

python scripts/sim_2d_pid_ai.py --initial-tilt-deg 10
python scripts/create_2d_compendium.py

Actividad 3: Aumentar perturbacion

python scripts/sim_2d_pid_ai.py --impulse-accel -5.0
python scripts/create_2d_compendium.py

Preguntas de reflexion