4. 轨迹平滑性指标:曲率连续性、曲率变化率(Jerk)、加加速度(Snap)
各位同学,咱们今天聊点实在的。轨迹平滑性,说白了就是你的车跑起来舒不舒服、稳不稳。我见过太多新手工程师,只盯着路径长度和碰撞检测,结果车一上路,方向盘跟抽风似的来回打。嗯,这里面的门道,就在我们今天要讲的三个指标里。
4.1 曲率连续性:从几何角度看轨迹
先说说曲率。曲率描述的是曲线弯曲的程度。数学上,对于参数曲线 r(s),曲率定义为:
κ = |dT/ds| = |r'(s) × r''(s)| / |r'(s)|³
其中 T 是单位切向量,s 是弧长参数。说白了,曲率就是方向角对弧长的变化率。
曲率连续性,指的是轨迹上每一点的曲率值连续变化,没有突变。我把它分成三个等级:
| 等级 | 数学含义 | 工程表现 |
|---|---|---|
| G¹ 连续 | 切线方向连续 | 路径没有尖角,但方向盘会突然转动 |
| G² 连续 | 曲率连续 | 方向盘转动平滑,但加速度会突变 |
| G³ 连续 | 曲率变化率连续 | 乘坐体验舒适,无冲击感 |
核心观点:对于自动驾驶轨迹规划,G² 连续是底线,G³ 连续是追求。我个人的习惯是,在高速场景(>60km/h)强制要求 G³ 连续,低速泊车场景 G² 就够了。
我在项目中遇到过一个问题:用三次样条插值生成的路径,看起来挺平滑,但曲率图一画出来,在节点处有明显的跳变。结果就是,车辆在通过每个插值点时,方向盘都要猛打一下。后来我改用五次样条,曲率连续了,问题就解决了。
4.2 曲率变化率(Jerk):加速度的导数
Jerk,中文叫加加速度,是加速度对时间的导数。数学定义很简单:
Jerk = da/dt = d³r/dt³
但它的工程意义可不简单。你想想看,加速度突变意味着什么?意味着你身体感受到的力突然变化。在车上,就是那种「被推一下」的感觉。
Jerk 与曲率的关系:
对于以速度 v 行驶的车辆,横向 Jerk 可以表示为:
J_lat = v · dκ/dt = v² · dκ/ds
这里 dκ/ds 就是曲率对弧长的变化率。所以,控制 Jerk 本质上就是控制曲率的变化快慢。
工程经验:我一般把横向 Jerk 限制在 2 m/s³ 以内。超过这个值,乘客就会明显感到不适。如果是 L4 级无人出租车,我建议限制在 1 m/s³ 以下。
为什么会有这个阈值?我记得有一次做实车测试,一个同事把 Jerk 上限设到了 5 m/s³。结果测试员下车后说:「这车是不是新手开的?」——嗯,从那以后我就记住了这个教训。
4.3 加加速度(Snap):Jerk 的导数
Snap,加加速度,是 Jerk 对时间的导数:
Snap = dJ/dt = d⁴r/dt⁴
你可能觉得,都到四阶导数了,是不是有点过度设计?其实不然。Snap 控制的是 Jerk 的变化率,它直接影响的是转向系统的执行器寿命。
为什么 Snap 重要?
- 执行器保护:高 Snap 意味着转向电机需要频繁改变输出力矩,容易导致过热和磨损
- 系统稳定性:高 Snap 会激发车辆的弹性模态,引起车身抖动
- 控制精度:高 Snap 要求更高的控制频率和更精确的模型,否则容易失控
注意:不要为了追求极低的 Snap 而牺牲路径的跟踪精度。我见过有人把 Snap 限制得太死,结果路径变得过于保守,在狭窄路段根本过不去。这是个平衡问题。
我个人习惯,在规划层把 Snap 限制在 10 m/s⁴ 以内。这个值是基于我们团队多次实车测试总结出来的。当然,不同车型、不同执行器会有差异,你需要自己标定。
4.4 三个指标的内在联系
这三个指标不是孤立的。它们构成了一个从几何到动力学的完整链条:
曲率 κ → 曲率变化率 dκ/ds → Jerk → Snap
↓ ↓ ↓ ↓
几何平滑 转向平滑 体感舒适 执行器寿命
说白了,曲率是基础,曲率变化率是桥梁,Jerk 和 Snap 是最终的用户体验指标。我在做轨迹评价时,会把这四个指标加权求和,形成一个综合的平滑性得分。
我的评价公式(仅供参考):
Score = w₁·max(|κ|) + w₂·max(|dκ/ds|) + w₃·max(|Jerk|) + w₄·max(|Snap|)
权重 w₁~w₄ 根据场景调整。高速场景 w₃、w₄ 权重大,低速场景 w₁、w₂ 权重大。
4.5 知识体系总览
下面这张图,是我自己梳理的轨迹平滑性知识框架。你可以把它当作一个快速索引:
这张图把四个指标和它们的工程意义串起来了。你从上往下看,就是从几何到执行器的完整链路。我建议你把它打印出来贴在工位上,做轨迹规划时对照着看。
好了,关于轨迹平滑性指标,今天就聊这么多。记住一句话:曲率是骨架,Jerk 是血肉,Snap 是灵魂。三个指标都照顾到了,你的车才能跑得又稳又舒服。
一个小技巧:如果你手头没有实车数据,可以用仿真环境先跑一遍,画出曲率、Jerk、Snap 的曲线图。看到有尖峰的地方,就是你需要优化的位置。我每次做轨迹优化,第一件事就是看这三条曲线。
可可精品资料库