3、速度约束的数学建模:速度边界、加速度边界、加加速度边界的数学表达,约束不等式

好,咱们进入正题。上一节我们聊了为什么要做速度约束,这一节我们来点硬核的——怎么用数学把速度约束写出来。

我个人习惯,做任何运动规划之前,先把约束条件列清楚。你想想看,如果连边界都不知道在哪,规划出来的轨迹肯定是不敢用的。我在项目里见过太多人,上来就写优化函数,结果跑出来的轨迹加速度超限,电机直接报警。嗯,这就是典型的「忘了加约束」。

3.1 速度边界:最直观的约束

速度边界,说白了就是「跑多快」。每个轴都有它的物理极限,比如电机最大转速、丝杠最大线速度。数学上写起来很简单:

v_min ≤ v(t) ≤ v_max

这里 v(t) 是时刻 t 的速度。v_min 和 v_max 是上下限。

但要注意一点:v_min 不一定是负的。如果系统不允许反向运动,v_min 就是 0。我在做 AGV 小车的时候,就遇到过这种情况——小车只能前进不能后退,那速度下限就得设成 0,而不是负值。

小技巧: 实际项目中,v_max 通常留 10%~20% 的余量。比如电机标称 1000 rpm,我一般设 800 rpm。为什么?因为电机老化、负载变化都会影响实际能力。我曾经吃过这个亏,标称值跑满,结果半年后电机就出问题了。

3.2 加速度边界:舒适性与安全性的关键

加速度约束,控制的是「变化快慢」。加速度太大,人会感到不适,机械结构也会承受冲击。数学表达:

a_min ≤ a(t) ≤ a_max

其中 a(t) = dv/dt,是速度对时间的导数。

这里有个坑:加速度边界通常不对称。加速能力和减速能力往往不一样。比如电梯,加速时 1 m/s²,减速时 1.5 m/s²。为什么?因为减速有紧急制动的需求。我在做机器人手臂时,加速设 2 m/s²,减速设 3 m/s²,这样既保证效率,又保证安全。

注意: 加速度约束不能只看数值大小,还要看方向。三维空间里,每个轴都有自己的加速度极限。千万别用一个标量约束代替三个轴的约束,否则轨迹会「偷跑」。

3.3 加加速度边界:平滑度的终极保障

加加速度(Jerk),是加速度的变化率。它决定了轨迹的「柔顺度」。数学表达:

j_min ≤ j(t) ≤ j_max

其中 j(t) = da/dt = d²v/dt²。

为什么要约束加加速度?你想想看,如果加速度突然变化,电机就会产生冲击,机械结构会振动。我在做高精度定位平台时,加加速度限制在 500 m/s³ 以内,这样平台启停时几乎没有抖动。

加加速度约束还有一个隐藏作用:限制轨迹的「急转弯」。速度方向变化太快,加加速度就会很大。所以约束加加速度,本质上也是在约束轨迹的曲率变化率。

3.4 约束不等式:统一表达

把上面三个约束写在一起,就是完整的约束不等式组:

v_min ≤ v(t) ≤ v_max
a_min ≤ a(t) ≤ a_max
j_min ≤ j(t) ≤ j_max

但实际应用中,这些约束不是独立的。比如,速度很大时,加速度就不能太大,否则会超出电机力矩极限。所以更严谨的写法是:

|v(t)| ≤ V_max
|a(t)| ≤ A_max(v(t))
|j(t)| ≤ J_max(a(t))

这里 A_max(v) 和 J_max(a) 是随状态变化的边界函数。我在做无人机轨迹规划时,就遇到过这种情况——高速飞行时,加速度极限会下降,因为气动阻力变大了。

核心要点: 约束不等式的本质,是把物理系统的能力边界用数学语言表达出来。写约束时,一定要问自己三个问题:
1. 这个约束是硬约束还是软约束?(硬约束必须满足,软约束可以适当放宽)
2. 约束之间有没有耦合关系?(比如速度和加速度的耦合)
3. 约束的边界值是否随时间变化?(比如电池电量下降,加速度极限会降低)

3.5 知识体系总览

下面这张图,把速度约束的数学建模逻辑串起来了。我建议你多看几遍,理解每个约束的层级关系。

速度约束数学建模知识体系 物理系统能力边界 速度边界 v(t) 加速度边界 a(t) 加加速度边界 j(t) v_min ≤ v(t) ≤ v_max 一阶导数约束 a_min ≤ a(t) ≤ a_max 二阶导数约束 j_min ≤ j(t) ≤ j_max 三阶导数约束 关键:约束之间耦合 → 实际边界是状态相关的函数 |v(t)| ≤ V_max, |a(t)| ≤ A_max(v(t)), |j(t)| ≤ J_max(a(t))

3.6 实际项目中的避坑指南

讲完理论,我分享几个实际经验:

  • 约束不要设得太紧:我曾经把加速度边界设成电机标称值的 95%,结果调试时频繁触发限位保护。后来改成 80%,问题就解决了。留余量不是怂,是工程智慧。
  • 注意约束的时序:速度、加速度、加加速度是逐层导数的关系。约束加加速度时,一定要先保证加速度约束满足,否则加加速度约束没有意义。
  • 离散化带来的误差:连续时间的约束,在离散化后可能会被「漏掉」。比如采样周期 10ms,加速度变化可能发生在采样点之间。我一般会在约束不等式里加一个安全系数,比如 0.9 倍。
  • 多轴系统的耦合约束:如果多个轴共用同一个驱动器,那么总功率有限,各轴的加速度不能同时达到最大值。这时候需要加一个「合力约束」:sqrt(a_x² + a_y²) ≤ A_total_max。
我的习惯: 写约束不等式时,我会先列一个表格,把每个约束的物理意义、数学形式、单位、典型数值都写清楚。这样后面写优化代码时,不容易出错。
约束类型 物理意义 数学形式 典型单位 典型数值(工业机器人)
速度边界 最大运动速度 v_min ≤ v ≤ v_max m/s ±2 m/s
加速度边界 最大加速/减速能力 a_min ≤ a ≤ a_max m/s² ±5 m/s²
加加速度边界 最大冲击程度 j_min ≤ j ≤ j_max m/s³ ±50 m/s³

好了,这一节的内容就到这里。速度约束的数学建模,说白了就是三句话:速度不能超限,加速度不能超限,加加速度不能超限。但实际写代码时,要把这三句话变成可计算的约束不等式,并且处理好它们之间的耦合关系。

下一节我们会聊怎么把这些约束放到轨迹优化里,到时候我会展示具体的代码实现。嗯,先消化一下今天的内容吧。

可可精品资料库