Robotics
Differential-Drive Robot
Steering with just two wheel speeds
A differential-drive robot is a mobile robot that steers using only two independently driven wheels on a common axis: spin both at the same speed and it rolls straight, offset the speeds and it curves the path around an instantaneous center of rotation. No steering linkage, no third actuator — full planar mobility from two motors.
- Actuators2 motors, 0 steering linkages
- Forward kinematicsv = (v_R + v_L)/2
- Turn rateω = (v_R − v_L)/L
- Turn radiusR = (L/2)(v_R+v_L)/(v_R−v_L)
- Special movev_R = −v_L → spin in place, R = 0
- ConstraintNonholonomic — cannot move sideways
Interactive visualization
Press play, or step through manually. The visualization is yours to drive — try it before reading on.
Watch the 60-second explainer
A condensed visual walkthrough — narrated, captioned, under a minute.
The simplest machine that can go anywhere on a floor
Take two wheels, mount them on the same axis on opposite sides of a chassis, and give each its own motor. Add a passive caster wheel at the front or back so the thing doesn't tip over. That is the entire mechanism of a differential-drive robot — and it is, by a wide margin, the most common drive architecture in mobile robotics. Every iRobot Roomba, most warehouse automated guided vehicles (AGVs), the classic Pioneer and TurtleBot research platforms, and the paired wheels inside a skid-steer loader are all differential drives.
What makes the layout so dominant is that it achieves full planar mobility — drive forward, drive backward, turn either way, and spin in place — with no steering mechanism whatsoever. A car needs an engine plus a steering rack, four wheels, and a differential gear so the outer wheel can turn faster than the inner one through a corner. A differential-drive robot throws all of that away. There is no rack, no kingpin, no Ackermann linkage. Steering is differential wheel speed. If you want to turn left, you slow the left wheel (or speed up the right). The mechanism that an automobile spends a steering column, tie rods, and a limited-slip differential to accomplish, the robot accomplishes by sending two different numbers to two motor controllers.
The price for that simplicity is a single constraint that shapes everything about how these robots navigate: a differential drive cannot move sideways. It can point in any direction and translate along that direction, but it can never slide laterally without first rotating. Understanding the kinematics of the platform — how two wheel speeds map to a body velocity and a turn rate, and where that puts the ICC (instantaneous center of curvature) — is the foundation of every path planner, motion controller, and odometry estimator that runs on a mobile robot.
The instantaneous center of curvature
Start with the one rigid fact: the two wheels are bolted to a common axle line, so at any instant they must rotate about the same point. That point is the instantaneous center of curvature (ICC), sometimes called the instantaneous center of rotation. Because both wheels share one angular velocity ω about the ICC, and because each wheel's contact point traces a circular arc centered on the ICC, the ICC must lie on the line that passes through both wheel contact points — the extended wheel axis.
Let the track width (distance between the two wheels) be L, and let the right and left wheel ground speeds be v_R and v_L. The right wheel is at distance R + L/2 from the ICC and the left at R − L/2, where R is the turn radius measured from the robot's center to the ICC. Both wheels share ω, so:
v_R = ω · (R + L/2)
v_L = ω · (R − L/2)
Subtract and add those two lines and the entire steering behavior falls out in two equations:
ω = (v_R − v_L) / L ← turn rate
R = (L/2) · (v_R + v_L) / (v_R − v_L) ← distance to the ICC
Read those two lines as a control law. The turn rate depends only on the difference of the wheel speeds; the turn radius depends on the ratio of their sum to their difference. The forward speed of the robot's center is simply the average:
v = (v_R + v_L) / 2 ← body forward velocity
This pair — v and ω — is called the unicycle model, and it is the abstraction every differential-drive controller actually thinks in. The planner commands a forward speed and a turn rate; an inverse step converts them back to wheel speeds (v_R = v + ωL/2, v_L = v − ωL/2) and sends those to the motors.
Three special cases that cover everything
The whole repertoire of a differential drive is just three choices of where the ICC sits on the axis line:
| Wheel speeds | ICC location | Turn radius R | Motion |
|---|---|---|---|
| v_R = v_L | At infinity | ∞ | Straight line — denominator is zero, ω = 0 |
| v_R ≠ v_L (same sign) | Outside the wheelbase | R > L/2 | Gentle arc to the slower side |
| v_R = −v_L | At the robot's center | R = 0 | Spin in place — pure rotation, zero translation |
| One wheel stopped, e.g. v_L = 0 | On the stopped wheel | R = L/2 | Pivot about the stationary wheel |
That spin-in-place row is the headline trick. A zero-radius turn is something no car, forklift, or Ackermann-steered vehicle can do — they all need forward motion to change heading. A differential drive simply drives its wheels in opposite directions and rotates about its own geometric center, which is exactly why a Roomba can reorient in a doorway and an AGV can turn a load in the width of an aisle.
Worked example — a TurtleBot-class platform
Take realistic numbers for a small research robot: wheel radius r = 0.033 m, track width L = 0.287 m (these are roughly the TurtleBot 3 Burger values). The motor encoders report wheel angular speed in rad/s. Suppose we command the right wheel to 14 rad/s and the left to 10 rad/s.
Wheel ground speeds:
v_R = ω_R · r = 14 × 0.033 = 0.462 m/s
v_L = ω_L · r = 10 × 0.033 = 0.330 m/s
Body velocity:
v = (v_R + v_L) / 2 = (0.462 + 0.330) / 2 = 0.396 m/s
ω = (v_R − v_L) / L = (0.462 − 0.330) / 0.287 = 0.460 rad/s
Turn radius:
R = v / ω = 0.396 / 0.460 = 0.861 m (curving toward the slower, left side)
Pose integration over Δt = 0.1 s (small-step Euler):
Δθ = ω · Δt = 0.0460 rad (2.64°)
Δx = v · cos(θ) · Δt Δy = v · sin(θ) · Δt
To get the robot to spin in place at the same 0.46 rad/s, set v = 0 and solve the inverse: v_R = +0.066 m/s, v_L = −0.066 m/s — equal and opposite. The encoders then read +2 rad/s and −2 rad/s, and the robot pirouettes about its center with the ICC pinned at the origin.
Dead-reckoning: turning encoder ticks back into a pose
Run the kinematics backward in time and you get odometry — estimating where the robot is by integrating how far each wheel has turned. Over a short interval the right wheel advances Δs_R and the left Δs_L (each = encoder ticks × wheel circumference / ticks-per-revolution). Then:
Δs = (Δs_R + Δs_L) / 2 ← center distance traveled
Δθ = (Δs_R − Δs_L) / L ← heading change
x += Δs · cos(θ + Δθ/2)
y += Δs · sin(θ + Δθ/2)
θ += Δθ
The θ + Δθ/2 midpoint term is the second-order correction that treats the step as a short arc rather than a straight chord; it roughly halves the integration error compared to naive Euler at the same step rate.
Odometry is cheap and runs at hundreds of hertz, but it drifts, and the way it drifts is instructive. Position error grows about linearly with distance traveled, while heading error is worse: a tiny constant heading bias rotates every subsequent motion, so the position error it induces grows roughly with the square of distance. The dominant error sources split into two families:
- Systematic errors — unequal effective wheel diameters (the robot always drifts to one side even when commanded straight) and an inaccurate track-width estimate
L(every commanded turn is over- or under-rotated). These are repeatable and can be calibrated out. The standard UMBmark procedure drives the robot around a 4×4 m square clockwise and counterclockwise, measures the end-point error, and solves for the two scale corrections. - Non-systematic errors — wheel slip on smooth or loose floors, bumps, and picking up debris. These are unpredictable and cannot be calibrated; they can only be bounded by fusing odometry with another sensor.
Typical hard-floor indoor odometry on a clean differential drive holds about 1–5 percent of distance in position error and a degree or two of heading drift per meter — fine for a few meters, hopeless for a building. Real systems therefore fuse the wheel odometry with an IMU (for fast heading), and with lidar or visual SLAM (to correct the unbounded drift against a map). The wheel odometry supplies the high-rate, low-latency motion prior that those slower, absolute sensors then correct.
Why it cannot move sideways
The defining limitation of a differential drive is its nonholonomic constraint. The wheels can only roll forward or back and pivot; nothing on the robot can produce sideways velocity. Formally, the velocity of the robot's center is always parallel to its heading:
ẋ · sin θ − ẏ · cos θ = 0
This is a constraint on velocities that cannot be integrated into a constraint on positions — the formal signature of nonholonomy. Practically it means the robot has three degrees of pose freedom (x, y, θ) but only two control inputs (v, ω), so it cannot independently command all three at once. To reach a target one meter directly to its left, a differential drive cannot just slide there; it must rotate, drive, and rotate again, the robotic equivalent of a three-point turn. Path planners account for this with curvature-limited paths (Dubins or Reeds–Shepp curves) rather than straight segments between arbitrary poses.
Holonomic platforms remove the restriction. An omniwheel or mecanum-wheel robot can translate in any direction and rotate independently, so it can strafe sideways into a target pose. The cost is mechanical complexity, lower efficiency (mecanum rollers scrub), reduced payload, and far more sensitivity to floor debris. For the vast majority of indoor robots the nonholonomic differential drive remains the right trade.
Differential drive versus the alternatives
| Property | Differential drive | Ackermann (car) steering | Skid steer (tracks) | Mecanum / omni (holonomic) |
|---|---|---|---|---|
| Actuators | 2 (both driven) | 2 (1 drive, 1 steer) | 2 sides driven | 4 driven |
| Zero-radius turn | Yes | No | Yes (with scrub) | Yes |
| Move sideways | No (nonholonomic) | No | No | Yes (holonomic) |
| Turning energy loss | Very low | Low | High (track scrub) | Medium (roller scrub) |
| Odometry accuracy | Good (1–5 % of distance) | Good | Poor (slip-dominated) | Fair |
| Terrain tolerance | Low (small wheels) | Medium | High | Low |
| Typical use | Roomba, AGVs, TurtleBot | Cars, delivery robots | Excavators, Mars rovers | Warehouse pickers, RoboCup |
The closest cousin is skid steer: it uses the identical left/right-difference control idea, but with long ground contact on each side (tracks, or multiple fixed wheels per side). The clean ω = (v_R − v_L)/L model still describes the intent, but the long contact patches must scrub sideways through a turn, so the effective track width is inflated and uncertain, turning burns far more power, and odometry degrades badly. NASA's rocker-bogie Mars rovers (Sojourner through Perseverance) are six-wheel skid-steer machines precisely because that arrangement survives rock and sand that would jam a steered axle — they trade odometry quality for terrain survivability and lean on visual odometry to recover the position estimate.
From commanded velocity to motor current
A real differential-drive control stack is a short cascade. The planner emits a desired (v, ω). The inverse kinematics convert that to target wheel speeds v_R = v + ωL/2 and v_L = v − ωL/2, then to target wheel angular speeds ω_R = v_R/r, ω_L = v_L/r. Each wheel then runs its own closed-loop speed controller — almost always a PID loop reading the encoder and driving the motor through an H-bridge with PWM. Two practical issues dominate tuning:
- Wheel-speed mismatch under load. If one motor saturates (hits its voltage limit) while climbing a ramp, the achieved
ωno longer matches the commandedωand the robot veers. Good controllers prioritize preserving the ratio of wheel speeds (the turn) over the absolute speed when one wheel saturates. - Quantized, noisy encoder feedback. At low speed the encoder ticks arrive slowly, so the velocity estimate is coarse and laggy. This is why precise pivot-in-place is harder than it looks: both wheels are near zero speed, exactly where feedback is worst.
Failure modes and trade-offs
- Wheel slip kills odometry. On polished concrete, wet tile, or carpet transitions, a wheel slips, the encoder counts rotation that didn't become travel, and the pose estimate jumps. There is no encoder-only fix; this is the single biggest reason a differential drive needs an absolute reference (lidar SLAM, fiducials, IMU heading fusion).
- Unequal wheel diameter is a permanent curve bias. Two nominally identical wheels with 1 mm radius difference produce a slow, constant curve when commanded straight. Worn tires, uneven tire pressure, or asymmetric loading all create it. UMBmark calibration corrects the nominal case but not changes over the robot's life.
- Caster shimmy and lag. The passive caster must swivel to follow direction changes; during a reversal or a sharp turn it lags and can momentarily steer the chassis. Lightly loaded casters can also lift on bumps, briefly removing the support point.
- Tip-over on hard stops. A two-wheel-plus-caster robot has a narrow support triangle. Decelerating hard with a high center of mass (a tall sensor mast or a top-heavy payload) can pitch it onto the caster or over it.
- Inability to sidestep obstacles. The nonholonomic constraint means there is no quick lateral dodge; the robot must rotate first, which costs time and clearance in tight aisles. This drives the choice toward holonomic platforms in dense, fast-pick warehouse zones.
- Slip during pivot-in-place. A spin-in-place turn drags both wheels through a yaw rotation about the center; on high-grip surfaces this is clean, but on grippy carpet the wheels can scrub and the turn angle under-rotates relative to the commanded value.
Where differential drive actually shows up
- Robot vacuums. Every iRobot Roomba, Roborock, and Ecovacs unit is a differential drive with a front caster. The spin-in-place capability is what lets them reorient in corners and follow walls.
- Warehouse AGVs and AMRs. Many Amazon Robotics drive units and autonomous mobile robots use a differential (or dual-differential) base to rotate loads within a single aisle width.
- Research and education platforms. TurtleBot, Pioneer, Khepera, and the classic MIT/CMU mobile bases are differential drives — chosen because the unicycle model maps so cleanly onto teaching kinematics, odometry, and SLAM.
- Tracked and skid-steer machines. Tracked excavators, Bobcat loaders, and the iRobot PackBot extend the same left/right-difference control to high-traction tracks for rough terrain.
- Planetary rovers. The six-wheel rocker-bogie rovers (Sojourner, Spirit, Opportunity, Curiosity, Perseverance) are skid-steer relatives of the differential drive, using paired side-wheel speeds for heading on terrain that forbids a steered axle.
- Inspection and delivery robots. Many indoor delivery and security robots use a differential base for its tight turning inside elevators and doorways.
Frequently asked questions
What is a differential-drive robot and how does it steer?
A differential-drive robot is a mobile robot with two independently powered wheels on a single shared axis, supported by one or two passive casters, and no steering linkage. It steers purely by varying the relative speed of its two drive wheels: equal speeds drive straight, a faster right wheel curves it left, and equal-but-opposite speeds spin it in place about its own center — a zero-radius turn no car can perform. Two motors and two wheels give full planar mobility with the simplest possible mechanism.
What is the instantaneous center of curvature (ICC)?
The ICC is the single point both wheels momentarily rotate around. Because both wheels are fixed to a common axle they share one angular velocity ω, so the ICC always lies on the line through both wheel contact points. Its distance from the robot center is R = (L/2)(v_R + v_L)/(v_R − v_L). When v_R = v_L the ICC is at infinity (straight line); when v_R = −v_L it sits at the robot's center (spin in place). Every maneuver is just a choice of where to put the ICC on the axis line.
What are the forward kinematic equations?
Two equations: forward velocity v = (v_R + v_L)/2 and turn rate ω = (v_R − v_L)/L, where v_R, v_L are wheel ground speeds (= wheel angular speed × radius) and L is the track width. Integrate the pose with ẋ = v·cos θ, ẏ = v·sin θ, θ̇ = ω. With L = 0.30 m, the right wheel at 0.5 m/s and the left at 0.4 m/s: v = 0.45 m/s, ω = 0.333 rad/s, turn radius 1.35 m.
Why is differential drive called nonholonomic?
Because it cannot move sideways. There is no actuator that produces lateral velocity; the body velocity is always parallel to the heading, captured by ẋ·sin θ − ẏ·cos θ = 0. That is a velocity constraint that cannot be integrated into a position constraint — the definition of nonholonomic. To reach a pose offset purely to the side, the robot must turn, drive, then turn again, even though it can pivot in place. Omniwheel and mecanum platforms are holonomic and remove the restriction.
How accurate is dead-reckoning odometry?
It drifts. Position error grows roughly linearly with distance and heading error feeds quadratically into it. Indoor hard-floor odometry typically accumulates 1–5 percent of distance in position error and 1–3 degrees per meter of heading drift. Systematic errors (unequal wheel diameters, wrong track width) can be calibrated out with the UMBmark procedure; non-systematic errors (wheel slip) cannot, so real robots fuse odometry with an IMU and lidar or visual SLAM to bound the drift.
What is the difference between differential drive and skid steer?
Both steer by left/right speed difference, but a two-wheel differential drive has clean point-contact wheels so the model is exact and turning wastes little energy, while a skid-steer (tracks or multiple fixed wheels per side) has long ground contact that must scrub sideways through a turn. That makes the effective track width uncertain, raises turning power dramatically, and degrades odometry. NASA's rocker-bogie Mars rovers use skid steering because it survives terrain that would jam a steered axle.