An omni wheel, sometimes referred to by the more specific trade name “Mecanum” wheel, is a unique type of wheel with “tread” made up of several rollers oriented at an angle relative to the wheel’s spin direction. They allow for forward driving like any other wheel, but also sideways and rotational locomotion depending on the vectoring of all of a vehicle’s wheels working in concert. James Bruton used omni wheels on many of his robots in the past and in his most recent project he equipped a go-kart with an omni wheel for endless drifting.
The go-kart has three drive motors. Two Hoverboard-style hub motor/wheel combos sit at the front of the go-kart on a steering rack. They provide normal front-wheel drive dynamics. But at the back of the go-kart there is a large omni wheel oriented perpendicular to the front wheels (at their neutral position). That means that the omni wheel’s rollers are inline with the vehicle. Those rollers spin freely, so the go-kart drives normally. But when Bruton spins the omni wheel motor, the rear end of the go-kart slides out in a drifting maneuver.
To coordinate the power going to each of the three motors, Bruton used an Arduino Uno board for torque vectoring. The driver controls the spin direction of the omni wheel using a pair of e-bike throttles mounted to the steering wheel. They also control the speed of the front two Hoverboard motors using an accelerator pedal with a Hall effect sensor. All three motors receive power through large ESCs (electronic speed controllers), but the Arduino is necessary to calculate how much power each motor receives. For example, if the driver pushes both e-bike throttles, the Arduino will check to see which throttle is turned further and then tell the omni wheel’s motor to spin in the corresponding direction.
As you can see in Bruton’s videos, this setup worked quite well. The go-kart drifted easily anytime Bruton wanted. It was a bit tippy, because there is only one wheel in the back, but Bruton says that the addition of a second wheel would solve that problem.
Read more about this on: Arduino Blog