自动驾驶控制:入门篇
参考轨迹和车辆状态
讲清楚控制器到底需要什么输入。
这篇文章讲什么
上一篇讲了自动驾驶控制系统的大框架:
参考轨迹 + 车辆状态 → 控制器 → 加速度 + 转向角
这一篇只讲控制器的两个输入:
- 参考轨迹
- 车辆状态
控制器不是凭空算加速度和转向角的。
它必须先知道两件事:
我应该去哪?
我现在在哪?
参考轨迹回答第一个问题,车辆状态回答第二个问题。
参考轨迹是什么
参考轨迹可以理解成规划模块给控制器的一串目标点。
它不是一句“往前开”,而是一组更具体的数据:
第 1 个点:x, y, yaw, v
第 2 个点:x, y, yaw, v
第 3 个点:x, y, yaw, v
...
每个点都在告诉车辆:
- 这里的位置在哪里
- 这里的车头方向应该是多少
- 经过这里时速度最好是多少
控制器要做的事情,就是让车辆尽量沿着这些点走。

参考轨迹通常包含哪些字段
不同项目里的轨迹格式不完全一样,但入门阶段可以先记住下面这些字段。
| 字段 | 含义 | 控制里怎么用 |
|---|---|---|
x |
参考点横向坐标 | 判断目标点位置 |
y |
参考点纵向坐标 | 判断目标点位置 |
yaw |
参考点航向角 | 判断目标方向 |
v |
参考速度 | 给纵向控制器 |
kappa |
曲率 | 判断路径弯曲程度,可选 |
s |
路径累计距离 | 用来按路径顺序查点,可选 |
最小系统里,不一定每个字段都要用。
如果只是先跑通 P 控制器 + Pure Pursuit,通常最关键的是:
x, y, yaw, v
其中:
x, y给横向控制器找目标点v给纵向控制器控制速度yaw帮助理解车辆和轨迹方向是否一致
车辆状态是什么
车辆状态描述的是当前车辆自己的情况。
可以理解成控制器每一帧都要读取的“车辆当前状态快照”。
常见字段如下。
| 字段 | 含义 | 控制里怎么用 |
|---|---|---|
x |
当前车辆横向坐标 | 和参考轨迹比较位置偏差 |
y |
当前车辆纵向坐标 | 和参考轨迹比较位置偏差 |
yaw |
当前车辆航向角 | 判断车头朝向 |
v |
当前速度 | 和目标速度比较 |
a |
当前加速度 | 可用于更复杂控制,可选 |
delta |
当前转向角 | 可用于限制或调试,可选 |
最小系统里,最关键的是:
x, y, yaw, v
其中:
x, y, yaw给横向控制用v给纵向控制用

控制器为什么需要这些输入
控制器本质上是在不断修正偏差。
纵向控制看的是速度偏差:
速度误差 = 目标速度 - 当前速度
如果目标速度是 10 m/s,当前速度是 8 m/s,说明车慢了,需要加速。
如果目标速度是 10 m/s,当前速度是 12 m/s,说明车快了,需要减速。
横向控制看的是位置和方向偏差。
比如 Pure Pursuit 会在参考轨迹前方找一个目标点,然后让车朝这个目标点开过去。
所以它至少需要:
- 当前车辆位置
- 当前车辆朝向
- 前方参考轨迹点
这就是为什么控制器离不开参考轨迹和车辆状态。
最近点和目标点
实际控制时,参考轨迹通常是一长串点。
控制器不会每次都看完整条轨迹,而是先找到车辆附近的点。
最常见的做法是:
1. 遍历参考轨迹
2. 找到离当前车辆最近的点
3. 再沿着轨迹往前找一个目标点
4. 把这个目标点交给控制器
这个“前方目标点”对 Pure Pursuit 很重要。
它不是让车盯着脚下最近点,而是让车看向前方一点点。
这样车辆会更平滑地沿着轨迹走。

最小伪代码
参考轨迹和车辆状态进入控制器之前,可以先整理成下面这种流程:
reference_path = load_reference_path()
while running:
state = get_vehicle_state()
nearest_point = find_nearest_point(reference_path, state)
target_point = find_target_point(reference_path, nearest_point)
target_speed = target_point.v
target_position = (target_point.x, target_point.y)
send_to_controller(state, target_point)
这一步做完之后,控制器就知道:
- 当前车辆在哪里
- 当前车辆速度是多少
- 前方应该追哪个点
- 目标速度是多少
后面的纵向控制和横向控制,都是基于这些输入继续计算。
小结
这一篇只需要记住一句话:
控制器要想算出加速度和转向角,必须先知道参考轨迹和车辆状态。
参考轨迹告诉控制器:
我应该去哪
车辆状态告诉控制器:
我现在在哪
有了这两个输入,后面才谈得上车辆模型、纵向控制和横向控制。