3. 速度约束分类:硬约束与软约束、时域约束与频域约束

各位工程师,咱们今天聊聊速度约束的分类。说实话,这个知识点看着简单,但我在实际项目中见过太多人栽跟头。你想想看,约束选错了,轻则性能浪费,重则系统失稳。我个人习惯把约束分成两大类来理解:硬约束 vs 软约束,以及时域约束 vs 频域约束。这两组分类角度不同,但实际工程中经常要交叉使用。

3.1 硬约束与软约束

先说说硬约束和软约束。这俩的区别,说白了就是「能不能商量」。

硬约束,就是必须满足的条件。比如车辆的最大制动减速度,物理极限摆在那里,你算法再牛也不能突破。我在做AEB(自动紧急制动)系统时,就遇到过这个问题——标定工程师想把制动减速度标到1.2g,但轮胎和路面附着系数只有0.8g。这就是典型的硬约束,突破了就会打滑失控。

硬约束的典型特征:
  • 违反即失效(系统崩溃或危险)
  • 通常来自物理极限或安全法规
  • 优化时优先级最高,不可妥协

软约束则不同。它更像一个「建议值」,违反了不会出大事,但性能会变差。比如乘客舒适性约束——急加速会让乘客不舒服,但车不会坏。我曾经在路径规划项目里,把加速度变化率(jerk)设成软约束,结果发现某些场景下为了避障,jerk值会短暂超标。嗯,这时候软约束就起作用了——它允许你「借」一点舒适性来换安全性。

我的经验: 软约束一般会配一个惩罚函数。违反越多,惩罚越大。但别把惩罚系数设得太高,否则软约束就变成硬约束了,失去了灵活性。

实际工程中,我建议这样区分:

约束类型 违反后果 典型例子 处理方式
硬约束 系统失效/危险 最大速度、最小安全距离 不等式约束,严格满足
软约束 性能下降 舒适性、能耗 惩罚函数 + 松弛变量

3.2 时域约束与频域约束

再来看另一组分类——时域和频域。这个角度更偏向「怎么看问题」。

时域约束,就是你在时间轴上直接看到的限制。比如「车速不能超过120 km/h」、「加速度不能超过3 m/s²」。这些约束直观、好理解,也是大多数工程师最先接触的。我记得刚入行时,做PID调参,整天盯着时域响应曲线看超调量、调节时间——这些都是时域约束。

但时域约束有个坑:它只看「当下」,不看「趋势」。举个例子,车速在时域上可能一直没超限,但如果你看频谱,会发现某个频率成分一直在振荡。这就是频域约束要管的事。

频域约束,关注的是系统在不同频率下的表现。比如控制系统的带宽限制、谐振频率避开、高频噪声抑制等。我在做线控底盘时,就遇到过转向系统的谐振问题——时域上看一切正常,但一上高速,方向盘就开始抖。后来分析频谱才发现,控制器的输出频率刚好激发了转向系统的机械谐振。

避坑指南: 我曾经在MPC(模型预测控制)里只加了时域约束,结果实车测试时发现车辆在特定速度下出现「点头」现象。后来加上频域约束,把控制输出的高频分量限制住,问题才解决。所以,时域和频域约束要一起用。

下面这张图,是我自己总结的约束分类框架,帮你理清思路:

速度约束分类框架 速度约束 按强制性:硬约束 vs 软约束 按视角:时域约束 vs 频域约束 硬约束 物理极限/安全法规 软约束 舒适性/能耗/效率 时域约束 速度/加速度/ jerk 频域约束 带宽/谐振/噪声 工程建议:硬约束保安全,软约束提性能;时域看幅值,频域看趋势

3.3 实际工程中的交叉使用

你可能会问:这四种约束在实际项目中怎么搭配?我举个例子你就明白了。

假设我们在做自适应巡航(ACC)系统:

  • 硬约束 + 时域:前车距离不能小于安全阈值,这是硬约束,违反就撞车。时域上实时监控。
  • 软约束 + 时域:加速度变化率(jerk)尽量小,让乘客舒服。但紧急情况下可以突破。
  • 硬约束 + 频域:执行器(比如电机)的响应带宽有限,控制指令不能超出这个频率范围,否则执行器跟不上。
  • 软约束 + 频域:希望控制输出的高频分量尽量少,减少车辆「抖动」感。这个可以适当放宽。
核心观点: 一个成熟的约束管理系统,一定是这四种约束的组合。我个人习惯先列硬约束(保底),再加软约束(优化),然后看时域是否满足,最后用频域分析扫尾。

最后说个小技巧。在做约束设计时,我建议你画一张类似上面的框架图,贴在工位上。每次加新约束时,先问自己三个问题:

  1. 这个约束是硬还是软?
  2. 它是在时域还是频域上起作用?
  3. 如果硬约束和软约束冲突了,我优先保哪个?

想清楚这三点,你的约束系统就不会出大问题。

可可精品资料库