Skid steering: why turning requires wheel slip

Derive why four fixed wheels must scrub sideways during a turn. Compare a chosen effective-track model with differential-drive odometry, calculate contact slip speeds, and distinguish equivalent side rotation centers from the body's turning center.

By 12 min read

What you will learn

  • Show why front and rear fixed wheels cannot all roll without lateral slip during yaw.
  • Calculate lateral and longitudinal contact slip from a chosen body motion.
  • Use an empirical effective track to compare predicted turns.
  • Distinguish equivalent side rotation centers from the body's instantaneous rotation center.
  • Fit an effective track from a measured turn and state the model's limits.

Before you start

A robot with four fixed wheels must slide some of its contacts sideways to turn. Driving the two sides at different speeds creates a yaw motion that their rolling directions cannot all accommodate.

Skid steering uses that sliding contact to change direction. This lesson derives the conflict, calculates the required contact speeds, and compares two simple predictions for the same wheel inputs.

Start with four fixed wheels

Picture a rectangular robot on flat ground. All four conventional wheels point along the body x direction. Body y points left, and positive yaw ω turns counterclockwise.

Put the front wheels at x = +a and the rear wheels at x = −a. The left wheels lie at y = +b/2 and the right wheels at y = −b/2. Here a = 0.4 m and b = 0.5 m, so the wheelbase is 0.8 m.

Both wheels on one side share a signed rim speed: u_L or u_R. A positive value means forward wheel rotation. A rim speed comes from wheel angular speed times radius; ground travel can differ when contact slips.

Tracked vehicles face a related constraint across their extended contact patches. Points near the front and rear of a turning track also need lateral motion. Our four-point model illustrates this geometry; it does not model distributed track forces or terrain deformation.

Test the no-slip constraints

For a planar body with center velocity (v_x, v_y), a fixed point (x, y) has ground-relative velocity, expressed in body axes:

v_point,x = v_x − ωy
v_point,y = v_y + ωx

Each fixed wheel rolls along x. Its lateral no-slip condition therefore requires v_y + ωx = 0. Apply that condition at the front and rear:

Front: v_y + ωa = 0
Rear: v_y − ωa = 0
Subtract: 2aω = 0

Because a is positive, both conditions force ω = 0, then v_y = 0. A nonzero yaw cannot satisfy all four lateral rolling constraints. Changing the center's lateral velocity cannot remove the conflict.

This differs from an ideal two-wheel differential drive, whose drive contacts share x = 0. Those contacts can satisfy zero lateral velocity while the body turns. Ackermann steering uses another solution: rotate the wheel directions to fit the turn.

Calculate ground-relative contact motion

Wheel rotation adds a longitudinal velocity of −u_side at the bottom contact relative to the chassis. In this planar point-contact model, the resulting slip components are:

s_long = v_x − ωy − u_side
s_lat = v_y + ωx

Both components use meters per second. Their signs refer to body x and y. They are velocities across the ground, not friction forces or percentages of slip.

For the symmetric model below, v_y = 0. Front lateral contact speed becomes +ωa and rear speed becomes −ωa. The chassis center can have zero lateral velocity while every wheel scrubs sideways.

Choose an empirical effective track

A useful reduced model replaces the physical track b with an effective track B in the yaw equation:

v_x = (u_L + u_R) / 2,   v_y = 0
ω = (u_R − u_L) / B

The experiment lets B/b range from 1 to 2. A larger B reduces yaw magnitude for the same side speeds. This chosen range represents reduced turning response; it is not a universal bound for every skid-steer vehicle.

The reference holds the mean-speed gain at one. More general models fit extra gains and allow asymmetry or lateral center motion. Baril and colleagues compare several such models, including a symmetric model with a fitted virtual width.

B is an empirical parameter. The equations do not calculate it from tire friction, weight, or terrain. The blue reference uses the value you choose, so its separation from the naive estimate compares two model predictions.

Evaluating a real robot's odometry error needs an independent physical reference.

Calculate one turn

Set u_L = 0.2 m/s, u_R = 0.4 m/s, and B = 0.75 m. The physical track stays at 0.5 m.

v_x = 0.3 m/s
ω = 0.2/0.75 = 4/15 ≈ 0.266667 rad/s
ω_naive = 0.2/0.5 = 0.4 rad/s

The front wheels have lateral speed 0.4 × 4/15 = 0.106667 m/s. The rear wheels have −0.106667 m/s. At the left row, the longitudinal slip is 0.3 − (4/15)(0.25) − 0.2 = 0.033333 m/s; the right row has −0.033333 m/s.

Starting at (0, 0, 0), constant v_x and nonzero ω give:

x(t) = (v_x/ω) sin(ωt)
y(t) = (v_x/ω) [1 − cos(ωt)]
θ(t) = ωt

After four seconds, the reference pose is (0.985045, 0.581574, 1.066667). The naive prediction is (0.749680, 0.771900, 1.600000). Position differs by 0.302689 m, and naive heading minus reference heading is 0.533333 rad.

Compare the models

Four fixed wheels need room to scrub

Compare two models of the same side speeds

