Ruta de construcciónAvanzadoUn fin de semana

Construye un robot de autoequilibrio con MPU6050 y PID

Un robot de dos ruedas que se levanta solo, resiste empujones externos y mantiene su posición fija sobre el suelo sin derivar incontroladamente.

Esquema técnico de Construye un robot de autoequilibrio con MPU6050 y PIDθTILT → PID → DRIVE UNDER IT

Qué va a construir

Un robot que se sostiene sobre dos ruedas sin que nada lo sujete salvo aritmética.

La construcción mecánica es realmente simple: dos motores, un bastidor, un sensor, una batería. Lo que hace que este proyecto valga la pena es que el problema de control no tiene un fallo suave. Un seguidor de línea con ganancias mediocres sigue la línea, mal. Un robot de equilibrio con ganancias mediocres está en el suelo. Ese filo es lo que lo convierte en la mejor forma posible de entender de verdad el PID.

Al final tendrás un robot que se levanta, resiste un empujón y se queda más o menos donde lo pusiste.

Por qué es difícil

Toda la masa del robot está por encima del eje. Eso lo convierte en un péndulo invertido: la vertical es un equilibrio igual que un lápiz equilibrado sobre su punta es un equilibrio — real en principio, imposible sin corrección constante. Inclínalo un poco y la gravedad produce un par que lo inclina más, y más rápido.

La única defensa del robot es que puede mover su propia base. Mover las ruedas hacia delante empuja el eje de vuelta bajo el centro de masas y vuelve a colocar el cuerpo en vertical. De ahí sale la regla contraintuitiva que gobierna todo el proyecto: para dejar de caer hacia delante, conduce hacia delante.

De ahí se siguen dos consecuencias, y dan forma a todo lo de abajo:

  1. No puedes controlar la posición directamente. Mover los motores desde el error de posición acelera la base fuera de debajo de la masa, y el robot cae en dirección contraria a la que pediste. La posición tiene que controlarse a través de la inclinación.
  2. Hay un límite duro de recuperación, de unos 35°. Pasado ese punto, la aceleración necesaria supera lo que las ruedas pueden entregar antes de que el cuerpo llegue al suelo, y ninguna ganancia ayuda.

Lista de materiales

Componente Cant. Coste aprox. Notas
Arduino Uno o Nano 1 $5 El lazo interno quiere 100–200 Hz, que un Uno maneja sin problemas
MPU-6050 1 $2 Montado rígido y a nivel, cerca del eje de las ruedas
Motores N20 con encoder 2 $16 Reductor metálico, innegociable. Mira abajo
TB6612FNG 1 $3 La caída de ~2 V del L298N cae exactamente donde viven las correcciones finas
Chasis 2WD 1 $10 Alto y estrecho. Monta la batería arriba: esto es contraintuitivo
Pack de baterías 1 $10 2×18650. Es también la masa útil

Total: unos $45–60.

Tres de esas decisiones son estructurales, y equivocar cualquiera de las hace que el robot sea imposible de ajustar en vez de solo peor.

Motores con reductor metálico. Un robot de equilibrio invierte el sentido cientos de veces por segundo, en incrementos pequeños. El backlash se cobra en cada inversión, así que la zona muerta de un reductor de plástico cae exactamente donde la corrección necesita actuar. El resultado es un robot que oscila alrededor de la vertical y nunca se estabiliza, por muy cuidadosamente que ajustes las ganancias, y se lee de forma convincente como un problema de ajuste.

Un driver MOSFET. El L298N quema unos 2 V antes de que el motor vea nada, lo que significa que las órdenes de corrección pequeñas caen por debajo de la tensión a la que el motor se mueve siquiera. Otra vez una zona muerta justo donde viven las correcciones finas.

Batería montada arriba. Esta es la que sorprende a la gente. Un robot más alto con la masa arriba cae más despacio —el periodo del péndulo va con la raíz cuadrada de la longitud—, lo que da al lazo de control más tiempo para reaccionar. Un robot de equilibrio bajo y achaparrado es más difícil, no más fácil.

Orden de construcción

Hazlos en este orden. Cada paso es verificable por separado, lo cual importa enormemente en un proyecto cuyo estado final es binario.

1 — Consigue un ángulo de inclinación fiable. Cablea el MPU6050 y sigue leer la inclinación con un MPU6050. No avances hasta que el ángulo marque cerca de cero con el robot en vertical, se mueva en el sentido correcto cuando lo inclinas, y se quede quieto cuando el robot está quieto. Todo lo de abajo se construye sobre este número.

2 — Consigue que el ángulo sobreviva al movimiento. Un acelerómetro solo es inusable en un robot en movimiento, y un giróscopo solo deriva en pocos segundos. El filtro complementario los fusiona en una línea. Pruébalo sacudiendo el robot en bloque sin rotarlo: el ángulo apenas debería moverse.

