3、参考速度规划(一):基于场景的速度限制、弯道速度规划、基于曲率的速度约束
各位同学,今天我们来聊聊速度规划里最基础、也最绕不开的一块——参考速度怎么定。
说实话,我刚入行那会儿,觉得速度规划不就是给个目标速度嘛,PID一追就完事了。后来在实车上跑了一次紧急避障,差点没把我吓出一身冷汗。嗯,从那以后我才真正明白:参考速度要是拍脑袋定的,后面的控制全是白搭。
3.1 基于场景的速度限制
先说说场景限速。这个其实很好理解——不同路段,车能跑多快,不是由你油门决定的,而是由场景说了算。
我习惯把场景限速分成三类:
- 法规限速:交规规定的最高速度,比如城市道路60km/h,高速120km/h。这个没得商量。
- 感知限速:传感器检测到的临时限制,比如前方施工牌、限速标志、行人密集区。
- 逻辑限速:根据车辆状态或任务需求定的速度,比如泊车时不超过5km/h,掉头时不超过15km/h。
你想想看,这三类限速同时存在时,该听谁的?
答案很简单:取最小值。说白了,安全第一,哪个限制最严格,我们就按哪个来。
核心原则:参考速度 = min(法规限速, 感知限速, 逻辑限速)
我在项目中遇到过一个问题:某次测试,感知模块误识别了一个限速30的标志,结果车在高速上突然急刹。后来我们加了一个置信度阈值——低于80%置信度的感知限速,直接忽略。这个坑,你们以后大概率也会踩到。
3.2 弯道速度规划
弯道速度规划,说白了就是回答一个问题:这个弯,我该用多快的速度过?
我个人习惯用两个维度来评估:
- 横向加速度约束:乘客的屁股不会滑出去,一般控制在2~3 m/s²以内。
- 侧倾风险约束:车不会翻,这个跟重心高度和轮距有关,乘用车一般控制在4~5 m/s²。
公式其实不复杂:
v_max = sqrt( a_y_max * |R| )
其中 a_y_max 是允许的最大横向加速度,R 是弯道曲率半径。
举个例子:一个弯道半径50米,我们设定舒适横向加速度为2.5 m/s²,那么:
v_max = sqrt(2.5 * 50) = sqrt(125) ≈ 11.18 m/s ≈ 40 km/h
嗯,这里要注意:这个公式算出来的是理论极限。实际工程中,我一般会再打个八折。为什么?因为路面附着系数、轮胎状态、甚至车上坐了几个人,都会影响实际过弯能力。我曾经在雨天测试时,按理论值给了速度,结果车头直接推了出去……从那以后,我的弯道限速都留了20%的余量。
工程小技巧:弯道速度规划时,建议在入弯前50~80米就开始减速,而不是到了弯心才减。这样乘客体验会好很多,也不会被骂「开得像出租车」。
3.3 基于曲率的速度约束
曲率,说白了就是弯的「有多弯」。曲率越大,弯越急,速度就得越低。
在实际路径规划中,路径通常是用离散点表示的。每个点都有一个曲率值 κ(kappa)。曲率和半径的关系很简单:
κ = 1 / R
那么基于曲率的速度约束就是:
v_curvature = sqrt( a_y_max / |κ| )
我习惯的做法是:先遍历整条路径,计算每个点的曲率约束速度,然后做一次平滑处理。为什么?因为曲率计算本身有噪声,直接取原始值会导致速度忽快忽慢,乘客会晕车。
平滑方法我常用两种:
- 滑动窗口平均:取前后各5个点的曲率均值,简单有效。
- 低通滤波:对曲率序列做一阶低通滤波,截止频率根据路径采样率来调。
注意:曲率约束速度不能直接作为最终参考速度。它必须和场景限速、目标速度取最小值。否则,在直道上曲率接近0,约束速度会趋于无穷大,那车就飞起来了。
3.4 知识体系总览
下面这张图,是我自己总结的参考速度规划核心逻辑。你们可以把它当成一个速查表:
3.5 实际工程中的避坑指南
最后,分享几个我踩过的坑,你们记一下:
- 曲率计算要小心离散点噪声:路径点如果太密,曲率会剧烈抖动。我一般先对路径做重采样,间隔1米一个点,再算曲率。
- 场景限速切换要加过渡:比如从120km/h路段突然进入60km/h路段,直接跳变会导致急刹车。我习惯用梯形速度曲线做过渡,减速时间控制在3~5秒。
- 别忘了考虑坡度:下坡时,同样的弯道速度,制动距离会变长。我一般在弯道限速基础上,再根据坡度做一个修正:每1%坡度,速度降低2~3%。
一句话总结:参考速度规划,不是算一个数就完事了。它是场景、路径、车辆状态三者博弈的结果。多留余量,多考虑边界情况,你的车才能开得又稳又安全。
公众号:蓝海资料掘金营,微信deep3321