Saltar a contenido

Capítulo 37 — Robótica y Sistemas de Control

Objetivos de aprendizaje

  • Comprender el bucle percepción-decisión-actuación y el control en tiempo real.
  • Implementar un controlador PID y filtros (media móvil, Kalman).
  • Conocer ROS, el control de motores y la fusión de sensores.

37.1 Fundamentos de robótica

Un robot cierra el bucle: sensar → decidir → actuar, con restricciones de tiempo real (cap. 20). C domina el control de bajo nivel por su determinismo y acceso al hardware.


37.2 Control PID

El controlador PID (Proporcional-Integral-Derivativo) es el caballo de batalla del control: corrige el error entre el valor deseado (setpoint) y el medido.

typedef struct { double kp, ki, kd, integral, prev_err; } PID;

double pid_update(PID *c, double setpoint, double medido, double dt) {
    double err = setpoint - medido;
    c->integral += err * dt;
    double deriv = (err - c->prev_err) / dt;
    c->prev_err = err;
    return c->kp*err + c->ki*c->integral + c->kd*deriv;
}

Detalles que importan

En producción, añade anti-windup (limitar la integral), saturación de la salida y filtrado del término derivativo. El ajuste (Ziegler-Nichols, manual) es tan importante como la fórmula.


37.3 Filtros para robótica

  • Media móvil y filtro paso-bajo: suavizan ruido de sensores.
  • Filtro de Kalman: estimación óptima fusionando predicción y medición con incertidumbre — base de la navegación y el tracking.
  • Filtro complementario: fusión barata de giroscopio + acelerómetro (IMU).

37.4 ROS desde C

ROS (Robot Operating System) estructura el software robótico en nodos que se comunican por tópicos (publicador/suscriptor) y servicios. ROS 2 usa DDS y su capa C es rcl:

// ROS 2 (rcl/rclc): publicar en un tópico
rcl_publish(&publisher, &mensaje, NULL);

37.5–37.8 Motores, sensores, planificación y tiempo real

  • Motores: PWM (cap. 20), control de servos, steppers, lazo de velocidad/ posición.
  • Sensores y fusión: IMU, encoders, LIDAR, odometry.
  • Planificación de movimiento: A*, RRT, campos potenciales.
  • Tiempo real: RTOS (cap. 20), Linux con PREEMPT_RT, latencias acotadas.

Conexión con la actualidad

La robótica vive un momento explosivo —robots humanoides, drones autónomos, vehículos, automatización industrial— y su capa de control en tiempo real es, casi universalmente, C/C++. ROS 2 se ha consolidado como el estándar de la industria y la investigación, con su núcleo en C/C++ y un creciente uso de PREEMPT_RT (mainline en el kernel de Linux desde 2024) para control determinista sobre Linux. La gran tendencia de 2024–2025 es la fusión de control clásico (PID, Kalman) con aprendizaje por refuerzo y modelos de visión: la policy puede entrenarse en Python/GPU, pero su inferencia y el lazo de control se ejecutan en C en el robot, por latencia y fiabilidad. El control PID y el filtro de Kalman, con casi un siglo y medio siglo respectivamente, siguen siendo el primer recurso en cualquier sistema que se mueve en el mundo físico.


Ejercicios

Ejercicio 37.1 — PID en simulación ★★★

Controla un sistema simulado (p. ej., temperatura o posición de un carro) con tu PID; ajusta las ganancias y grafica la respuesta.

Ejercicio 37.2 — Filtro complementario ★★★

Fusiona datos simulados de acelerómetro y giroscopio para estimar el ángulo de inclinación.

Ejercicio 37.3 — Filtro de Kalman 1D ★★★★

Implementa un filtro de Kalman unidimensional para estimar la posición a partir de mediciones ruidosas.

Ejercicio 37.4 — Planificación A\* ★★★★

Planifica una ruta en una rejilla con obstáculos usando A*.


Referencias

  • Modern Robotics (Lynch & Park) — gratuito.
  • Probabilistic Robotics (Thrun, Burgard, Fox) — para Kalman y fusión.
  • ROS 2 Documentation.
  • Åström & Murray. Feedback Systems (gratuito) — teoría de control.