---
kind: concept
slug: vehicle-platooning
title: Vehicle platooning
summary: >-
  Followers drive in a convoy at a fixed desired time gap behind a leader, tracking their predecessor's path. Vehicles join or leave the convoy through a platoon manager. The main variant choice is the join rule and the step size used in the following law. The only evidence so far is one simulation-only freeway study.
tags: [autonomous-driving, platooning, control]
papers: ["2107.06260"]
related: [cooperative-driving-automation]
status: draft
updated_at: 2026-10-18
---

## Overview

A platoon is a convoy of automated vehicles that drive one behind another. The
leader keeps its own speed. Each follower tracks the vehicle in front at a
fixed desired time gap [arxiv:2107.06260 §IV.A]. A platoon manager groups the
vehicles of one convoy and handles requests from vehicles that want to join
[arxiv:2107.06260 §III.D] [arxiv:2107.06260 §IV.A].

This page covers the platoon's own control: the following law, the convoy
tests, and the join step. The test bench and the join rule are described on
[Cooperative driving automation](/concepts/cooperative-driving-automation).

All evidence here comes from one card, [OpenCDA](/papers/2107.06260). It is a
simulation-only study on one freeway layout with one platoon, and its author-reported
numbers have not been checked on real vehicles [arxiv:2107.06260 §V].

## Variants

### Fixed time-gap following on the predecessor's track

Each follower's next position blends the predecessor's rear position with its
own previous position, weighted by the desired gap. Its speed comes from the
displacement over one step [arxiv:2107.06260 §IV.A] [arxiv:2107.06260 eq. 5]
[arxiv:2107.06260 eq. 6]. The paper describes this one following law and
gives no alternative. Its reported target is a 0.6 s time gap [arxiv:2107.06260 tab. 1].
In the single-lane run, followers held average gaps of 0.602 to 0.603 s with
zero hazard events [arxiv:2107.06260 tab. 1 (a)] [arxiv:2107.06260 §V.A].

### Convoy with a leader speed profile

The stability test uses a five-vehicle convoy: the leader and four followers
[arxiv:2107.06260 §IV.B.1]. The leader follows a speed profile of 25 m/s, then
30 m/s, each held for 20 s [arxiv:2107.06260 §IV.B.1]. A second run adds a
human-driven vehicle in front of the convoy and reports followers at 0.605 to
0.614 s [arxiv:2107.06260 tab. 1 (b)] [arxiv:2107.06260 §V.A]. Card:
[OpenCDA](/papers/2107.06260).

### Joining a moving platoon

A single vehicle that finds a platoon willing to take it chooses where to join.
The paper compares a nearest-member rule with a Genetic Fuzzy System (GFS) that
also uses platoon members' speeds and nearby human-driven vehicles
[arxiv:2107.06260 §IV.B.2]. In the on-ramp merge, the GFS rule kept the new car's
gap above 0.6 s and finished in 9.9 s. The nearest-member rule finished in 13.1 s
in the text and 13.5 s in the table [arxiv:2107.06260 §V.B] [arxiv:2107.06260 tab. 1 (c) (d)].
The join rule's design and its contradictions are on
[Cooperative driving automation](/concepts/cooperative-driving-automation).

## When to use which

| Situation | Use | Why |
|---|---|---|
| Platoon should hold a fixed headway near 0.6 s on a freeway | Fixed time-gap following | Followers held near 0.6 s with zero hazard events in the authors' single-platoon run [arxiv:2107.06260 tab. 1 (a)]. Simulation only. |
| Gap should vary with speed or traffic | Not covered by this source | The paper describes only the fixed-gap law [arxiv:2107.06260 §IV.A]. |
| A new car joins a platoon with human-driven traffic nearby | GFS rule, from the paper's description | The authors report a larger gap and a faster join [arxiv:2107.06260 §V.B]. The GFS code is not in the repository [arxiv:2107.06260 §IV.B.2] ([card](/papers/2107.06260)). |
| Results must be reproduced from code | Nearest-member rule, and the repository's step size | It is the only join rule in the repository. The paper's own time gap and step differ from the code's [arxiv:2107.06260 §IV.B.2] ([card](/papers/2107.06260)). |
| Simulator step is much finer than the planner's trajectory step | Keep one step for the following law | The following weight is gap / Δt, so 0.6 s gives 12 at 0.05 s and 3 at 0.2 s [arxiv:2107.06260 eq. 5] ([card](/papers/2107.06260)). |

Real-time cost and hardware needs are not stated. The paper does not give
hardware, CARLA or SUMO versions, or run counts [arxiv:2107.06260 §V]. Latency
and compute needs cannot be compared from it.

## Implementation sketch

The platoon update runs once per step. It goes from the leader backwards, so
each follower reads its predecessor's position for the current step. The
sketch follows the paper's equations, not the repository's code.

```pseudocode
# Platoon update, leader first, then each follower  [§IV.A] [eq. 5-6]
# Input:  vehicles ordered leader..tail; each has pos (m), length (m),
#         speed (m/s); gap (desired time gap, s); dt (step, s)
# Output: updated pos and speed for every follower

def platoon_step(vehicles, gap, dt):
    # The leader is not updated here; it keeps its own speed profile
    for j in range(1, len(vehicles)):
        pred = vehicles[j - 1]    # already updated for this step
        me = vehicles[j]
        old_pos = me.pos
        # Weight on own previous position: desired gap over step  [eq. 5]
        w = gap / dt
        # Predecessor's rear position, blended with own last position
        # The paper subtracts the predecessor's length  [eq. 5]
        me.pos = (pred.pos - pred.length + w * old_pos) / (1 + w)
        # Speed from the displacement over one step  [eq. 6]
        me.speed = abs(me.pos - old_pos) / dt
```

Notes for implementers:

- The paper's [eq. 5] subtracts the predecessor's length. The repository's
  following law does not, and it uses a different step for its trajectories
  ([card](/papers/2107.06260)). Choose one reading and test it.
- The paper's join and state logic is described in words only. It names a
  finite state machine with a maintaining mode for followers [arxiv:2107.06260 §IV.A].
  The states, transitions and their conditions are not stated, so this page
  gives no state diagram.

## Contradictions

- **Leader speed profile.** The paper uses 25 m/s and 30 m/s with 20 s holds
  [arxiv:2107.06260 §IV.B.1]. The repository's default uses 85 and 95 km/h with
  10 s holds [arxiv:2107.06260 §IV.B.1] ([card](/papers/2107.06260)).
- **Heuristic join time.** The text gives 13.1 s and the table gives 13.5 s for the
  nearest-member merge [arxiv:2107.06260 §V.B] [arxiv:2107.06260 tab. 1 (c)].
- **Minimum gap in the merge.** The text says one vehicle's gap fell below 0.2 s
  with the nearest-member rule. The table does not report a minimum gap
  [arxiv:2107.06260 §V.B] [arxiv:2107.06260 tab. 1 (c)].
- **Hazard threshold.** The paper counts hazards below 2.5 s [arxiv:2107.06260 §IV.C].
  The repository's safety threshold is 4 s and the 2.5 values in its configs
  are camera positions ([card](/papers/2107.06260)).

## Papers

- [OpenCDA: An Open Cooperative Driving Automation Framework Integrated with Co-Simulation](/papers/2107.06260): an open Python framework with a platooning benchmark, a fixed-gap following law and a join comparison, all reported from simulation.
