二、运动学与动力学约束:车辆运动学模型(自行车模型)、动力学约束(加速度、加加速度)、轮胎摩擦圆与附着极限

好,咱们接着聊。上一章我们把速度规划的“骨架”——场景与目标——搭起来了。这一章,咱们得往骨架上添“肌肉”和“韧带”了。说白了,就是搞清楚车到底能怎么动、不能怎么动。

你想想看,规划出一条漂亮的S形曲线,结果车一拐弯就侧滑出去了,那这规划就是废纸一张。所以,运动学和动力学约束,就是给速度规划套上的“紧箍咒”。

2.1 车辆运动学模型:为什么是“自行车”?

先聊运动学。运动学只关心几何关系,不关心力。我们最常用的就是自行车模型。为什么叫自行车?因为把四轮车的两个前轮、两个后轮,分别合并成一个虚拟的轮子。嗯,就像你骑的自行车那样。

我个人习惯,在做路径跟踪和速度规划的前期阶段,几乎只用这个模型。它简单,够用。你想想,在高速公路上,车不会像玩漂移那样大角度横摆,自行车模型的精度完全够了。

核心公式其实就三个,我写给你看:

// 自行车模型状态方程 (简化版)
// 状态量: [x, y, yaw, v]
// 控制量: [a, delta]  (加速度, 前轮转角)

x_dot = v * cos(yaw)
y_dot = v * sin(yaw)
yaw_dot = v * tan(delta) / L   // L 是轴距
v_dot = a

这里有个关键点:yaw_dot 也就是横摆角速度,它跟车速 v 和前轮转角 delta 直接相关。车速越快,同样的转角,车转得就越快。这符合直觉吧?

我的经验: 我在做泊车规划时,发现自行车模型在低速(< 5 km/h)时,轮胎侧偏角几乎为零,模型非常准。但一旦上了高速,轮胎会有点“软”,实际转弯半径会比模型算出来的大一点点。这时候,我会在模型里加一个修正系数,大概 0.95 左右。

所以,运动学约束说白了就是:你的规划轨迹,必须满足这个几何关系。你不能规划出一个让前轮转角超过物理极限(比如 ±35度)的路径,也不能规划出横摆角速度过大的轨迹——那会让乘客晕车。

2.2 动力学约束:加速度与加加速度

运动学管的是“能不能走到”,动力学管的是“能不能受得了”。

这里有两个核心约束:加速度 (Acceleration)加加速度 (Jerk)

  • 加速度 (a):说白了就是推背感。纵向加速度决定了你起步多快、刹车多猛。横向加速度决定了过弯时人被甩向一侧的力度。
  • 加加速度 (Jerk):加速度的变化率。这个很多人会忽略,但它恰恰是舒适性的关键。

为什么会这样?你想想,如果加速度从 0 瞬间跳到 3 m/s²,那感觉就像被人猛踹了一脚。但如果用 0.5 秒慢慢加上去,就很平顺。Jerk 就是描述这个“变化快慢”的。

我一般这样设置约束:

约束类型 舒适范围 极限范围 说明
纵向加速度 ±2.0 m/s² ±4.0 m/s² 超过 2.5 乘客就开始不舒服了
横向加速度 ±1.5 m/s² ±3.0 m/s² 过弯时尤其要注意
纵向加加速度 ±1.0 m/s³ ±2.0 m/s³ 这是“不晕车”的关键
横向加加速度 ±0.8 m/s³ ±1.5 m/s³ 方向盘的“柔顺度”
避坑指南: 我曾经在一个项目中,只约束了加速度,没管加加速度。结果试车员反馈说:“这车开起来像在坐船,晃得厉害。” 后来我把加加速度约束加上,问题立刻解决了。记住:加速度决定“晕不晕”,加加速度决定“吐不吐”

2.3 轮胎摩擦圆与附着极限

这是最硬核的部分。前面说的加速度、加加速度,最终都要落到轮胎上。轮胎能提供的力,是有上限的。这个上限,就是 附着极限

摩擦圆的概念很简单:轮胎能提供的总抓地力,是一个圆。这个圆的大小,由路面附着系数 μ 和轮胎垂直载荷 Fz 决定。

// 摩擦圆约束
// Fx: 纵向力 (加速/制动)
// Fy: 横向力 (转向)
// μ: 路面附着系数 (干沥青约 0.8-0.9, 湿路面约 0.4-0.6)
// Fz: 垂直载荷

sqrt(Fx² + Fy²) ≤ μ * Fz

这个公式什么意思?说白了就是:你不能既要猛加速,又要猛打方向。如果你把抓地力全用在加速上了,那转向力就不够了,车就会推头(转向不足)。反过来,如果你全力转向,再踩油门,车就可能甩尾。

我举个例子。你在高速上行驶,突然前方有障碍物。你本能地会同时刹车和打方向。但摩擦圆告诉你:不行!如果你把刹车踩死(Fx 很大),那留给转向的 Fy 就很少了,车根本转不过去。正确的做法是:先重刹减速,然后松开刹车再转向。这就是“先刹后转”的物理原理。

核心要点: 在速度规划中,我们必须保证规划出的 纵向加速度横向加速度 的合力,不超出摩擦圆。否则,规划就是“纸上谈兵”,实际车辆根本执行不了。

那么,怎么把这个约束用到规划里呢?我一般这样做:

  1. 查表法:根据当前车速和路面条件,查表得到最大横向加速度。比如,干路面、车速 80 km/h,最大横向加速度约 0.7g。
  2. 动态计算:在规划每个时间步时,根据当前规划的横向加速度,反推允许的最大纵向加速度。公式就是上面那个摩擦圆。
  3. 安全余量:我习惯留 10%-20% 的余量。比如摩擦圆半径是 0.8g,我实际只用 0.65g。为什么?因为路面条件会变,轮胎磨损也会影响抓地力。

嗯,这里还要提一句 附着极限。不同路面的 μ 值差异巨大。干沥青 0.9,湿沥青 0.6,积雪 0.2,结冰 0.1。你想想,在冰面上,摩擦圆缩到只有原来的九分之一!所以,速度规划必须能感知路面条件,动态调整约束。

我记得有一次在测试场,我们故意把车开到洒了水的瓷砖路面上。按照干路面的参数规划,车一进去就触发 ESP,根本跑不了。后来我们加了一个路面附着系数估计模块,才搞定这个问题。

好了,总结一下这一章:

  • 运动学约束:自行车模型,保证轨迹几何可行。
  • 动力学约束:加速度和加加速度,保证舒适性和执行器能力。
  • 摩擦圆约束:轮胎抓地力极限,保证车辆不失控。

下一章,我们会把这些约束,跟具体的跟车策略结合起来。到时候你会发现,这些约束就像“交通规则”,你的速度规划算法,必须在这个规则内“开车”。