Are your wheels boring? Check out this Omnidirectional Robot…
The beauty of omnidirectional movement is the freedom it allows, with the capability to move in any direction: forwards, backwards, sideways, and diagonally.
In this lesson we are going to delve into the fascinating world of omnidirectional technology through the eyes of “Rob”, our homemade four-wheel omnidirectional robot.
We’ll even provide the code and 3D cad files. Let’s go!
This project has been contributed by Aaed Musa, a mechanical engineering student at Purdue University. You can check out his awesome YouTube channel at youtube.com/@aaedmusa
Designing an Omnidirectional Robot
The art of designing an omnidirectional robot is more straightforward than you might think. The primary electronic components at the heart of Rob include:
- Teensy 4.1 Microcontroller: Acting as the command center “AKA the brains”
- 600 RPM DC Motors: Four of these are used to implement the omnidirectional movement.
- BTS 7960 Motor Drivers: These control each motor, programming the start, stop, and speed variations.

The motors are each connected to a motor driver, which then connects to the Teensy 4.1 microcontroller. This setup allows for effective omnidirectional control of our robot. Our energy source for the robot is a 6S or 22.2-volt LiPo battery.
The defining aspect of an omnidirectional robot is its wheels. Unlike traditional wheels, omnidirectional wheels can slide as well as spin, courtesy of the rollers along the wheel’s circumference. This omnidirectional capability allows for diverse movement options.
Robot Construction
After we’ve gathered and assembled all components, the next step in creating an omnidirectional robot is establishing a control system. I utilized an eight-channel RC remote and receiver pair to direct Rob. The microcontroller, when receiving a signal from one of the channels, can be programmed to perform a specific action.
Motor drivers enable the omnidirectional movement through a technique called Pulse Width Modulation (PWM), an input signal that instructs the microcontroller on the motor speed. PWM values range from zero (indicating brake) to 255 (indicating full speed). Since each driver has two PWM pins (left and right), we can switch the pin receiving the signal to change the direction of the wheel’s spin.

Programming Omnidirectional Movements
One of the intriguing aspects of constructing an omnidirectional robot is programming the diverse movements that the four-wheel omni drive can perform. Through careful control of each wheel’s spin and the rollers’ activation, we can direct Rob’s movement:
- Spinning: To spin Rob on his axis, we make all wheels spin in the same direction. The 45-degree angle of the wheels initiates a circular motion.
- Forwards/Backwards: This motion is achieved when the wheels on one side spin in one direction and those on the opposite side spin contrarily, thus maintaining the omnidirectional balance.
- Sideways: This movement is like moving forwards but from a different perspective. The top wheels spin in one direction, and the bottom wheels spin in the other.
- Diagonal: For diagonal movement, only two wheels (those aligned diagonally) need to be powered.

Despite careful programming for omnidirectional movement, variations in individual motor speeds might lead to slight inaccuracies. Ideal operation would have all wheels spinning with equal power. However, wear over time can make some wheels more potent than others. Such discrepancies can lead to drift when Rob is meant to move straight.
One solution to this issue could be using speed or angular sensor devices, like an accelerometer. For now, though, I am pleased to let Rob be as he is – slightly offbeat but a rewarding project!
If you enjoyed learning about this omnidirectional robot and are interested in robots, 3D printing, and programming in general, please check out my YouTube channel at youtube.com/@aaedmusa.