4、轨迹平滑核心指标:连续性(C0/C1/C2)、曲率、加加速度(Jerk)
各位同学,今天我们来聊聊轨迹平滑的核心指标。说实话,这可能是整个避障算法里最容易被忽视、但又最致命的一环。
我刚开始做机器人运动规划那会儿,总觉得只要路径能绕开障碍物就行。结果呢?机器人走起来一顿一顿的,像在跳机械舞。后来我才明白——轨迹平滑,才是让机器人从「像个新手」变成「像个老司机」的关键。
4.1 连续性:C0、C1、C2 到底在说什么?
先问大家一个问题:你坐过那种急刹车、急转弯的出租车吗?那种体验,说白了就是轨迹连续性不够好。
连续性,描述的是轨迹在不同段之间的衔接质量。我们一般用 C0、C1、C2 来分级:
| 连续性等级 | 含义 | 数学表达 | 实际感受 |
|---|---|---|---|
| C0 | 位置连续 | p(t) 连续 | 不会瞬移,但可能急停 |
| C1 | 速度连续 | v(t) 连续 | 速度变化平滑,无突变 |
| C2 | 加速度连续 | a(t) 连续 | 加减速平缓,体感舒适 |
核心观点:大多数工业场景,C1 是底线,C2 是追求。如果你做的是 AGV 或者服务机器人,C2 几乎就是刚需。
我记得有一次做仓储机器人的项目,路径规划只保证了 C0 连续。结果机器人每次转弯都像被踹了一脚,货架上的箱子哗啦啦往下掉。嗯,从那以后,我再也不敢只做 C0 了。
4.2 曲率:转弯的「急」与「缓」
曲率,说白了就是描述轨迹弯曲程度的指标。曲率越大,转弯越急;曲率越小,路径越直。
数学上,曲率 κ 的定义是:
κ = |dθ / ds|
其中 θ 是切线方向角,s 是弧长。简单理解就是:单位弧长上方向变化的快慢。
你想想看,如果一条轨迹在某点的曲率突然变得很大,那机器人就得猛打方向盘。对于差速轮机器人还好,如果是阿克曼转向的车,那基本就是原地打转了。
我的经验:在实际项目中,我习惯把曲率阈值设为一个安全值。比如对于 1m/s 速度的机器人,曲率最好不超过 0.5 m⁻¹。超过这个值,机器人就容易侧滑或者失控。
4.3 加加速度(Jerk):被忽视的「舒适度杀手」
加加速度,英文叫 Jerk,是加速度的变化率。公式很简单:
Jerk = da / dt
为什么这个指标重要?
我举个例子。你坐电梯,启动那一下是不是会感觉「嗡」一下?那就是加速度突变带来的 Jerk。如果 Jerk 太大,人的前庭系统就会抗议——说白了就是晕车。
对于机器人来说,Jerk 过大会导致:
- 电机电流冲击,容易烧驱动器
- 机械结构震动,影响定位精度
- 货物晃动,甚至倾倒
我曾经踩过的坑:有一次做高速分拣机器人,我优化了路径的 C2 连续性,但没管 Jerk。结果机器人跑起来像在跳霹雳舞,末端执行器抖得跟筛子似的。后来加了 Jerk 约束,问题才解决。
4.4 四个指标的关系:一张图看懂
下面这张图,是我自己总结的轨迹平滑核心指标关系图。你看完应该就明白了:
4.5 实战中的取舍
你可能会问:是不是连续性越高越好?
不一定。我个人的经验是:
- 低速场景(< 0.5m/s):C1 就够了,曲率别太离谱就行
- 中速场景(0.5~2m/s):C2 是必须的,Jerk 要控制在 2m/s³ 以内
- 高速场景(> 2m/s):C2 是底线,Jerk 最好小于 1m/s³,曲率要平滑过渡
一个小技巧:我习惯在轨迹优化时,把 Jerk 的权重设得比曲率大一点。因为曲率问题可以通过减速来缓解,但 Jerk 问题减速也救不了——你想想看,急加速和急减速带来的冲击,跟速度大小关系不大。
4.6 小结
好了,这一节的内容就这些。总结一下:
- C0/C1/C2 是轨迹连续性的三个层次,C2 是大多数场景的追求目标
- 曲率 决定了转弯的急缓,要设置合理的阈值
- Jerk 是加速度的变化率,直接影响舒适度和机械寿命
- 四个指标要综合考虑,根据实际场景做取舍
下一节我们会讲具体的轨迹平滑算法,比如 B 样条、贝塞尔曲线这些。到时候我会结合代码,带大家一步步实现。今天就先到这里,有问题随时问我。