自动驾驶控制:入门篇

参考轨迹和车辆状态

讲清楚控制器到底需要什么输入。

这篇文章讲什么

上一篇讲了自动驾驶控制系统的大框架:

参考轨迹 + 车辆状态 → 控制器 → 加速度 + 转向角

这一篇只讲控制器的两个输入:

  • 参考轨迹
  • 车辆状态

控制器不是凭空算加速度和转向角的。

它必须先知道两件事:

我应该去哪?
我现在在哪?

参考轨迹回答第一个问题,车辆状态回答第二个问题。

参考轨迹是什么

参考轨迹可以理解成规划模块给控制器的一串目标点。

它不是一句“往前开”,而是一组更具体的数据:

第 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)

这一步做完之后,控制器就知道:

  • 当前车辆在哪里
  • 当前车辆速度是多少
  • 前方应该追哪个点
  • 目标速度是多少

后面的纵向控制和横向控制,都是基于这些输入继续计算。

小结

这一篇只需要记住一句话:

控制器要想算出加速度和转向角,必须先知道参考轨迹和车辆状态。

参考轨迹告诉控制器:

我应该去哪

车辆状态告诉控制器:

我现在在哪

有了这两个输入,后面才谈得上车辆模型、纵向控制和横向控制。