1. 课程导论与预备知识
各位同学好,我是你们这门课的主讲。在自动驾驶控制领域摸爬滚打了十几年,今天咱们来聊聊高速场景下的路径跟踪。
说实话,高速场景是我个人觉得最有意思、也最考验功底的一块。为什么?因为车速一上来,所有问题都会被放大。你想想看,低速时打个盹儿可能没事,高速上零点几秒的延迟,车就窜出去十几米了。
1.1 高速场景定义
什么叫高速场景?我习惯这么定义:车速超过 60 km/h,且道路结构相对封闭、交通流方向明确的场景。
具体来说,包括:
- 高速公路:双向隔离、全封闭、有匝道
- 城市快速路:比如高架桥、环线,限速通常在 80-100 km/h
- 国道/省道:部分封闭,但可能有平交路口
这里有个关键点——高速场景不等于只有高速。我见过不少项目,把城市快速路和高速公路混为一谈,结果控制参数调得一团糟。其实两者的曲率变化率、车道宽度、甚至路面附着系数都不一样。
1.2 路径跟踪核心问题
路径跟踪,说白了就是让车沿着我们规划好的路线走。但这里有个核心矛盾:精度 vs 稳定性。
你想想看:
- 如果追求极致精度,车会频繁调整方向盘,乘客感觉像在坐过山车
- 如果追求舒适稳定,车可能就压线了,甚至冲出车道
我个人的经验是:高速场景下,稳定性优先于精度。为什么?因为高速时横向加速度对舒适性影响极大。你让乘客在 120 km/h 下频繁左右晃,不出 5 分钟就晕车了。
路径跟踪要解决的三个核心问题:
- 预瞄问题:看多远?看太近容易振荡,看太远反应迟钝
- 控制律设计:怎么把路径偏差转化成方向盘转角?
- 鲁棒性:遇到侧风、路面倾斜、轮胎磨损,系统还能不能稳住?
1.3 车辆运动学模型基础
做控制,首先得知道车怎么动。这里我介绍最常用的自行车模型——说白了就是把四个轮子简化成两个,前轮转向、后轮驱动。
为什么用自行车模型?因为高速场景下,我们更关心车辆的运动趋势,而不是每个轮胎的细微受力。我刚开始做的时候,总想着用复杂的动力学模型,结果参数太多,调都调不过来。
自行车模型的数学表达:
// 状态量:[x, y, yaw, v]
// 控制量:[delta, a]
x_dot = v * cos(yaw)
y_dot = v * sin(yaw)
yaw_dot = v * tan(delta) / L
v_dot = a
其中:
x, y:车辆后轴中心位置yaw:航向角(车头朝向)v:纵向速度delta:前轮转角L:轴距a:加速度
嗯,这里要注意:自行车模型假设轮胎无侧滑。在高速急转弯时,这个假设会失效。我建议在车速超过 80 km/h 且弯道半径小于 200 米时,改用动力学模型。
1.4 坐标系与坐标变换
坐标系这东西,看着简单,但最容易出错。我见过太多工程师因为坐标系搞反,导致车辆原地画圈。
常用的坐标系有三个:
| 坐标系 | 原点 | 用途 |
|---|---|---|
| 世界坐标系 | 大地固定点 | 全局路径规划、地图定位 |
| 车辆坐标系 | 车辆后轴中心 | 控制量计算、传感器融合 |
| Frenet坐标系 | 参考路径上的投影点 | 路径跟踪偏差计算 |
我个人最推荐用 Frenet 坐标系 做路径跟踪。为什么?因为它把问题简化成了两个独立维度:
- 纵向:沿着路径走多远(s 坐标)
- 横向:偏离路径多远(d 坐标)
这样,控制器的输入就变成了「横向偏差」和「航向角偏差」,非常直观。
坐标变换公式(从世界坐标系到 Frenet 坐标系):
// 假设参考路径点 [x_r, y_r, yaw_r]
// 车辆位置 [x, y]
dx = x - x_r
dy = y - y_r
// 横向偏差(左正右负)
d = -dx * sin(yaw_r) + dy * cos(yaw_r)
// 纵向距离
s = dx * cos(yaw_r) + dy * sin(yaw_r)
// 航向角偏差
yaw_err = normalize_angle(yaw - yaw_r)
知识体系总览
下面这张图,是我自己总结的高速场景路径跟踪知识框架。你可以把它当作整个课程的地图:
这张图把本章的知识点串起来了。你会发现,所有内容都围绕着「如何在高速下稳定跟踪路径」这个核心问题展开。后面的课程,我们会逐一深入每个模块。
好了,第一章的预备知识就到这里。记住我今天说的:坐标系别搞反,角度记得归一化,高速场景稳定性优先。这三句话,够你用很久。
可可精品资料库