Construya un robot mecanum omnidireccional con ESP32
Un robot que recorre un cuadrado de 1 metro en traslación pura, retorna dentro de 5 cm sin desviar el rumbo y mantiene su trayectoria global mientras rota sobre sí mismo.
Qué va a construir
Un robot de cuatro ruedas que se mueve en cualquier dirección por el suelo sin tener que girar antes, y que puede girar sin cambiar hacia dónde va. Empújalo de lado por un pasillo donde apenas cabe; mantén una cámara apuntando a algo mientras orbitas alrededor; corrige 3 cm de desviación respecto a una línea dando pasos de 3 cm, en vez de salir en curva y volver.
Es el primer robot de este sitio con tres velocidades controlables de forma independiente en lugar de dos. También es el primero cuya tracción es realmente más difícil que sus sensores, y por eso casi toda la construcción son motores, encoders y lazos de control.
La prueba de aceptación es deliberadamente directa: recorre un cuadrado de 1 m desplazándote lateralmente y vuelve a casa con 5 cm de margen y el rumbo sin cambios. Ningún robot de tracción diferencial puede ni intentar esa prueba.
La constante que gobierna el proyecto
Todo en esta construcción se reduce a una constante:
k = lx + ly
donde lx es la mitad de la batalla (del eje delantero al trasero, dividido por dos) y ly la mitad de la vía (de las ruedas izquierdas a las derechas, dividido por dos). En la construcción de referencia, 75 mm y 85 mm, así que k = 0.160 m.
Ese único número acopla la rotación con las ruedas. Si está mal, el robot sigue conduciendo, pero una orden de giro puro se arrastra por el suelo y una traslación pura se curva, porque la rotación y la traslación se están contaminando. Mide de centro de rueda a centro de rueda, no la chapa del chasis, que suele ser más ancha de lo que crees.
Las otras cifras que merece la pena escribir en el chasis con un marcador antes de empezar:
| Magnitud | Construcción de referencia | De dónde sale |
|---|---|---|
| Radio de rueda r | 48.5 mm | Ruedas mecanum de 97 mm |
| Cuentas por vuelta de rueda | 1440 | 12 CPR × 30:1 × 4 flancos en cuadratura |
| Metros por cuenta | 212 µm | 2πr ÷ 1440 |
| Velocidad máxima de rueda V_MAX | 0.60 m/s | Medida en tacos, y luego reducida un 15 % |
| Techo diagonal | 0.424 m/s | V_MAX ÷ √2, y ninguna mejora de motor lo quita |
| Techo de aceleración | 5.9 m/s² | μg/√2 con μ = 0.85: la masa se cancela |
Lista de materiales
| Elemento | Cant. | Coste aprox. | Notas |
|---|---|---|---|
| Ruedas mecanum, 80 o 97 mm | 4 | £28–70 | Cómpralas como juego de cuatro: dos zurdas y dos diestras |
| Motorreductor N20 con encoder, 30:1 | 4 | £9–14 cada uno | Igualados. 100–250 rpm en la rueda es la banda útil |
| TB6612FNG doble puente en H | 2 | £4–8 cada uno | Un L298N funciona y desperdicia ~3 V en ello; en un pack 2S eso es casi toda tu velocidad |
| Placa de desarrollo ESP32 | 1 | £6–12 | Cuatro canales PWM, cuatro pares de interrupción de encoder y telemetría por Wi-Fi gratis |
| IMU MPU6050 | 1 | £2–4 | Móntala plana, lejos de los motores, sobre la línea central del chasis |
| LiPo 2S, 1500–2200 mAh, 25C | 1 | £12–20 | Dimensionada por corriente, no por capacidad: cuatro motores se bloquean a ~5 A en total |
| BEC de 5 V o convertidor buck | 1 | £3–5 | No alimentes el ESP32 desde el raíl de motores |
| Chapa de chasis, 200 × 180 mm | 1 | £10–25 | Acrílico cortado con láser, aluminio de 3 mm, o cortada por ti |
| Soportes de motor, cubos, fijaciones | 1 juego | £8–15 | Haz coincidir el diámetro del cubo con el eje del motor: 3, 4 o 6 mm |
| Condensador de desacoplo, 470 µF | 2 | £1 | Uno en cada raíl de motor de driver |
£90–170 en total. Las ruedas y el cuádruplo de motores son la razón de que los £50 de un robot de dos ruedas se conviertan en esto.
Cómo se conecta todo
2S LiPo ──┬── 470 µF ── TB6612FNG #1 ── FL motor ── FL encoder ─┐
│ └── FR motor ── FR encoder ─┤
├── 470 µF ── TB6612FNG #2 ── RL motor ── RL encoder ─┼── ESP32
│ └── RR motor ── RR encoder ─┘ (4 PWM,
└── 5 V BEC ──────────────────────────────── ESP32 ────── 8 GPIO,
│ I²C)
MPU6050 ── I²C ─┘
Tres decisiones de cableado que no son obvias:
- El ESP32 tiene su propio regulador. Cuatro motores arrancando a la vez hunden el pack con fuerza, y un controlador que comparta ese raíl se apaga y se reinicia a mitad de una orden. Parece exactamente un fallo de firmware. Lee el tutorial del presupuesto de alimentación antes de culpar a tu código.
- Un condensador de desacoplo en cada driver. 470 µF cerca de la placa. Los puentes en H tiran a rafagas y la inductancia de los cables convierte esas ráfagas en picos.
- La IMU va en la línea central, plana, y tan lejos de los motores como permita la chapa. La deriva en guiñada ya es mala de por sí, sin el campo magnético de cuatro motores encima.
Constrúyelo por hitos
Cada uno tiene su prueba. No arrastres un fallo hacia adelante: en un robot de cuatro motores se multiplican.
1. Ruedas montadas y la comprobación de la X
Atornilla las cuatro ruedas y ponte justo encima del robot. Sigue la línea de los rodillos que ves encima de cada rueda.
Prueba: esas cuatro líneas apuntan al centro del robot y dibujan una X. Si dibujan un rombo, intercambia dos ruedas en diagonal. Superado: una X. Esta es una comprobación de cinco segundos que te ahorra un día.
2. Cada motor por separado
Cablea los cuatro y escribe un sketch que mueva una rueda cada vez al 40 % durante un segundo.
Prueba: llama a cada una y confirma que la rueda correcta gira en el sentido correcto. Superado: cuatro ruedas, cuatro sentidos correctos, ningún par intercambiado. Arregla el cableado en hardware, no con signos menos en el código: acabarás perdiendo el hilo.
3. Encoders
Una vuelta de cada rueda, girada a mano.
Prueba: imprime la cuenta. Superado: dentro del 2 % de 1440, y positiva cuando la rueda gira hacia delante. Una cuenta que da saltos o corre hacia atrás significa que estás interrumpiendo por un canal en vez de dos, o leyendo un volatile long sin desactivar las interrupciones.
4. Cinemática en tacos
Pon el robot en tacos y ordena una traslación lateral pura.
Prueba: los pares diagonales se oponen: delantera-izquierda y trasera-derecha van en un sentido, delantera-derecha y trasera-izquierda en el otro. Superado: exactamente ese patrón. Después ordena un giro puro: lado izquierdo en un sentido, lado derecho en el otro. Si una rueda discrepa, está en la esquina equivocada y el paso 1 te ha mentido.
5. Un lazo de velocidad
Ajusta prealimentación y luego PI en una sola rueda, en tacos, y luego bajo carga.
Prueba: ordena 0.3 m/s y presiona un dedo contra el neumático. Superado: la velocidad se mantiene y el PWM sube de forma visible. Haz esto bien una vez; las otras tres son copias con su propio kS y kV.
6. Las cuatro, en recta
Cuatro lazos, 100 Hz, sobre el suelo. Recorre 3 m recto.
Prueba: mide la deriva lateral al final. Superado: menos de 20 mm, y repetible en tres ejecuciones. En lazo abierto esto suele ser 80–200 mm y distinto cada vez.
7. Traslada 1 m
Prueba: avanza exactamente un metro de lado y mide tanto la distancia como el cambio de rumbo. Superado: dentro de 5 cm, rumbo dentro de 3°. Una curva consistente significa que la constante k está mal; una aleatoria significa que un lazo de velocidad no está aguantando.
8. IMU y orientación de campo
Calibra el sesgo en el arranque y añade el botón de reinicio del rumbo.
Prueba: mantén el joystick hacia delante y gira el robot a mano una vuelta completa. Superado: sigue avanzando en la misma dirección al cruzar el suelo. Quieto, la guiñada deriva menos de 3° por minuto.
9. El cuadrado
La prueba de aceptación. Recorre 1 m recto, 1 m a la derecha, 1 m hacia atrás, 1 m a la izquierda, sin ordenar ninguna rotación.
Prueba: distancia al punto de partida y cambio de rumbo. Superado: dentro de 5 cm y 3°.
Qué significa hacerlo bien
| Medida | Primer intento, lazo abierto | Ajustado, lazo cerrado |
|---|---|---|
| Deriva lateral en 3 m recto | 80–200 mm, varía con la batería | Menos de 20 mm, repetible |
| Precisión de una traslación de 1 m | 10–20 cm, con una curva visible | Dentro de 5 cm |
| Cambio de rumbo en el cuadrado lateral | 10–30° | Menos de 3° |
| Velocidad diagonal máxima | La que sobreviva al recorte | 0.42 m/s: el techo √2, alcanzado limpiamente |
| Velocidad al caer el pack de 8.4 → 7.0 V | Baja ~17 % | Sin cambios hasta que los motores saturen |
| Error de odometría en el cuadrado | No merece la pena medirlo | 2–5 cm en un buen suelo, mucho peor en uno polvoriento |
Esa última fila es honesta más que decepcionante. En esta tracción el mecanismo es el patinaje de los rodillos, así que la odometría es el número más débil del robot incluso cuando todo funciona. Incorpora esa expectativa en lugar de perseguirla.
Notas de hardware que importan
La mano de la rueda es una propiedad del juego. Dos unidades pedidas por separado del mismo anuncio son casi siempre de la misma mano. Compruébalo antes de taladrar nada.
Cada rodillo debe girar libremente. Hazlos girar uno a uno a mano antes de montar las ruedas. Un rodillo atascado convierte esa esquina en una rueda normal apuntando 45° fuera, a ratos, lo que se lee exactamente como un fallo de software.
Las ruedas mecanum son pesadas. 180–400 g cada una, así que hasta 1.6 kg del robot son ruedas, y eso es masa rotando en los extremos de los brazos de palanca. Hace que el robot parezca perezoso y es la razón de que importe el techo de aceleración.
El suelo es un componente. El hormigón pulido y el vinilo están alrededor de μ = 0.8. Un suelo de gimnasio polvoriento, una capa de laca que alguien usó en otro robot, o una junta en el linóleo lo reducen a la mitad localmente, y el robot cambiará de comportamiento al cruzarla. Mira qué hace μ = 0.25 antes de culpar al ajuste.
Cuando va mal
| Síntoma | Causa | Solución |
|---|---|---|
| Hacia delante bien, al desplazarse de lado curva y gira | Una rueda en la esquina equivocada | La comprobación de la X; el residuo cinemático será grande y constante |
| Se desplaza al lado contrario de lo ordenado | Las cuatro ruedas están espejadas | Intercambia el par izquierdo con el derecho |
| Al girar sobre el sitio también se traslada | k mal, o medido sobre la chapa | Vuelve a medir de centro de rueda a centro de rueda |
| El robot se reinicia cuando arrancan los cuatro motores | Apagón, no un fallo | Regulador separado para el ESP32; condensadores; comprueba la resistencia interna del pack |
| La diagonal es mucho más lenta que la recta | El techo √2: funcionando como está diseñado | Nada que arreglar |
| Se inclina fuera de las curvas con cualquier control automático | Recorte por motor en vez de escalar la orden | Escala por la peor rueda |
| Conduce bien a mano, inútil en autónomo | Odometría, no control | IMU para el rumbo; series cortas; considera ruedas pasivas |
| Una rueda siempre saturada | Sobremandada, o ese motor es el flojo | Baja V_MAX a lo que las cuatro pueden sostener de verdad |
| Las cuentas del encoder derivan con los minutos | Flancos perdidos a alta velocidad | Interrumpe en los dos canales; comprueba que la ISR es corta |
Hacia dónde llevarlo después
Ruedas pasivas. Dos o tres ruedas omni sin alimentar, montadas sobre muelles y con sus propios encoders. No transmiten par, así que no patinan, y convierten el peor número de este robot en el mejor.
Seguimiento de trayectorias holonómico. Pure pursuit y Stanley asumen un robot que dirige. Una base que puede desplazarse de lado puede hacer más: sigue la posición sobre la ruta y el rumbo de forma independiente, porque tienes actuadores separados para ellos.
Una cámara sobre una base que mantiene el rumbo. El emparejamiento natural: un pipeline de visión es mucho más fácil cuando la cámara puede seguir apuntando al objetivo mientras la base se reposiciona. Eso es para lo que sirve en realidad la tracción holonómica.
ROS 2. Esta es la primera tracción de aquí donde el linear.y de cmd_vel —que un robot de tracción diferencial ignora explícitamente— por fin significa algo. Cambiar la función de twist a ruedas por la versión de mecanum de cuatro filas es casi todo el trabajo.
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 / 17 completados
Componentes
- ChasisMecanum Wheel SetRodillos libres a 45° convierten cuatro motores ordinarios en un robot capaz de desplazarse lateralmente.
- ActuadorN20 Micro Gearmotor with EncoderMicromotor con reductora metálica y encoder trasero, para que el robot sepa cuánto ha avanzado realmente.
- DriverTB6612FNG Motor DriverPuente en H dual con tecnología MOSFET: alta eficiencia y tamaño ultracompacto para robots móviles.
- ControladorESP32Doble núcleo, conectividad inalámbrica y alta velocidad por unos pocos euros.
- SensorMPU6050 IMUEl sensor inercial de 6 DOF para medir inclinación, balanceo y orientación angular en robots.
- 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 · 25 minTracciones holonomicas: comparativa de omni, mecanum y swerveCuatro tracciones, tres grados de libertad y lo que cada una te cobra por ellos.
- Intermedio · 35 min de lecturaCinemática de ruedas Mecanum: cuatro ruedas en tres ejesUn rodillo a 45° te da toda la matriz cinemática y una cuarta ecuación que casi nadie utiliza.
- Intermedio · 35 min de lecturaControl de velocidad de ruedas en bucle cerrado con encodersLa prealimentación hace el trabajo pesado, el integrador limpia el residuo y el robot por fin avanza recto.
- Intermedio · 25 minConducción orientada al campo: que adelante signifique adelanteGira el mando menos el rumbo y el robot deja de discutir con el conductor.
- 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.
- Intermedio · 30 min de lecturaPatinaje de ruedas: por qué deriva la odometría y cómo combatirloTodo manual de odometría afirma que el patinaje arruina la estimación. Esto explica qué es el patinaje y cuánto cuesta.
- Principiante · 30 minPor qué tu robot se reinicia cuando arrancan los motoresEl reinicio que parece un fallo de código casi siempre es la batería. Presupuesta la corriente y mide la caída.
- Principiante · 30 min de lecturaPor qué delay() rompe los robots: temporización con millis()Un robot atrapado en un delay() está ciego. Sustitúyelo por millis() y realiza bien la comparación ante desbordamiento.
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 viable construir este proyecto con un Arduino Uno?
No de forma fiable, debido a la insuficiencia de pines y temporizadores de hardware. Cuatro ruedas exigen cuatro canales PWM independientes y cuatro encoders de cuadratura demandan ocho líneas con capacidad de interrupción. Un Arduino Uno dispone solo de dos interrupciones externas dedicadas y comparte temporizadores con librerías estándar. Una placa ESP32 o Arduino Mega 2560 elimina esta limitación de raíz; se emplea la ESP32 por aportar telemetría Wi-Fi en tiempo real para calibrar cuatro lazos simultáneos.
¿Cuánto cuesta el ensamblaje de un robot mecanum?
Entre 90 y 170 € según el diámetro de las ruedas y la calidad de los motores, aproximadamente el doble que un chasis diferencial equivalente. El incremento proviene de cuatro ruedas mecanum mecanizadas, cuatro motorreductores con encoders, dos controladores de motor de doble canal, mayor capacidad de batería para corrientes de bloqueo y un microcontrolador de mayores prestaciones.
¿Por qué el robot avanza recto pero gira en espiral al desplazarse de lado?
Una de las ruedas está montada en la esquina equivocada, el fallo constructivo más común en plataformas mecanum. En traslación frontal los vectores parásitos de rodillos opuestos se cancelan en gran medida; sin embargo, al solicitar desplazamiento lateral puro, la rueda mal orientada empuja contra el movimiento forzando una rotación parásita. Mire el robot desde arriba: los rodillos superiores visibles deben converger hacia el centro geométrico dibujando una 'X'. Si dibujan un rombo, intercambie dos ruedas diagonalmente.
¿Es indispensable incorporar el sensor inercial IMU?
Para trayectorias autónomas directas no es estrictamente obligatorio, pero para conducción manual es prácticamente imprescindible. Un chasis holonómico puede desplazarse hacia el este mientras su cabina apunta al norte; un piloto humano pierde la orientación relativa del vehículo en escasos segundos. El control orientado al campo rota el vector del mando según la orientación geográfica absoluta de la IMU mediante una matriz de rotación plana.
¿Qué precisión ofrece la odometría de rueda en ruedas mecanum?
Notable en avance longitudinal pero sensiblemente inferior en traslación lateral. El movimiento transversal se produce precisamente por el deslizamiento pasivo de los rodillos inclinados a 45°, por lo que los encoders registran rotación mecánica que no siempre se traduce en avance neto sobre el suelo si hay polvo o desgaste. Se recomienda apoyarse en la IMU para el rumbo angular y recurrir a ruedas locas de medición (dead wheels) sin tracción si se precisa localización milimétrica.
¿Tiene este chasis buena capacidad de empuje o tracción?
No. Los rodillos a 45° solo transmiten fuerza efectiva a lo largo de su ángulo oblicuo, reduciendo la adherencia neta disponible a un ~71 % de la que ofrecería el mismo vehículo sobre neumáticos convencionales de goma lisa. Añadir lastre no lo soluciona, ya que incrementa la inercia lineal en idéntica proporción al rozamiento estático. Para aplicaciones de empuje o combate robótico, las ruedas convencionales son notablemente superiores.