Ir al contenido

Control continuo

El control continuo opera con señales que varían de forma suave en el tiempo. Utiliza ecuaciones diferenciales para modelar el comportamiento de sistemas dinámicos. Las señales de los sensores usados son analógicas con valores en un rango continuo, el principal controlador usado se conoce como PID que es controlador por retroalimentación más usado en la industria.

A diferencial del control continuo, el control lógico se basa en reglas discretas de verdadero/falso (1/0). Trabaja con estados bien definidos y transiciones entre ellos, para estos:

  • Las señales discretas o binarias
  • Usa lógica booleana: AND, OR, NOT
  • Se implementa principalmente usando autómatas/máquinas de estados finitos (MEF)

Los sistemas modernos frecuentemente combinan ambos enfoques: lógica para decisiones secuenciales y control continuo para regular variables analógicas.

El controlador PID es un mecanismo de retroalimentación que ajusta continuamente la entrada del sistema para minimizar el error entre el valor deseado y el valor actual. Cada letra representa un componente:

  • la P (Proporcional) genera una acción proporcional al error presente
  • la I (Integral) acumula errores históricos para eliminar desviaciones persistentes
  • la D (Derivativa) anticipa cambios futuros del error basándose en su tasa de cambio.

La combinación de estos tres términos permite que el PID mantenga el sistema estable y cercano al punto de referencia deseado.

Para el ejemplo con el LEGO usaremos inicialmente un control proporcional. Para este necesitaremos la camára conectada al mismo wifi del PC y el LEGO emparejado al PC.

  • ¿Porqué el robot no se alinea con el centro de la imagen?
  • ¿Qué haria falta?

Usar el siguiente código en para el LEGO y probar el seguimiento de linea.

Cuando usemos el código, variar con la flecha del teclado lo siguiente:

  • Aumentar el valor de la velocidad translacional VtV_t
  • Aumentar el valor de la ganancia proporcional KpK_p
  • ¿Qué ocurre en cada caso, al aumentar y al diminuir los valores?

Ver el siguiente vídeo del MIT sobre el control PID en vehículos autónomos

Paso 1 — Instalar las librerías
Ventana de terminal
pip install ev3-dc thread_task scipy matplotlib keyboard

ev3-dc controla el EV3 por Bluetooth, como en la semana 12; thread_task ejecuta la orden de los motores cada 0.1 s en paralelo con la cámara, y keyboard lee las flechas del teclado en el ejercicio.

Paso 2 — Conectar el EV3 y la cámara
  1. Encienda el EV3 y verifique que está emparejado por Bluetooth con el PC, como en la semana 12.
  2. Inicie la cámara del celular y compruebe la IP con C01 (práctica 1).
  3. Tenga a mano la dirección MAC de su ladrillo y los valores de radio de rueda y trocha calibrados de su robot.
Paso 3 — Configurar C04

Descargue C04-control-P-rotational-speed.py y llene los dos bloques del inicio:

MAC = '00:16:53:50:8A:86'
RADIUS_WHEEL = 0.0210
TREAD_DISTANCE = 0.1224
TRANSLATIONAL_SPEED = 0.0
  1. MAC: la dirección del ladrillo.
  2. RADIUS_WHEEL: el radio calibrado de la rueda, en metros.
  3. TREAD_DISTANCE: la trocha calibrada, es decir, la distancia completa entre las ruedas, en metros.
  4. TRANSLATIONAL_SPEED: la velocidad de avance en m/s. Déjela en 0.0 para el paso 4.
  5. Los datos de la cámara (llene IP, PUERTO e IPHONE, igual que en C01) y la rotación de la imagen, si en la práctica 1 tuvo que cambiarla.
Paso 4 — Girar hacia la línea
  1. Pegue una tira de cinta negra en el piso y ponga el robot encima, con la cinta desviada hacia un lado de la imagen.

  2. Ejecute C04 con TRANSLATIONAL_SPEED = 0.0: sin velocidad de avance, el robot solo gira buscando centrar la línea.

  3. Observe la ventana de video: la línea vertical roja oscura es el centro de la imagen y el punto es el centro de la línea.

  4. Para medir cuánto queda desalineado, agregue después del cálculo de vr_new una línea que imprima los dos valores:

    print(f"error_x = {error_x:.0f} px vr = {vr_new:.2f}")
  5. Repita el experimento desde varias posiciones iniciales, a ambos lados, y anote el error final en cada caso.

  6. Presione q en la ventana de video para detener el programa; el robot frena antes de terminar.

Paso 5 — Responder las preguntas del ejemplo

Con los errores finales que anotó, responda las preguntas del ejemplo 1. Pistas para pensar:

  • ¿Qué valor le llega al motor cuando Kp * error_x es menor que 1? Revise qué hace int() dentro de update_speed_turn.
  • ¿Qué término del PID está pensado justamente para el error que se queda?
Paso 6 — Seguir la línea con el teclado (C05)
  1. Descargue C05-control-P-rotational-speed-keyboard.py y haga los mismos cambios del paso 3.

  2. Arme un recorrido con cinta negra que tenga al menos una recta y una curva.

  3. Ejecute el programa. El robot arranca con vt = 0 y Kp = 0.05. Las flechas cambian los valores mientras el programa corre, y cada cambio se imprime en la terminal:

    TeclaEfecto
    ↑ / ↓sube / baja la velocidad de avance VtV_t en 5
    ← / →sube / baja la ganancia KpK_p en 0.01
  4. Observe la ventana de gráficas. Abajo está la gráfica temporal del control: la referencia (línea azul punteada, el centro de la imagen) y la medida (línea roja, el centro de la cinta) durante los últimos 20 segundos. La distancia entre las dos es el error que corrige el control P.

  5. Suba VtV_t poco a poco hasta que el robot avance siguiendo la cinta.

  6. Con VtV_t fijo, pruebe varias ganancias, por ejemplo 0.02, 0.05, 0.1 y 0.2. Anote en una tabla si el robot sigue la línea, si oscila o si la pierde en la curva, y describa cómo se ve la medida en la gráfica temporal: ¿se acerca a la referencia?, ¿se queda separada?, ¿oscila alrededor de ella?

  7. Repita con una VtV_t mayor y compare.

Paso 7 — Ver el video y cerrar
  1. Vea el video del MIT de la actividad 3.
  2. Con su tabla del paso 6, responda las preguntas del ejercicio: qué pasa al subir y al bajar cada valor, y por qué una velocidad mayor exige ajustar la ganancia.