1. 速度规划概述

什么是速度规划

速度规划,说白了就是给自动驾驶的车子定一个「速度曲线」。你想想看,路径规划告诉车子往哪走,但走多快、什么时候加速、什么时候刹车,这就是速度规划的事了。

我个人的理解更直白一些:速度规划就是解决「怎么踩油门和刹车」的问题。它接收路径规划给出的轨迹,然后在这条轨迹上分配每个点的速度、加速度、甚至加加速度(Jerk)。

举个例子,前方有个弯道。路径规划已经画好了转弯的路线,但速度规划要决定:入弯前减到多少?弯中能不能保持匀速?出弯时怎么平顺加速?这些决策直接影响乘客的舒适度和安全性。

核心定义:速度规划是在已知路径上,生成一个关于时间或里程的速度-位置(v-s)曲线,满足车辆动力学约束、交通规则约束和舒适性要求。

速度规划在自动驾驶中的角色

我在项目中遇到过不少同行,总觉得速度规划就是「路径规划的附属品」。其实不然。它的角色非常关键,我总结了三点:

  1. 安全兜底:路径规划可能给出一个理论上可行的路线,但速度规划才是真正决定「能不能安全通过」的关卡。比如前方突然出现障碍物,路径规划可能来不及重新规划,但速度规划可以立刻触发紧急制动。
  2. 舒适性担当:你想想看,同样的路径,一个老司机开和一个小白开,体验天差地别。速度规划就是那个「老司机」,它通过控制加速度变化率(Jerk),让加减速过程平顺自然。
  3. 效率优化器:在保证安全的前提下,速度规划要尽量让车子跑得快。我记得有一次调试,发现同样的路段,优化了速度规划参数后,通行时间缩短了15%。

我的经验:速度规划是「戴着镣铐跳舞」。镣铐是物理极限、法规限速、舒适阈值,舞姿是效率和平顺性。调优的本质就是在这些约束之间找平衡。

速度规划与路径规划的区别与联系

很多刚入行的朋友容易把这两个概念搞混。我画了一张图,帮你理清它们的关系:

速度规划 vs 路径规划:关系与分工 路径规划 输入:地图、定位、障碍物 输出:空间路径 (x, y, θ) 关注:去哪里、走哪条道 速度规划 输入:路径、限速、障碍物 输出:速度曲线 v(s) 或 v(t) 关注:多快、何时加减速 路径输入 联合输出:带速度信息的轨迹 路径 + 速度 = 可执行的行驶指令 关键区别:路径规划解决「空间问题」,速度规划解决「时间问题」 两者缺一不可,共同构成完整的运动规划模块

我再从几个维度帮你对比一下:

对比维度 路径规划 速度规划
输出形式 空间点序列 (x, y, θ) 速度/加速度序列 (v, a)
主要约束 道路边界、障碍物、曲率 限速、加速度极限、舒适度
优化目标 路径最短、避障、平滑 时间最优、能耗最低、平顺
时间维度 不关心时间 核心关注时间
典型算法 A*、RRT、Lattice Planner ST图、QP优化、PID

避坑提醒:我曾经犯过一个错误——把路径规划和速度规划完全解耦,各自独立调优。结果路径规划出来的路线曲率变化剧烈,速度规划根本没法平顺通过。后来我意识到,两者必须联合考虑,尤其是路径的曲率变化率,直接影响速度规划的可执行性。

速度规划的核心输入

搞清楚了角色和区别,我们再看看速度规划到底需要哪些输入。我个人习惯把它们分成三类:

  • 静态输入:道路限速、曲率、坡度、交通标志。这些信息通常来自高精地图,变化频率低。
  • 动态输入:前方障碍物的位置和速度、交通灯状态、自车状态(当前速度、加速度)。这些信息实时更新,是速度规划最头疼的部分。
  • 约束输入:车辆动力学极限(最大加速度、最小转弯半径)、舒适性阈值(Jerk上限)、法规要求(限速、跟车距离)。

一个小技巧:调优时先把静态输入处理干净,比如地图限速的平滑滤波。我见过太多人一上来就调动态参数,结果静态输入里的噪声把整个系统带偏了。

速度规划的输出形式

速度规划的输出,常见的有两种形式:

  1. v-s 曲线:速度关于里程的函数。这种形式适合离线规划,计算简单,但无法直接处理时间相关的约束(比如红绿灯)。
  2. v-t 曲线:速度关于时间的函数。这种形式更贴近实际控制,但计算量更大,需要处理时间维度的积分。

实际工程中,我更喜欢用 ST 图(Speed-Time 图) 来做速度规划。它把障碍物投影到时间-里程空间,然后在这个空间里找一条不碰撞的路径。嗯,这个后面章节会详细讲。

// 一个简化的速度规划输出示例
// v-s 曲线:里程 s 对应的目标速度 v
s = [0.0, 10.0, 20.0, 30.0, 40.0]   // 里程 (m)
v = [8.0, 8.0, 6.0, 4.0, 4.0]       // 速度 (m/s)

// 对应的加速度可以通过差分计算
a = diff(v) / diff(s) * v_avg       // 加速度 (m/s²)

说白了,速度规划就是把这些离散的点连成一条平滑的曲线,然后交给下层控制器去执行。控制器再根据实际反馈,做微调补偿。

好了,这一章我们理清了速度规划的基本概念、它在系统里的位置、以及和路径规划的分工。这些是后面所有调优工作的基础。你想想看,如果连「规划什么」都没搞清楚,调参数就是瞎调。