The reference uses a chosen empirical effective track. The naive estimate uses the physical track. Neither curve is a measurement of a real robot.

0.20
0.40
1.50
4.00

Physical track b = 0.5 m; wheelbase = 0.8 m. Both wheels on a side share its signed rim speed. The reduced model sets body lateral speed to zero and preserves the mean rim speed as forward speed. All speeds remain constant over the selected time.

Center paths in the world frame

Skid-steering model comparison: position gap 0.302689 meters after 4.0 secondsThe solid blue line and circle show the empirical reference. The dashed amber line and square show the naive differential-drive estimate. Arrows show body headings. Both axes have equal fixed meter scales. A spin can leave both centers at the origin while their headings differ.-2-20022x (m)y (m)
Solid blue and circle: chosen empirical reference. Dashed amber and square: naive estimate. The gap compares models; it is not a measured odometry error. Headings remain unwrapped in the readouts.

Lateral contact motion in body axes

Four fixed-wheel contacts: front lateral speed 0.106667 meters per secondBody x points right toward the front, and body y points up toward the left side. FL and FR mark front contacts; RL and RR mark rear contacts. Blue arrows show only lateral contact velocity, at 100 drawing units per meter per second. Diamonds mark the equivalent side slip-field rotation centers when yaw is nonzero. They are not the vehicle's rotation center.xy ↑FLFRRLRR
Arrows show signed lateral speeds, not forces. Front and rear contacts slide in opposite directions during yaw. Diamonds lie at y = ±B/2 in this symmetric model; the physical wheel rows lie at y = ±0.25 m.
Reference motion
Turn
Effective track B (m)
0.750000
Body forward speed (m/s)
0.300000
Reference yaw rate (rad/s)
0.266667
Naive yaw rate (rad/s)
0.400000
Reference x (m)
0.985045
Reference y (m)
0.581574
Reference heading (rad)
1.066667
Naive x (m)
0.749680
Naive y (m)
0.771900
Naive heading (rad)
1.600000
Position gap (m)
0.302689
Heading gap (rad)
0.533333
Center travel (m)
1.200000
Front lateral contact speed (m/s)
0.106667
Rear lateral contact speed (m/s)
-0.106667
Left longitudinal slip speed (m/s)
0.033333
Right longitudinal slip speed (m/s)
-0.033333
Body ICR y (m)
1.125000
Left equivalent ICR y (m)
0.375000
Right equivalent ICR y (m)
-0.375000

The effective track reduces yaw magnitude. The four contacts have lateral scrub and opposing longitudinal slip residuals.

Ground-relative contact slip in body axes (m/s)
ContactLongitudinalLateral
Front left0.0333330.106667
Front right-0.0333330.106667
Rear left0.033333-0.106667
Rear right-0.033333-0.106667

Contact velocities follow the selected constant command, including when elapsed time is zero. Heading gap is naive heading minus reference heading. Zero yaw has no unique finite ICR. The chosen effective track is an empirical parameter; this experiment does not compute friction, forces, terrain response, or physical feasibility.

The default view reproduces the worked turn. The path diagram uses a fixed meter scale. The contact diagram stays in body axes and shows the lateral component of each contact's velocity.

Set B/b = 1. The two center paths now match, and longitudinal slip becomes zero. Front and rear lateral speeds remain ±0.160000 m/s because yaw is still nonzero. Agreement with differential-drive center motion does not make the four-wheel turn free of scrub.

  • Straight ahead gives zero yaw and zero contact slip in this idealized model.
  • Spin in place keeps the center fixed while the wheels scrub. At B/b = 1.5, four seconds gives reference heading 3.2 rad and naive heading 4.8 rad, despite zero position gap.
  • Reverse right turn changes the signs of yaw and contact slip. The wheels roll backward while the body turns clockwise.
  • Stopped sets both side speeds to zero. Every pose and contact velocity stays fixed.

Preset changes preserve the track ratio and elapsed time. At time zero the poses coincide, while contact readouts still describe the selected constant command. Reset restores the original four-second turn.

Separate three rotation centers

For nonzero yaw and v_y = 0, the body's instantaneous center of rotation lies at (0, v_x/ω). The worked turn gives y = 1.125 m. During a spin, that center lies at the body origin.

Each side also has an equivalent rotation center for its slip-velocity field. Extend that side's contact-velocity equation across the body plane and find its zero:

x_side = 0,   y_side = (v_x − u_side)/ω
y_left = +B/2,   y_right = −B/2

At B = 0.75 m these side centers lie at y = ±0.375 m, outside the physical rows at ±0.25 m. They act like virtual contact locations for an equivalent two-wheel model. They are separate from the body's turning center.

At B = b, each virtual point lies midway along a physical wheel row. The front and rear contacts still sit at x = ±a, away from that zero-slip point. Their lateral scrub remains.

Mandow and colleagues develop this relationship between side rotation centers and equivalent differential-drive geometry. Their diagrams take forward as Y; this lesson takes forward as x.

At zero yaw, division by ω cannot define these centers. The lab reports them as undefined; a stopped body has no unique center, and straight translation has no finite body center.

