3. 速度约束建模:最大/最小速度限制、加速度限制、jerk 限制的数学表达
速度约束,说白了就是给车子的运动套上枷锁。你不能让它想跑多快就跑多快,也不能让它想怎么加速就怎么加速。这不仅是物理限制,更是安全底线。我个人习惯把速度约束拆成三个层次:速度本身、加速度、以及加加速度(jerk)。咱们一层一层剥开看。
3.1 最大/最小速度限制
这个最直观。车子有最高时速,也有倒车时的最大速度(通常为负值)。数学上就是:
v_min ≤ v(t) ≤ v_max
其中 v(t) 是 t 时刻的速度。v_min 一般是 0(不允许倒车)或者某个负值(允许倒车),v_max 是物理极限或法规限速。
我在项目中遇到过一个问题:v_max 不是常数。比如弯道中,最大速度受曲率限制。所以实际建模时,v_max 往往是关于曲率 κ 的函数:
v_max(κ) = min( v_legal, sqrt(μ·g / |κ|) )
这里 μ 是路面摩擦系数,g 是重力加速度。嗯,这个公式在高速匝道规划时特别有用。
核心要点:速度限制不是孤立的,它和路径曲率、路面附着系数强耦合。单独设一个常数 v_max 是不够的。
3.2 加速度限制
加速度限制比速度限制更复杂。它分为纵向加速度和横向加速度。纵向加速度限制车辆的加速和制动能力,横向加速度限制车辆的过弯能力。
数学表达为:
a_long_min ≤ a_long(t) ≤ a_long_max
|a_lat(t)| ≤ a_lat_max
但实际中,纵向和横向加速度是耦合的。你想想看,如果一边急刹车一边猛打方向,轮胎很容易突破附着极限。所以更合理的模型是摩擦椭圆(friction ellipse):
(a_long / a_long_max)² + (a_lat / a_lat_max)² ≤ 1
这个公式我特别喜欢。它用一个椭圆把纵向和横向加速度的联合限制表达得清清楚楚。我曾经在一个项目中,因为忽略了摩擦椭圆,导致规划出的轨迹在紧急避障时轮胎打滑——嗯,从那以后我再也不敢偷懒了。
| 约束类型 | 数学表达 | 物理意义 |
|---|---|---|
| 纵向加速度 | a_long_min ≤ a_long ≤ a_long_max | 加速/制动能力 |
| 横向加速度 | |a_lat| ≤ a_lat_max | 过弯能力 |
| 联合约束 | (a_long/a_long_max)² + (a_lat/a_lat_max)² ≤ 1 | 轮胎附着极限 |
实用技巧:在离散化求解时,我建议把摩擦椭圆用多边形近似。这样既能保留精度,又能把非线性约束转化为线性约束,求解速度会快很多。
3.3 Jerk 限制
Jerk 是加速度的变化率,也就是加速度对时间的导数。为什么需要限制 jerk?因为 jerk 太大,乘客会感到突兀和不舒服。说白了,就是乘坐舒适性。
数学表达:
jerk_min ≤ jerk(t) ≤ jerk_max
其中 jerk(t) = da(t)/dt。通常 jerk 限制在 ±2~5 m/s³ 之间,具体取决于应用场景。比如:
- 自动驾驶出租车:jerk ≤ 2 m/s³(追求舒适)
- 紧急避障:jerk ≤ 5 m/s³(安全优先)
- 赛车:jerk 限制可以放宽甚至忽略
我记得有一次做泊车规划,因为没加 jerk 约束,车子在最后一段突然急刹,乘客差点撞到前挡风玻璃。加了 jerk 限制后,整个停车过程丝滑得像老司机。
3.4 联合约束的数学表达
把上面三个约束整合到一起,就得到了完整的速度约束模型。在路径规划中,我们通常把速度表示为路径弧长 s 的函数,而不是时间的函数。这样方便和路径曲率联合优化。
完整约束如下:
v_min ≤ v(s) ≤ v_max(κ(s))
a_min ≤ v(s)·v'(s) ≤ a_max
jerk_min ≤ v(s)·v''(s) + v'(s)² ≤ jerk_max
其中 v'(s) 是速度对弧长的导数,v''(s) 是二阶导数。这里要注意,加速度和 jerk 的表达式中都包含了速度项,说明它们之间是强耦合的。
避坑指南:我曾经在离散化时,直接把 jerk 约束写成 v''(s) 的界限,结果算出来的轨迹在高速段完全不合理。后来才发现,jerk 约束中 v(s)·v''(s) 这一项在高速时占主导,不能简单忽略。
3.5 知识体系结构图
下面这张图展示了速度约束建模的完整知识体系。你可以看到,三个层次的约束层层递进,最终汇聚到联合优化模型中。
3.6 实际建模中的注意事项
最后,分享几个我在实际项目中踩过的坑:
- 离散化步长要匹配:速度约束的离散化步长要和路径曲率的离散化步长一致,否则会出现约束不匹配的问题。
- 边界条件要小心:起点和终点的速度、加速度、jerk 都要明确。我见过有人只约束了速度,结果起点加速度突变,导致求解器发散。
- 软约束 vs 硬约束:对于 jerk 这种舒适性相关的约束,我建议用软约束(加惩罚项),而不是硬约束。这样在紧急情况下,系统可以适当牺牲舒适性来保证安全。
一句话总结:速度约束建模不是简单的加减乘除,而是要在物理极限、舒适性、求解效率之间找到平衡。把这三个层次的约束理解透了,后面的联合优化才能水到渠成。
可可精品资料库