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曲线 vs 梯形曲线:加速度对比 时间 t 加速度 a 梯形曲线 S曲线 跳变点 跳变点 S曲线(连续) 梯形曲线(有跳变)

从图上可以清楚看到:梯形曲线在拐点处「咔」一下就变了,而S曲线是「慢慢」过渡的。这个差异在实际驾驶中感受非常明显。

3.5 避坑指南

我曾经踩过的坑:

  • 别以为S曲线一定比梯形好。在紧急制动场景下,S曲线的响应延迟可能让你追尾。我有个项目就是用了S曲线做AEB,结果制动距离多了半米,差点出事。
  • 加加速度J_max的取值要结合执行器特性。电机和液压制动系统的响应速度完全不同,不能一刀切。
  • 梯形曲线也不是一无是处。在低速泊车场景下,梯形曲线简单可靠,反而更实用。

3.6 实际应用建议

我个人习惯这样选型:

  • 舒适性优先(如载客、高端车型):用S曲线,J_max取2-3倍a_max
  • 响应优先(如紧急制动、性能车):用梯形曲线,但要加低通滤波
  • 折中方案:用S曲线但缩短过渡时间,比如把J_max设大一些

一个小技巧:如果你觉得S曲线计算太复杂,可以用梯形曲线加一阶低通滤波来近似。效果接近,但计算量小很多。我在嵌入式平台上经常这么干。

好了,关于S曲线和梯形曲线的对比就聊到这里。记住一点:没有绝对的好坏,只有合不合适的场景。你想想看,是不是这个道理?


公众号:蓝海资料掘金营,微信deep3321