3. 加速度平滑的数学基础:S曲线与梯形曲线的对比分析
做纵向控制这些年,我越来越觉得加速度平滑是个「细节决定成败」的活。你想想看,一辆车如果加速时一耸一耸的,乘客肯定不舒服。更严重的是,对执行器寿命也有影响。今天我们就来聊聊两种最常见的加速度曲线——S曲线和梯形曲线。
3.1 梯形曲线:简单但粗暴
梯形曲线,说白了就是加速度从0直接跳到目标值,保持一段时间,再直接跳回0。它的形状像个梯形,所以叫这个名字。
数学表达式:
a(t) =
a_max, 0 ≤ t < t1
0, t1 ≤ t < t2
-a_max, t2 ≤ t < t3
其中 a_max 是最大加速度,t1、t2、t3 是时间节点。
核心问题:加速度在时间节点处存在跳变。这种跳变会导致加加速度(jerk)无穷大。
我在项目中遇到过这样一个案例:某款车型用梯形曲线做起步控制,结果每次起步时电机电流都会出现一个尖峰。查了半天,发现就是加速度跳变导致的。嗯,这就是梯形曲线的硬伤。
3.2 S曲线:平滑的代价
S曲线,顾名思义,加速度的变化是连续的、平滑的。它通过引入加加速度约束,让加速度从0逐渐增加到目标值,再逐渐降回0。
数学表达式:
a(t) =
J_max * t, 0 ≤ t < t1
a_max, t1 ≤ t < t2
a_max - J_max * t, t2 ≤ t < t3
0, t3 ≤ t < t4
-J_max * t, t4 ≤ t < t5
-a_max, t5 ≤ t < t6
-a_max + J_max * t, t6 ≤ t < t7
其中 J_max 是最大加加速度,a_max 是最大加速度。
个人经验:我一般建议 J_max 取 a_max 的 2-3 倍。太小了响应慢,太大了又失去了平滑的意义。
3.3 对比分析:一张表说清楚
| 对比项 | 梯形曲线 | S曲线 |
|---|---|---|
| 加速度连续性 | 不连续(有跳变) | 连续 |
| 加加速度 | 无穷大(跳变点) | 有限值(可约束) |
| 计算复杂度 | 低 | 中高 |
| 执行器冲击 | 大 | 小 |
| 乘坐舒适性 | 差 | 好 |
| 响应速度 | 快 | 稍慢 |
为什么会这样?说白了,梯形曲线只约束了加速度的幅值,没约束它的变化率。而S曲线同时约束了加速度和加加速度,自然更平滑。
3.4 核心逻辑:一张图看懂
下面这张图展示了两种曲线的核心差异。我特意用SVG画了,方便你理解。
从图上可以清楚看到:梯形曲线在拐点处「咔」一下就变了,而S曲线是「慢慢」过渡的。这个差异在实际驾驶中感受非常明显。
3.5 避坑指南
我曾经踩过的坑:
- 别以为S曲线一定比梯形好。在紧急制动场景下,S曲线的响应延迟可能让你追尾。我有个项目就是用了S曲线做AEB,结果制动距离多了半米,差点出事。
- 加加速度J_max的取值要结合执行器特性。电机和液压制动系统的响应速度完全不同,不能一刀切。
- 梯形曲线也不是一无是处。在低速泊车场景下,梯形曲线简单可靠,反而更实用。
3.6 实际应用建议
我个人习惯这样选型:
- 舒适性优先(如载客、高端车型):用S曲线,J_max取2-3倍a_max
- 响应优先(如紧急制动、性能车):用梯形曲线,但要加低通滤波
- 折中方案:用S曲线但缩短过渡时间,比如把J_max设大一些
一个小技巧:如果你觉得S曲线计算太复杂,可以用梯形曲线加一阶低通滤波来近似。效果接近,但计算量小很多。我在嵌入式平台上经常这么干。
好了,关于S曲线和梯形曲线的对比就聊到这里。记住一点:没有绝对的好坏,只有合不合适的场景。你想想看,是不是这个道理?
公众号:蓝海资料掘金营,微信deep3321