3 — Ajusta el lazo interno en el simulador. Antes de que caiga cualquier hardware, usa el simulador de equilibrio para construir intuición sobre lo que hace cada ganancia. Pon la ganancia derivativa a cero en un robot que ahora mismo se está equilibrando y mira cómo la oscilación crece hasta que cae; ese fallo sale mucho más barato verlo ahí que sobre tu mesa.

4 — Consigue que se levante. Escribe el lazo interno a partir de control de equilibrio PID en cascada, con el lazo externo desactivado. El éxito aquí es un robot que se mantiene erguido y al que se le permite deambular. No intentes arreglar todavía la deambulación.

5 — Añade encoders y el lazo externo. Con el conteo en cuadratura dando la posición real de las ruedas, activa el lazo externo para que el robot mantenga un sitio. Empieza con una ganancia mucho más baja de lo que parece razonable: su efecto es indirecto y es fácil que los dos lazos luchen.

Notas de hardware que sí importan

Monta la batería arriba. Es contraintuitivo y es la decisión mecánica más útil del proyecto. Subir el centro de masas aumenta el periodo del péndulo, así que el robot cae más despacio y el lazo tiene más oportunidades de atraparlo. Un robot corto y pesado abajo es mucho más difícil de equilibrar que uno alto.

Usa reductores metálicos. Un robot de equilibrio invierte el sentido cientos de veces por segundo. Los motores con reductor de plástico tienen suficiente backlash como para que cada inversión desperdicie los primeros pocos grados sin hacer nada, cosa que el lazo no puede ajustar. Los motores N20 con encoder son la respuesta habitual.

Usa un TB6612FNG, no un L298N. El TB6612FNG pierde muchísima menos tensión en su etapa de salida. En un L298N, las órdenes de corrección pequeñas caen por debajo de la tensión a la que el motor se mueve siquiera, lo que crea una zona muerta exactamente donde viven las correcciones finas.

Dale a los motores su propia alimentación. Un pack de baterías que se hunde con la corriente de bloqueo apagará el microcontrolador a mitad de una corrección. El robot se cae entonces por motivos que no tienen nada que ver con tu lazo de control, que es una pesadilla de depurar.

Verificar sobre la marcha

Comprobación Lo que demuestra
El ángulo marca ~0° en vertical sujetado a mano No queda trim de montaje en la medida
Sacudir sin rotar apenas mueve el ángulo El filtro confía en el giróscopo durante la aceleración
Las ruedas conducen hacia delante al inclinarlo hacia delante El signo del lazo interno es correcto
El robot resiste un empujón y se estabiliza sin que la oscilación crezca La ganancia derivativa está haciendo su trabajo
El robot deja de derivar una vez activado el lazo externo Los encoders y el lazo externo están cableados correctamente

Qué significa hacerlo bien

Medida Apenas equilibrándose Bien ajustado
Frecuencia del lazo interno (inclinación) 100 Hz 200–500 Hz
Frecuencia del lazo externo (posición) 20 Hz 20–50 Hz: varias veces más lento que el interno
Oscilación de inclinación en reposo ±3–5° Menos de ±1°
Deriva desde el punto de partida en 60 s 1–2 m Menos de 30 cm
Se recupera de un empujón de Un toque suave Un empujón firme
Constante del filtro complementario 0.98 0.98–0.995, elegida y no copiada
Tiempo de funcionamiento antes de deambular Segundos Indefinido

El cociente entre las frecuencias de los lazos es el número que más se equivocan las primeras construcciones. El lazo interno sostiene la inclinación; el lazo externo pide una inclinación para poder desplazarse. Si el lazo externo corre a una frecuencia cercana a la del lazo interno, está persiguiendo un objetivo al que el lazo interno todavía no ha llegado, y los dos luchan. Una separación de cinco a diez veces es la regla que funciona.

La fila de la “deriva” es para lo que sirven los encoders, y conviene ser claro al respecto: un robot solo con lazo de inclinación se equilibrará stupendamente y deambulará por la habitación, porque nada le dice dónde está. Está erguido y perdido. Añadir el lazo externo de posición es lo que lo convierte de una demostración en un robot.

Convenciones de signo: lo que tira una tarde entera

Cuatro signos tienen que coincidir, y no hay forma de deducirlos razonando: tienes que comprobar cada uno en el banco, con el robot en la mano:

Comprobación Sujeta el robot y… Debería…
Signo de la IMU Inclínalo hacia delante Informar de una inclinación positiva (o negativa de forma consistente: elige una)
Signo del motor Manda una salida positiva Mover las ruedas hacia delante
Signo del lazo interno Inclínalo hacia delante con el lazo corriendo Mandar las ruedas hacia delante, para atajar la caída
Signo del lazo externo Empújalo hacia delante desde el reposo Inclinarse hacia atrás para volver

