决策说"先低速探出,条件满足后汇入"。这句话离方向盘还差一整章。
路径不是轨迹
先分清两个词。路径回答"车从空间的哪里走"——一条线。轨迹回答"每个时刻车在哪里、速度多少、加速度多少"——一条带时间戳的线。决策交下来的"探出后汇入"连路径都不是,只是意图加一组约束;底层控制需要的是轨迹,而且是一条避开障碍、守住交规、车辆物理上做得出来、乘客坐着不难受的轨迹。
这一章讲三条把意图变成轨迹的经典路线——搜索、采样、优化——以及它们共同的失效边界怎么把我们逼向第四条路。顺带说清楚规划的终点:它到底把什么交给底层控制。
搜索:A* 为什么开不了车
最容易想到的方法:把地图打成格子,用 A* 搜一条最短路。问题马上出现——A 不管车辆运动学*。它搜出来的折线可能要求车原地转向 90 度,而真实车辆的前轮转角有上限、转弯有最小半径。路径几何上存在,物理上开不出来。
Hybrid A* 的"Hybrid"就是修这个:节点扩展用连续的车辆运动学模型(从当前状态按离散的几个前轮转角各滚动一小段,长出来的每个后继都是车真能到达的状态),代价计算仍用离散栅格。再配两个工程加速件:一是提前终止——随时试着用 Dubins/Reeds-Shepp 曲线(曲率受限下连接两个位姿的最短曲线族,允许倒车的 RS 曲线一共 48 种)直连目标,无碰撞就收工;二是双启发函数——一个只管运动学不管障碍,一个只管障碍不管运动学。课件用四张对比图说明它们各有一类盲区:前者会把目标朝向不对的代价算漏,后者会把死路的代价算漏,两个各补对方的短板,所以要同时用。
Hybrid A* 擅长非结构化场景——停车场、掉头、狭窄空间。结构化道路上,有更快的路线。
采样:一条定理撑起一个流派
结构化道路的第一步是换坐标系。Frenét 坐标沿参考线展开,把运动拆成纵向位移 s 和横向偏移 l——因为车辆几乎从不垂直于道路移动,这么一拆,"沿路开"变成了两个近似独立的一维问题。
然后是整个采样流派的理论支柱,一条五次多项式定理:最小化 jerk(加加速度,舒适性的核心度量)平方积分的最优轨迹,是五次多项式。这条定理的实际价值是降维:本来"找最优轨迹"是在无穷维函数空间里做泛函优化,现在变成——采样一批终止状态,每个终止状态配一条五次多项式,逐条算代价挑最好。可枚举、可并行、每条都自带平滑性。
纵向的终止状态按工况定义得很直白:跟车(目标位置 = 前车位置减去安全距离,安全距离 = 固定间距 + 时距×车速)、变道(取两车中点)、停车(目标速度恒为零)。横纵各自采样、组合、检查碰撞和加速度限幅,选联合代价最低的。
课件里有一处讲师标红的开放问题,值得记下:**横向和纵向分开采样再组合,怎么保证合成轨迹的曲率符合车辆约束?**没有干净的答案——这是解耦架构的裂缝之一,后面还会裂得更大。
优化:DP 画圈,QP 填线
第三条路线以 Apollo 的 EM Planner 为代表,结构是解耦 + 两段式:路径和速度分开规划,每一边都先动态规划(DP)、后二次规划(QP)。
这里有一个容易看错的架构要点。看框图会以为 DP 的输出是"一条粗糙路径",其实 DP 真正的产物是三件套:粗解、可行走廊(Feasible Tunnel)、离散决策。SL 空间里的 DP 在决定"从障碍物左边绕还是右边绕"(nudge 决策),同时圈出一条凸的可行域;QP 随后在这个凸走廊里求平滑解。DP 负责在非凸世界里做离散选择、画出凸空间,QP 负责在凸空间里精细求解——一句话:"DP 生成凸空间,QP 在凸空间求解"。
速度侧的舞台是 ST 图:横轴时间,纵轴沿路纵向位移。他车的预测轨迹在这张图上投出一条条斜的占用带,自车的速度曲线要从带子的缝隙里穿过去——从障碍带下方过是让行,从上方过是超车。所谓"速度决策",就是选择从每条带子的哪一侧通过;DP 选侧并画出可行域,QP 把折线磨成平滑曲线。
解耦的失效边界,正好落在我们的路口
EM Planner 的总结页自己写了缺点:需要横向纵向联合动作的场景搞不定,例如窄道会车——那种场景里,你走哪条线取决于你什么时候到,什么时候到又取决于你走哪条线,先定路径再配速度的架构天生给不出答案。
回到我们的汇入口:这正是一个强耦合场景。从哪个空间位置切进主路(横向),取决于切入车和后车让出的间隙什么时候出现(时间);反过来,你选择的切入点又改变了通过时机。先画线再配速的规划器在这里会反复给出"路径可行但时机冲突"的答案。
解法是不再解耦:时空联合规划。把 s-l 平面沿时间轴拉成三维 s-l-t 空间,规划直接在这个空间里做。这个空间有一个漂亮的几何直觉:静止障碍物是一根竖直的柱(位置不随时间变),运动障碍物是一片斜面(位置随时间平移)。规划就是在柱和斜面之间找一条三维曲线——空间绕行和时间避让第一次变成了同一个问题的两个投影。
代价也很直接:搜索的动作空间从"转角"变成"转角 × 加速度"的笛卡尔积,维度乘上去了。所以时空联合的工程化版本都在想办法把空间砍小,其中最成体系的是 SSC。
SSC:先修走廊,再铺轨迹
SSC(时空语义走廊)是上一章 EPSILON 的运动规划层——决策与规划在这里合龙:MPDM 选出语义行为并前向仿真出一串期望状态,SSC 沿这串状态在 s-l-t 空间里修一条走廊,再在走廊里优化轨迹。
修走廊分四步:沿仿真状态撒种子点;把每个种子膨胀成时空立方体;膨胀时受语义边界约束——车道线、红灯的时间窗、他车预测占用,撞上哪面墙,那个方向就不许再涨;最后松弛衔接。"语义"二字的含义就在这里:走廊不是纯几何的空腔,它的每一面墙都对应一条交通语义,所以走廊里的任何轨迹天然不压线、不闯灯、不撞预测占用。
轨迹优化用分段贝塞尔曲线 + QP,其中藏着一个非常优雅的技巧:贝塞尔曲线有凸包性质——整条曲线必然落在其控制点的凸包内。于是"轨迹上无穷多个点都要在走廊内"这个没法直接写的约束,变成了"有限个控制点在走廊内"的线性约束。无穷变有限,QP 才解得动。
规划交付什么:控制接口
走到这里,汇入口的完整规划是这样落地的:决策给出"探出"策略后,规划器在 s-l-t 空间检查切入车和后车的占用,生成一条低速越过停止线、任何时刻都能在可见距离内刹停的探出轨迹;确认间隙后,再接一段汇入曲线,湿滑路面下目标加速度取得更低、制动余量留得更大。每个规划周期重算一次,预测一更新,旧轨迹作废。
最终交给底层控制的是一份格式严格的交付物:带时间戳的参考轨迹(每个点含位置、朝向、曲率、速度、加速度)、目标速度与控制约束、轨迹的有效期和重规划触发条件——外加一份双方必须对齐的"合同":坐标系是哪个、时间基准是什么、曲率怎么定义。接口对不齐,一条完美的轨迹会被底层执行成一次画龙。方向盘和制动力怎么产生是控制的事,三门课对控制本身没有展开,本线也止步于这个接口。
至此,模块化链路走通了:像素进来,轨迹出去。下一章换一个问题:当这条链路上的结构化接口一层层丢掉信息、每个模块各自优化却无法联合训练时——端到端拿什么重组这一切。
本章速查
| 概念 | 一句话 |
|---|---|
| 路径 vs 轨迹 | 路径是空间的线,轨迹是带时间戳的线;控制只认后者 |
| Hybrid A* | 运动学模型扩展节点 + 栅格算代价;双启发函数各补对方盲区;擅长非结构化场景 |
| Frenét 坐标 | 沿参考线拆成纵向 s + 横向 l,"沿路开"降成两个一维问题 |
| 五次多项式定理 | 最小化 jerk 的最优轨迹是五次多项式——把泛函优化降成"采终点 + 拟合" |
| DP + QP | DP 在非凸空间做离散决策、画出凸可行走廊;QP 在走廊内求平滑解 |
| ST 图 | 横轴时间、纵轴纵向位移;从障碍带下方过=让行、上方过=超车 |
| 解耦失效边界 | 窄道会车、汇入:走哪条线和什么时候到互相决定,先路径后速度给不出答案 |
| s-l-t 空间 | 静止障碍是柱、运动障碍是斜面;空间绕行和时间避让合成一个问题 |
| SSC | 沿前向仿真状态修带语义墙的时空走廊;凸包性质把无穷点约束变有限控制点约束 |
| 控制接口 | 带时间戳的参考轨迹 + 约束 + 有效期,外加坐标系/时间基准/曲率定义的对齐 |
材料来源
| 课程 | 章节 | 页码 | 用在哪 |
|---|---|---|---|
| C | C-04a 路径与轨迹规划 | p3-p12 | A* 运动学缺陷、Hybrid A*、Dubins/Reeds-Shepp(48 种)、双启发函数互补 |
| C | C-04a 路径与轨迹规划 | p14-p28 | Frenét 坐标、五次多项式定理、跟车/变道/停车目标、曲率开放问题 |
| C | C-04a 路径与轨迹规划 | p31-p44 | EM Planner、DP 三件套(粗解/可行走廊/离散决策)、ST 图、窄道会车失效边界 |
| C | C-04b 时空联合规划 | p3-p14 | 时空分离三步、s-l-t 栅格(柱与斜面)、时空 Hybrid A* 的动作空间代价 |
| C | C-04b 时空联合规划 | p27-p40 | SSC 四步生成、语义边界约束膨胀、贝塞尔凸包性质、与 MPDM/EPSILON 的衔接 |