自动驾驶控制:入门篇
车辆模型
用运动学自行车模型理解车辆状态如何变化。
这篇文章讲什么
前两篇已经讲了:
- 控制系统整体在干什么
- 控制器需要参考轨迹和车辆状态
这一篇讲第三个核心概念:
车辆模型
简单说,车辆模型回答的问题是:
如果我给车一个加速度和转向角,车下一步会怎么动?
控制器输出的是:
加速度 a
转向角 δ
车辆模型描述的是这些控制量会让车辆状态怎么变化。
也就是:
当前车辆状态 + 控制量 → 下一时刻车辆状态
为什么控制需要车辆模型
控制不是只看当前位置,然后随便给一个方向盘角度。
控制器需要知道:
- 车现在在哪里
- 车现在朝哪
- 车现在速度是多少
- 给一个转向角之后,车大概会往哪走
车辆模型就是用来描述这些运动关系的。
比如:
速度越大,同样时间内走得越远
航向角不同,车辆前进方向不同
转向角越大,车辆转弯越明显
所以模型不是一个额外装饰,它是控制系统里很重要的一部分。
但入门阶段不用一上来追求复杂模型。
我们先用一个足够简单、足够好理解的模型,把系统跑起来。
模型和真实车辆的关系
模型不是完整复制真实车辆。
真实车辆很复杂,会受到很多因素影响:
- 轮胎侧偏
- 车辆质量
- 悬架
- 路面附着
- 空气阻力
- 执行器延迟
如果一开始就全部考虑,入门会非常痛苦。
所以工程里通常会根据目标选择模型复杂度。
如果只是低速轨迹跟踪、入门仿真、算法理解,简单模型就够。
如果要高速控制、极限工况、精确预测,就需要更复杂的动力学模型。
可以先记住一句话:
模型不是越复杂越好,而是要和任务匹配。
最简单的运动学自行车模型
入门阶段最常用的是运动学自行车模型。
它把一辆四轮车简化成一辆“自行车”:
- 前轮代表两个前轮
- 后轮代表两个后轮
- 车辆沿车身方向前进
- 转向角决定车辆怎么转弯
这样做的好处是:
- 好理解
- 公式简单
- 适合低速场景
- 很适合讲 Pure Pursuit、Stanley、LQR、MPC 的入门版本
可以先看成这样:
车辆当前位置:(x, y)
车辆航向角:ψ
车辆速度:v
车辆轴距:L
前轮转角:δ

模型输入和输出
车辆模型的输入通常包括两类。
第一类是当前车辆状态:
| 状态量 | 含义 |
|---|---|
x |
当前横向坐标 |
y |
当前纵向坐标 |
ψ |
当前航向角 |
v |
当前速度 |
第二类是控制器输出的控制量:
| 控制量 | 含义 |
|---|---|
a |
加速度 |
δ |
转向角 |
模型的输出是下一时刻车辆状态:
x_next
y_next
ψ_next
v_next
也就是:
车辆模型(当前状态, 控制量) → 下一时刻状态

最小模型公式
先看最核心的几个公式。
车辆在很短的时间 Δt 内,位置可以近似这样更新:
$$ x_{k+1} = x_k + v_k \cos(\psi_k) \Delta t $$
$$ y_{k+1} = y_k + v_k \sin(\psi_k) \Delta t $$
速度可以这样更新:
$$ v_{k+1} = v_k + a_k \Delta t $$
航向角可以这样更新:
$$ \psi_{k+1} = \psi_k + \frac{v_k}{L}\tan(\delta_k)\Delta t $$
这里不用急着推导,只需要理解每一项的意思。
| 符号 | 含义 |
|---|---|
x, y |
车辆位置 |
ψ |
车辆航向角 |
v |
车辆速度 |
a |
加速度 |
δ |
转向角 |
L |
车辆轴距 |
Δt |
控制周期 |
这些公式其实就在说:
- 车会沿当前车头方向往前走
- 速度越大,走得越远
- 加速度会改变速度
- 转向角会改变车头方向
模型复杂度怎么选
不同模型适合不同场景。
| 模型 | 特点 | 适合场景 |
|---|---|---|
| 质点模型 | 只关心位置和速度 | 最简单的路径理解 |
| 运动学自行车模型 | 考虑航向角和转向角 | 低速轨迹跟踪、入门控制 |
| 动力学自行车模型 | 考虑轮胎力和侧偏 | 高速、稳定性分析 |
| 复杂整车模型 | 更接近真实车辆 | 高精度仿真、车辆动力学研究 |
这个系列的目标是搭一个最小可实现系统。
所以先选:
运动学自行车模型
它足够简单,也足够连接后面的控制器。
模型和控制器是什么关系
可以这样理解:
模型:车会怎么动
控制器:为了跟上轨迹,应该怎么控制
控制器要输出加速度和转向角。
车辆模型告诉我们,这两个量会怎样影响车辆位置、速度和航向角。
比如:
- 纵向 P 控制器输出
a - Pure Pursuit 输出
δ - 车辆模型根据
a和δ更新车辆状态
放在一起就是:
参考轨迹 + 当前状态
↓
控制器计算 a, δ
↓
车辆模型更新 x, y, ψ, v
↓
得到下一时刻车辆状态
最小伪代码
车辆模型可以先理解成一个状态更新函数:
def update_vehicle(state, control, dt):
x = state.x
y = state.y
yaw = state.yaw
v = state.v
a = control.a
delta = control.delta
x_next = x + v * cos(yaw) * dt
y_next = y + v * sin(yaw) * dt
yaw_next = yaw + v / L * tan(delta) * dt
v_next = v + a * dt
return x_next, y_next, yaw_next, v_next
真实系统或仿真平台里,车辆运动会由底层车辆模型或执行器完成。
在这个入门系列里,车辆模型主要用来帮助我们理解状态如何变化。
后面更复杂的控制器,才会更强地依赖模型本身。

小结
这一篇只需要记住三句话:
车辆模型描述车辆怎么动。
控制器计算车辆应该怎么控制。
入门阶段先用运动学自行车模型,就足够搭建最小轨迹跟踪系统。