Si inviertes el tercero, el robot acelera su propia caída, con fuerza, en la dirección en la que ya iba. Es inconfundible, y merece la pena probarlo con las ruedas en el aire.

Cuando no funciona

Casi todos los fallos son una de cinco cosas, y se parecen lo bastante poco entre sí como para distinguirlas:

  • Se desploma nada más encender: el signo del lazo interno está invertido.
  • Oscilación creciente hasta caer: ganancia derivativa demasiado baja, o la D tomada de un ángulo diferenciado en vez de la velocidad angular del giróscopo.
  • Zumba estando erguido: ganancia proporcional demasiado alta, o el lazo corriendo demasiado despacio para esas ganancias.
  • Se hunde hasta el suelo sin pelear: ganancia proporcional demasiado baja, o los motores saturando.
  • Se equilibra pero se aleja: trim de montaje, con demasiado poca integral para absorberlo.

La tabla de modos de fallo recorre cada uno con más detalle, y todos ellos se pueden reproducir a propósito en el simulador, que es la forma más rápida de aprender a reconocerlos.

Hoja de ruta del proyecto

La ruta de construcción

Sigue el árbol tecnológico desde las piezas hasta un robot que funciona. Cada nodo se desbloquea cuando completas sus requisitos previos, y tu progreso se guarda en este dispositivo.

0 / 16 completados

100%
Tutorial

Por qué vuelca hacia adelante o atrás

18 min

Abrir tutorial
Componente

Construye el bastidor del robot

Component

Ver componente
Componente

Añade la unidad inercial (IMU)

Component

Ver componente
Componente

Añade el controlador de motores

Component

Ver componente
Ruta de aprendizaje

Control PID

Learning path

Abrir ruta
Componente

Añade motorreductores con encoder

Component

Ver componente
Ruta de aprendizaje

Control de motores

Learning path

Abrir ruta
Montaje

Consigue que se mantenga erguido

Build

Objetivo

Haz que mantenga su posición

Goal

Componentes

Tutoriales de esta ruta

Practica antes de cablear

Ajústalo en el simulador en vivo

La ruta de construcción pasa por un laboratorio en el navegador. Consigue aquí el comportamiento correcto y luego traslada tus ajustes al robot real.

Preguntas frecuentes

¿Es adecuado un robot de autoequilibrio como primer proyecto de robótica?

Es un mal primer proyecto pero un magnífico tercer proyecto. El cableado no encierra dificultad, pero el sistema físico es intrínsecamente inestable: no admite funcionamiento parcial, o se mantiene erguido o cae al suelo, y un signo de ganancia invertido es indistinguible de parámetros mal sintonizados si no se cuenta con experiencia previa. Conviene construir antes un seguidor de línea para familiarizarse con drivers de motor y sintonía PID básica; tras ello, este proyecto se convierte en un reto enfocado de control dinámico.

¿Por qué vibra violentamente el robot en lugar de quedarse quieto en equilibrio?

Principalmente por una ganancia proporcional (Kp) sobredimensionada para la frecuencia del bucle, o bien por holgura mecánica (backlash) en los engranajes de la reductora. Reduce Kp primero. Si la oscilación persiste con ganancias bajas, observa las ruedas al invertir sentido: si se aprecia una zona muerta antes de transmitir el giro, la reductora de plástico es la causa raíz y ningún ajuste de software lo resolverá; se precisa una caja reductora totalmente metálica.

¿Son imprescindibles los codificadores (encoders) en las ruedas?

No para lograr que se mantenga erguido. El lazo de control interno únicamente precisa el ángulo de inclinación de la IMU, por lo que un robot sin encoders mantendrá el equilibrio perfectamente; sin embargo, derivará lentamente por la sala al no disponer de referencia de posición lineal. Los encoders son necesarios para el lazo externo secundario que fija la posición estacionaria sobre el suelo.

¿A qué frecuencia debe ejecutarse el lazo de control?

200 Hz representa un umbral mínimo aconsejable para el lazo interno de inclinación, siendo preferible operar a 250–500 Hz. El tiempo de caída gravitatoria natural de un péndulo invertido pequeño impone este requisito estricto: desde la vertical hasta un ángulo irrecuperable transcurre una fracción de segundo, por lo que un bucle a 50 Hz carece de suficientes ciclos de intervención correctiva. Se debe temporizar con un timer de hardware y no con llamadas 'delay()'.

¿Por qué el robot equilibra bien pero avanza continuamente en una dirección?

Por desalineación angular estática de la IMU (mounting trim). Si el sensor quedó fijado físicamente con un grado de inclinación respecto a la vertical verdadera, el lazo cerrará error intentando mantener esa inclinación errónea: sostener una caída constante equivale a una aceleración continua hacia adelante. Mide ese desfase con el robot sostenido a plomo manualmente, réstalo como constante en el código y deja que la acción integral (Ki) absorba el resto.