---
kind: concept
slug: kinematic-bicycle-model
title: Kinematic bicycle model
summary: >-
  A force-free vehicle model with no lateral slip, where each axle is one wheel at its centre and every block moves along its own heading. Two papers use it: an articulated tractor-trailer tracked by nonlinear MPC, and closed-form arc primitives for a hybrid A* search in a car-like planner. Results are author-reported, from simulation and one real vehicle.
tags: [path-tracking, vehicle-kinematics, articulated-vehicles, motion-planning]
papers: ["2412.03174", "2606.31889"]
related: [model-predictive-control, direct-collocation, a-star-search, motion-primitives]
status: draft
updated_at: 2026-10-25
---

## Overview

A kinematic model describes how a vehicle moves from its positions, angles and
speeds, without modelling the forces that cause the motion. The bicycle
simplification treats each axle as a single wheel at the axle's centre
[arxiv:2606.31889 §2]. The invariant every variant shares is the no-slip
constraint: each block's velocity lies along its own heading [arxiv:2606.31889
§2]. The authors judge this accurate enough for vehicles that run at low
accelerations, and their target vehicles are slow field machines [arxiv:2606.31889
§1].

Two papers with cards use this model. [arxiv:2606.31889 §2] writes the full
state model and integrates it inside a controller. [arxiv:2412.03174 §3.1]
uses the same turning-radius relation, k = L / tan φ, to expand nodes in a
search, so it needs only a closed-form pose update, not a time integration.

## Variants

### Articulated tractor-trailer model

A tractor with front steering angle φ and a central articulation joint with
angle γ, pulling a trailer hitched at distance d_1 behind the rear axle. The
state is the trailer's xy position, the rear and trailer yaws, γ and φ. The
inputs are the front speed and the two joint rates [arxiv:2606.31889 §2]. The
model's denominator is nonzero only while |γ| < π/2 [arxiv:2606.31889 §2]. Card:
[arXiv 2606.31889, tractor-trailer path tracking](/papers/2606.31889).

### Tractor-only model for front-block control

The same embedded tractor, controlled through its front block's xy position
with no trailer in the model. The authors' controller knows nothing about the
trailer. In headland turns this gives a front-block error below 3.8 m, and the
trailer turns on a tighter circle than the reference [arxiv:2606.31889 §5.1].
The paper uses it as the baseline for the trailer-controlled version
[arxiv:2606.31889 §5].

### Arc motion primitives for hybrid A* search

A search node advances by one circular arc at a fixed steering angle, not by
integrating the state over time. The steering set is a fraction r_s of the
maximum steering angle, and the arc length is a fraction r_a of a scale s_max.
The paper's values are r_s = 0.3, r_a = 0.5 and s_max = 1.0 [arxiv:2412.03174
§3.1.1]. The turning radius is the wheelbase divided by the tangent of the
steering angle [arxiv:2412.03174 §3.1]. The paper uses these arcs in a hybrid
A* search that builds a drivable car-like path when the local trajectory is
infeasible [arxiv:2412.03174 §3]. Its step cost penalises forward and backward
arc length, steering in proportion to arc length, and steering changes. Its
priority adds a weighted straight-line distance to the goal [arxiv:2412.03174
§3.1.1]. The wheelbase and the steering limit are not stated in the paper.
Card: [arXiv 2412.03174, resilient TEB planner](/papers/2412.03174). See
[a-star-search](/concepts/a-star-search) and
[motion-primitives](/concepts/motion-primitives) for the general methods.

## When to use which

| Situation | Use | Why |
|---|---|---|
| Slow vehicle with negligible slip, flat ground, no sensor noise modelled | The kinematic model without forces | The authors judge it accurate enough at low accelerations and for slow vehicles [arxiv:2606.31889 §1] |
| Articulated vehicle where the trailer's path matters | Articulated tractor-trailer model, trailer xy in the cost | Simulated trailer error stays below 16 cm along x once moving and below 12 cm along y in headland turns [arxiv:2606.31889 §5.2] |
| Trailer position not sensed or not in the model | Tractor-only model for front-block control | Controls the front block only; headland error is up to 3.8 m [arxiv:2606.31889 §5.1] |
| Need a drivable car-like path from a search, e.g. when a local planner's trajectory is infeasible | Arc motion primitives in hybrid A* | Each expansion is a closed-form arc, and the paper uses the search to build a drivable path [arxiv:2412.03174 §3.1.1] [arxiv:2412.03174 §3]. Its gains appear only in cluttered settings, with the largest at 30 to 50% density [arxiv:2412.03174 tab. 4] |
| Wheelbase or steering limit not known | Measure them on the vehicle | Neither value is stated in the paper, and the arc primitive cannot be built without them [arxiv:2412.03174 §3.1.1] |
| Significant slip, pitch or roll, or non-flat ground | Not covered by this page | The model assumes no slip, no pitch or roll, and flat ground [arxiv:2606.31889 §2] [arxiv:2606.31889 §7] |
| Smooth joint motion required | Expect extra design work | The paper reports violent oscillation in the inputs and proposes filters whose constants are not given [arxiv:2606.31889 §5.2] |
| Hardware or field deployment | Check per source | The tractor-trailer results are simulation only [arxiv:2606.31889 §5]; the planner paper reports a real vehicle, with its own setting per experiment [arxiv:2412.03174 §4.2] |

## Implementation sketch

