RobotForge
Published·~11 min

Omnidirectional drive and mecanum wheels

Three-wheel and four-wheel omni kinematics. When you need holonomic motion, when you don't, and the mechanical price you pay for sliding sideways.

by RobotForge
#mobile-robots#omnidirectional#mecanum

Diff-drive can't slide sideways. Ackermann can't pivot. Both have constraints baked into their geometry. Omnidirectional drives have neither — they translate in any direction, rotate in place, do both at once. The catch: complicated wheels, rolling efficiency loss, and limited load capacity. Here's when omni is right, when it isn't, and the math that drives it.

Two flavors of omni wheel

Mecanum wheel

A wheel with rollers mounted at 45° around its rim. As the wheel spins, the rollers contact the ground at the angle. Combine four mecanum wheels (two pairs facing opposite 45° directions) and you can decompose any planar velocity into wheel speeds.

Swedish (omni) wheel

Like mecanum but with rollers at 90° to the wheel axis. The wheel rolls forward normally; the rollers slide laterally. Three or four arranged in a triangle/square.

Both achieve holonomic motion. Differences: mecanum requires four wheels; Swedish needs at least three. Mecanum has slightly better load capacity; Swedish has cleaner kinematics.

The 4-wheel mecanum kinematics

Body twist (v_x, v_y, \omega) → per-wheel angular velocities \omega_{FL}, \omega_{FR}, \omega_{RL}, \omega_{RR}:

ω_FL = (v_x − v_y − (L_x + L_y) ω) / r
ω_FR = (v_x + v_y + (L_x + L_y) ω) / r
ω_RL = (v_x + v_y − (L_x + L_y) ω) / r
ω_RR = (v_x − v_y + (L_x + L_y) ω) / r

Where L_x, L_y are half the wheel separation in each direction; r is wheel radius. Three control inputs (v_x, v_y, \omega); three world DOF — holonomic.

The matrix form maps cleanly to ROS twists; ros2_control's mecanum drive plugin implements this directly.

The 3-wheel Swedish kinematics

Three wheels at 120° around a center. Each wheel's contribution:

ω_i = (1 / r) · (−sin(θ_i) v_x + cos(θ_i) v_y + L ω)

where \theta_i is the wheel's mounting angle and L is the radius from center to wheel.

Cleaner than mecanum (no extra L_x, L_y parameters); slightly less stable mechanically (only three contact points).

The mechanical reality

  • Roller wear: the small rollers on mecanum / Swedish wheels carry the same loads as the main wheel but with much smaller contact patches. They wear faster than tires; replace periodically.
  • Vibration: each roller transition causes a small bump. Robot rides like a bumpy cart at speed.
  • Slip-prone: lateral motion is achieved by the rollers slipping sideways. Each wheel always has some slip; odometry drift is worse than diff-drive.
  • Load capacity: contact patches are small; load capacity per wheel is much less than a solid pneumatic tire.

When omni shines

  • Tight spaces: warehouse aisles, cluttered indoor spaces. The robot can re-orient without backing up.
  • Precise positioning: align with a pallet, dock with a charging station. Omni does it with a single coordinated move.
  • Robot soccer: the canonical omni use case. RoboCup teams almost universally use omni.
  • Mobile manipulator bases: the arm wants the base to position freely without re-orienting. Omni delivers.

When omni is the wrong tool

  • Outdoor terrain: rollers don't handle dirt, gravel, or grass. Mecanum is indoor-only for production.
  • Heavy loads: small contact patches mean load is concentrated; floors get scratched, rollers fail.
  • High speeds: vibration becomes uncomfortable; wheel-roller slip explodes.
  • Long distances: rolling resistance is higher than for solid wheels; battery life suffers.

Production examples

  • KUKA omniMove: industrial mecanum AGV; carries multi-ton loads at low speed.
  • Husarion ROSbot OmniDrive: research-grade indoor mobile platform.
  • TurtleBot 4 with mecanum: educational; covers omni kinematics out of the box.
  • RoboCup small-size and middle-size league: every team's robot is omni.

Compared to diff-drive on the same task

For a 10×10 m workspace with 50 cm corridors:

  • Diff-drive: pivot in place, drive forward, pivot, etc. Multi-step paths through tight spots.
  • Omni: smooth diagonal motion through the same space; no pivots needed. ~20% shorter total path length on average; ~40% smoother control profile.

For a 100 m hallway with no turns:

  • Diff-drive: drives straight; uses ~80% of battery for 1 km.
  • Omni: drives straight; uses ~120% of battery for 1 km (rolling resistance loss).

Trade-offs are real. Pick by the workspace.

Implementation in 30 lines

class MecanumDrive:
    def __init__(self, wheel_radius, lx, ly):
        self.r = wheel_radius
        self.lx = lx  # half wheel base, x
        self.ly = ly  # half wheel base, y

    def twist_to_wheels(self, vx, vy, w):
        L = self.lx + self.ly
        return [
            (vx - vy - L * w) / self.r,  # FL
            (vx + vy + L * w) / self.r,  # FR
            (vx + vy - L * w) / self.r,  # RL
            (vx - vy + L * w) / self.r,  # RR
        ]

    def wheels_to_twist(self, omegas):
        wFL, wFR, wRL, wRR = omegas
        L = self.lx + self.ly
        vx = (wFL + wFR + wRL + wRR) * self.r / 4
        vy = (-wFL + wFR + wRL - wRR) * self.r / 4
        w = (-wFL + wFR - wRL + wRR) * self.r / (4 * L)
        return vx, vy, w

Exercise

In a sim, build a 4-wheel mecanum platform. Drive a 1m × 1m square pattern without rotating: only v_x, v_y commands, no \omega. Confirm the robot translates without changing orientation. Try the same on a diff-drive — impossible without combining pivot + drive segments.

Next

ZMP and capture point — the classical tools that keep humanoids upright, still useful in the era of learned gaits.

Comments

    Sign in to post a comment.