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.
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:
- 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.
- 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
Componentes
- ControladorArduino UnoLa tolerante placa de 8 bits con la que la mayoría descubre la robótica.
- SensorMPU6050 IMUEl sensor inercial de 6 DOF para medir inclinación, balanceo y orientación angular en robots.
- DriverTB6612FNG Motor DriverPuente en H dual con tecnología MOSFET: alta eficiencia y tamaño ultracompacto para robots móviles.
- ActuadorN20 Micro Gearmotor with EncoderMicromotor con reductora metálica y encoder trasero, para que el robot sepa cuánto ha avanzado realmente.
- Chasis2WD Robot ChassisLa plataforma donde se atornillan dos motores, una rueda loca y toda tu electrónica.
- AlimentaciónBattery Power PackLa fuente de energía determinante: por qué la química y la resistencia interna importan más que los voltios.
Tutoriales de esta ruta
- Principiante · 45 minutesLeer el ángulo de inclinación con el MPU6050Convierte las cuentas brutas del MPU6050 en un ángulo de inclinación en grados, y aprende por qué ningún sensor funciona solo.
- Intermedio · 1 horaFiltro complementario: fusión de acelerómetro y giróscopoFusiona un acelerómetro ruidoso con un giróscopo que deriva en un único ángulo de inclinación fiable, en una línea de código.
- Avanzado · 2 horasControl PID en cascada para un robot autoequilibradoDos lazos PID anidados: uno mantiene el ángulo de inclinación, otro pide una inclinación para que el robot pueda ir a algún sitio.
- Principiante · 18 min de lecturaCómo sintonizar un controlador PID: guía práctica paso a pasoUn orden riguroso y práctico para sintonizar ganancias P, I y D sin tanteos a ciegas.
- Principiante · 17 min de lecturaLeer codificadores en cuadratura para distancia y velocidadConvierte los pulsos de un codificador en cuadratura en direccion, distancia y velocidad de rueda fiables.
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.