The shared core is the state derivative of the articulated tractor-trailer.
Angles are in radians, and the state order follows the paper [arxiv:2606.31889
§2]. The tractor-only variant is the same model with the trailer states
removed [arxiv:2606.31889 §5.1]. Geometry values come from the paper's
scenario [arxiv:2606.31889 §5].

```pseudocode
# State derivative of the articulated tractor-trailer  [arxiv:2606.31889 eq. 13]
# State:   x_t, y_t, theta_r, theta_t, gamma, phi    [arxiv:2606.31889 §2]
# Input:   v_f, omega_1 = gamma_dot, omega_2 = phi_dot  [arxiv:2606.31889 §2]
# Geometry: L_r, L_f, d_1, d_2 (fixed lengths)     [arxiv:2606.31889 §2]

def model_rhs(state, control, geometry):
    # Unpack the state, the input and the geometry  [arxiv:2606.31889 §2]
    x_t, y_t, theta_r, theta_t, gamma, phi = state
    v_f, omega_1, omega_2 = control
    L_r, L_f, d_1, d_2 = geometry
    # Rear yaw rate from the constraints, needs |gamma| < pi/2  [arxiv:2606.31889 eq. 7]
    theta_r_dot = (
        (v_f * sin(gamma + phi) - L_f * cos(gamma) * omega_1)
        / (L_r + L_f * cos(gamma))
    )
    # Speed of the rear axle centre  [arxiv:2606.31889 eq. 14]
    v_r = (
        v_f * cos(gamma + phi)
        + L_f * (theta_r_dot + omega_1) * sin(gamma)
    )
    # Trailer yaw rate  [arxiv:2606.31889 eq. 9]
    theta_t_dot = (
        v_r / d_2 * sin(theta_r - theta_t)
        - d_1 / d_2 * theta_r_dot * cos(theta_r - theta_t)
    )
    # Trailer axle xy velocity  [arxiv:2606.31889 eq. 13]
    x_t_dot = (
        v_r * cos(theta_r)
        + d_1 * theta_r_dot * sin(theta_r)
        + d_2 * theta_t_dot * sin(theta_t)
    )
    y_t_dot = (
        v_r * sin(theta_r)
        - d_1 * theta_r_dot * cos(theta_r)
        - d_2 * theta_t_dot * cos(theta_t)
    )
    # The joint angles integrate their rates directly  [arxiv:2606.31889 eq. 13]
    return [x_t_dot, y_t_dot, theta_r_dot, theta_t_dot, omega_1, omega_2]
```

For tracking, the paper discretises this model with three collocation points
per sampling period and solves a finite-horizon problem at each step. Only the
first input is applied, then the horizon shifts [arxiv:2606.31889 §3]
[arxiv:2606.31889 §4]. The cost is quadratic in the trailer xy error and the
inputs, with a terminal term [arxiv:2606.31889 §4]. The paper's receding-horizon
parameters are a 6 s horizon and a 0.1 s sampling period [arxiv:2606.31889 §5].
See [model-predictive-control](/concepts/model-predictive-control) and
[direct-collocation](/concepts/direct-collocation) for the general methods.

The search variant needs no integration. One expansion from a pose is a
closed-form arc, which the paper writes as a discrete transition
[arxiv:2412.03174 §3.1.1]:

```pseudocode
# One arc motion primitive of a car-like robot  [arxiv:2412.03174 §3.1.1]
# Pose: x, y, theta (radians); steer (radians); arc length in metres
# Wheelbase is not stated in the paper, so it is an input here
def arc_step(pose, steer, arc, wheelbase):
    x, y, theta = pose
    # Straight motion leaves the heading unchanged  [arxiv:2412.03174 §3.1.1]
    if steer == 0:
        return (x + arc * cos(theta), y + arc * sin(theta), theta)
    # Turning radius from the wheelbase and the steering angle  [arxiv:2412.03174 §3.1]
    k = wheelbase / tan(steer)
    # Heading advances by the arc divided by the radius  [arxiv:2412.03174 §3.1.1]
    theta_new = theta + arc / k
    # Position on the circle, measured from the start pose  [arxiv:2412.03174 §3.1.1]
    x_new = x + k * (sin(theta_new) - sin(theta))
    y_new = y - k * (cos(theta_new) - cos(theta))
    return (x_new, y_new, theta_new)
```

## Contradictions

None between papers on the model itself; the two sources use it for different
jobs, a controller and a search. Within 2606.31889, Definition 1 sets the
articulation joint limit at ±π/4, while the MPC bound is ±60°
[arxiv:2606.31889 §5]. The authors' code differs from the paper in state
order, cost terms and the joint limit. See the card's
[Paper vs code](/papers/2606.31889) section for the details. Within
2412.03174, the stated forward arc range [s_max, 2 s_max] does not contain
r_a · s_max, which is 0.5 with the paper's own values [arxiv:2412.03174
§3.1.1]. Either r_a, the range or s_max is wrong, and the paper does not say
which.

## Papers

- [arXiv 2412.03174, resilient TEB planner](/papers/2412.03174): uses car-like arc primitives in a hybrid A* search to recover a drivable path for a TEB local planner, with author-reported gains in cluttered settings.
- [arXiv 2606.31889, tractor-trailer path tracking](/papers/2606.31889): derives the articulated tractor-trailer kinematic model and tracks the trailer's xy path with a nonlinear MPC, in simulation.