Fit the track from a measured turn

Measure yaw independently, for example with a calibrated gyro or an external pose reference. For a nonzero yaw rate, the reduced model gives:

B_fit = (u_R − u_L) / ω_measured

Suppose u_L = −0.3 m/s and u_R = +0.3 m/s. If the measured spin rate is 0.8 rad/s, then B_fit = 0.6/0.8 = 0.75 m. That is 1.5 times the physical track.

One measurement fits one operating condition. Test several turns, speeds, surfaces, and load distributions before using a fixed value elsewhere. A fitted value outside the lab's range flags a mismatch with this chosen model family; it does not prove that the measurement or robot is impossible.

Equal side speeds cannot identify B from this equation. Under the model they produce zero yaw, leaving a 0/0 ratio. Noise near zero yaw also makes a single-interval fit sensitive to measurement error.

State what the model leaves out

The kinematic constraint proves that a turn needs lateral contact motion. It does not determine the forces needed to make that motion happen. A physical robot can stall, dig into soil, deform its tires, or follow a different trajectory.

Our symmetric reference fixes v_y = 0 and uses one effective width. It cannot represent general left/right asymmetry, changes in terrain or load, or a sideways center drift. It also omits acceleration and motor limits.

Rabiee and Biswas compare extended differential-drive assumptions with a model informed by friction and dynamics. That work illustrates why a chosen constant gain needs an operating context.

Using the physical track uncritically in wheel odometry can accumulate heading and position errors. Fitting B can improve a model for observed conditions. Independent measurements are still needed to evaluate its predictions.

Reproduce the comparison in Python

This standard-library Python 3 example evaluates the chosen model. It calculates both center paths and the four contact-slip components. The sinc form handles straight motion without dividing by yaw rate.

from math import sin, cos, hypot


def pose(v, omega, duration):
    angle = omega * duration
    half = angle / 2
    sinc = 1 - half**2 / 6 + half**4 / 120 if abs(half) < 1e-6 else sin(half) / half
    chord = v * duration * sinc
    return chord * cos(half), chord * sin(half), angle


def clean(value):
    return 0.0 if abs(value) < 1e-10 else value


left, right = 0.2, 0.4
track, effective_track, half_length = 0.5, 0.75, 0.4
v = (left + right) / 2
omega = (right - left) / effective_track
reference = pose(v, omega, 4)
naive = pose(v, (right - left) / track, 4)
for name, q in [("reference", reference), ("naive", naive)]:
    print(f"{name}: x={clean(q[0]):.6f}; y={clean(q[1]):.6f}; heading={q[2]:.6f}")
gap = hypot(naive[0] - reference[0], naive[1] - reference[1])
print(f"position gap={gap:.6f}; heading gap={naive[2]-reference[2]:.6f}")
for name, x, y, rim in [("FL", half_length, track/2, left),
                        ("FR", half_length, -track/2, right),
                        ("RL", -half_length, track/2, left),
                        ("RR", -half_length, -track/2, right)]:
    longitudinal = v - omega * y - rim
    lateral = omega * x
    print(f"{name}: longitudinal={clean(longitudinal):.6f}; lateral={clean(lateral):.6f}")

Expected output, with positions in meters, headings in radians, and contact speeds in meters per second:

reference: x=0.985045; y=0.581574; heading=1.066667
naive: x=0.749680; y=0.771900; heading=1.600000
position gap=0.302689; heading gap=0.533333
FL: longitudinal=0.033333; lateral=0.106667
FR: longitudinal=-0.033333; lateral=0.106667
RL: longitudinal=0.033333; lateral=-0.106667
RR: longitudinal=-0.033333; lateral=-0.106667

Try it yourself

Exercise 1. Match the naive center path. Keep the default wheel speeds and duration, but set B/b = 1. Calculate yaw and all four lateral contact speeds. Does matching the center paths remove the no-slip conflict?

Check the four contact speeds

B = b = 0.5 m gives ω = (0.4 − 0.2)/0.5 = 0.4 rad/s. Both front contacts have lateral speed +0.16 m/s; both rear contacts have −0.16 m/s. The center paths agree and longitudinal slip is zero, but the four fixed wheels still scrub sideways.

Exercise 2. Measure a spin. Drive the sides at −0.3 and +0.3 m/s. An independent sensor measures 3.2 radians of yaw over four seconds at a steady rate. Find B, the side rotation-center locations, and front lateral contact speed.

Check the fitted track and scrub

The yaw rate is 3.2/4 = 0.8 rad/s, giving B = 0.6/0.8 = 0.75 m. Equivalent side centers lie at y = ±0.375 m, while the body's own center of rotation is the origin. Front lateral speed is 0.8 × 0.4 = 0.32 m/s; rear speed is −0.32 m/s.

Choose the spin preset and B/b = 1.5 to check these values. Both model centers stay fixed, yet their headings differ by 1.6 rad after four seconds. Position alone would miss that difference.

Sources and further study

Continue with wheel odometry to see how these motion assumptions affect an accumulated pose estimate. The instantaneous center of rotation lesson develops the rigid-body velocity geometry behind the contact calculation.