I’ve always been fascinated by robots that don’t move like typical cars or tanks. Most wheeled robots have to turn first before going in a new direction, and that always felt limiting—especially in small indoor spaces. A few months ago, I came across omni wheels and instantly loved the idea of holonomic motion: sliding sideways, spinning in place, and combining movements freely. So I decided to build my own omni-directional robot from scratch using just an ESP32 and three omni wheels arranged 120° apart.
My goals were simple:
Keep the cost low and parts easy to find
- Keep the cost low and parts easy to find
Make the robot feel smooth and agile
- Make the robot feel smooth and agile
Control it wirelessly whout extra devices like routers or gamepads
- Control it wirelessly without extra devices like routers or gamepads
Learn more about inverse kinematics and real-time control
- Learn more about inverse kinematics and real-time control
Omni wheels have rollers that allow sideways slipping while still providing forward drive. When you place three of them in a triangular layout, the robot gains full 2D freedom:
Vx: left ↔ right
- Vx: left ↔ right
Vy: forward ↔ backward
- Vy: forward ↔ backward
Vr: rotation / spin
- Vr: rotation / spin
This is called a holonomic drive system, and it’s surprisingly elegant once you understand the geometry behind it.
How It WorksAt the center of the build is an ESP32 Dev Board. Instead of connecting through a router, the ESP32 creates its own WiFi Access Point. When you connect to it with a phone or laptop, it serves a small web interface with a joystick. The controls are sent using WebSockets, so the commands update in real-time with almost no lag. It feels surprisingly smooth.
When you move the joystick, it sends three values:
Vx, Vy, and Vr.
The firmware uses inverse kinematics to convert those into three wheel speeds. The math looks like this:
wheel1 = vy - vr
wheel2 = (-0.5 * vy - 0.866 * vx) - vr
wheel3 = (-0.5 * vy + 0.866 * vx) - vr
wheel1 = vy - vr
wheel2 = (-0.5 * vy - 0.866 * vx) - vr
wheel3 = (-0.5 * vy + 0.866 * vx) - vr
Each wheel gets its own direction and PWM speed through an H-bridge motor driver. After a few tweaks like speed ramping, deadzone filtering, and per-wheel calibration, the robot began moving smoothly in all directions.
I designed a simple triangular chassis and fitted the three omni wheels equally spaced around the center. The wiring was straightforward:
ESP32 generates PWM + direction signals
- ESP32 generates PWM + direction signals
Three motor drivers handle current for the DC motors
- Three motor drivers handle current for the DC motors
A small Li-Po battery powers everything
- A small Li-Po battery powers everything
Once everything was assembled, I could drive the robot directly from a phone. No apps to install—just open a browser. The joystick online can mix translation + rotation inputs, and there’s also keyboard controls if using a laptop.
What Surprised MeThe first time it strafed sideways, it honestly felt like magic. The motion was so different from normal robots. Tuning helped a lot—especially ramping. Without it, the robot jumped too aggressively when starting or stopping. With ramping, it glides.
Another surprise was how educational the project ended up being. It’s one thing to read about holonomic drive systems and inverse kinematics, and another to watch them respond in real time to your inputs. Everything clicks when the robot moves the way the math predicts.
Applications & Next StepsOmni-drive platforms show up in:
warehouse robots
- warehouse robots
indoor AI/camera robots
- indoor AI/camera robots
soccer bots
- soccer bots
swarm robotics
- swarm robotics
autonomous research platforms
- autonomous research platforms
This build is intentionally minimal, but it creates a solid base for experimentation. Future upgrades I’m considering:
Wheel encoders + PID control
- Wheel encoders + PID control
Camera / FPV streaming
- Camera / FPV streaming
ROS2 integration
- ROS2 integration
SLAM and path planning
- SLAM and path planning
Better chassis +gear motors
- Better chassis + gear motors
Battery monitoring
- Battery monitoring
Bluetooth gamepad control
- Bluetooth gamepad control
Not for a competition or a deadline—just curiosity. I wanted to understand these motion systems in a more hands-on way, and I think the “learning + building + fixing + tuning” loop is what makes hobby robotics so rewarding. If you’re into robotics, motion control, or embedded systems, omni-drive is a fantastic concept to explore.
YouTube:
All Codes Here: https://github.com/vikas-meu/Omni_drive_robo.git






Comments