车辆运动学模型:自行车模型、阿克曼转向几何、运动学方程推导
好,咱们进入正题。路径规划里有个绕不开的问题——车到底怎么动?
你想想看,如果我把车当成一个点来处理,规划出来的路径再漂亮,车也走不了。为什么?因为车有长度、有宽度,更重要的是——它不能原地掉头。这就是曲率约束的物理根源。
我个人习惯,讲运动学模型之前,先让大家理解一个核心思想:我们不是在造一辆真车,而是在造一个数学上的替身。这个替身要足够简单,能算得快;又要足够准确,别让真车撞墙。
自行车模型:把四轮简化成两轮
先看最经典的简化方式——自行车模型。
四轮车转向时,左右轮的转角其实不一样。你想想看,内侧轮转弯半径小,外侧轮大。如果我把四个轮子都算进去,那数学推导会变得非常复杂。在实际工程中,我们通常用自行车模型来近似。
什么叫自行车模型?说白了,就是把车辆的前后轴各用一个轮子代替。前轮负责转向,后轮负责驱动(或者制动)。这个模型假设:
- 车辆在平面上运动,不考虑垂向跳动
- 左右车轮的转角合并成一个等效的前轮转角
- 轮胎与地面之间没有侧滑
核心假设:自行车模型成立的前提是——车辆低速行驶(通常 < 5 m/s),且转向角不大。我在项目中遇到过,有人把这个模型用在高速场景下,结果规划出来的路径曲率突变,车辆根本跟不住。
嗯,这里要注意:自行车模型不是万能的。它适用于低速泊车、园区物流、扫地机器人这类场景。如果你在做高速自动驾驶,那得用更复杂的动力学模型。
阿克曼转向几何:让轮子各走各的路
讲完自行车模型,咱们聊聊阿克曼转向几何。这个名字你可能听过,但它的物理含义是什么?
阿克曼转向的核心思想是:转向时,所有车轮的轴线都交于一点。这个点就是瞬时转动中心(Instantaneous Center of Rotation, ICR)。
为什么要这样设计?因为如果左右前轮的转角一样,那它们在转弯时就会产生侧滑,轮胎磨损严重,车辆也不稳定。阿克曼几何通过让内侧轮转角比外侧轮大,保证每个轮子都沿着自己的圆弧走。
我记得有一次调试AGV(自动导引车),发现车辆在转弯时总是偏离轨迹。查了半天,原来是阿克曼机构没调好,左右轮的转角比例不对。后来重新标定了一下,问题就解决了。
阿克曼转向的数学关系是这样的:
cot(δ_left) - cot(δ_right) = L / W
其中:
- δ_left 是左前轮转角
- δ_right 是右前轮转角
- L 是轴距(前后轴距离)
- W 是轮距(左右轮距离)
这个公式告诉你,轮距越宽,左右轮的转角差就越大。你想想看,大卡车转弯时,内侧轮几乎要原地打转,就是这个道理。
工程小技巧:在实际项目中,我们通常不会直接用阿克曼几何去控制每个轮子,而是先算出等效的前轮转角 δ,再通过阿克曼关系反算出左右轮的转角。这样,自行车模型和阿克曼几何就结合起来了。
运动学方程推导:从几何到数学
好,现在我们把自行车模型和阿克曼几何结合起来,推导运动学方程。
先定义几个变量:
| 符号 | 含义 | 单位 |
|---|---|---|
| (x, y) | 后轴中心点坐标 | m |
| θ | 车辆航向角(车头朝向) | rad |
| v | 后轴中心速度 | m/s |
| δ | 前轮等效转角 | rad |
| L | 轴距 | m |
现在,我们来看车辆的运动。后轴中心点 (x, y) 的速度方向,就是车辆的航向角 θ。所以:
dx/dt = v * cos(θ)
dy/dt = v * sin(θ)
这个好理解吧?车往前走,x和y方向的分量就是速度乘以角度的余弦和正弦。
接下来是航向角的变化率。前轮转角 δ 决定了车辆转弯的曲率。曲率 κ 和转角 δ 的关系是:
κ = tan(δ) / L
而航向角的变化率(也就是角速度)等于速度乘以曲率:
dθ/dt = v * κ = v * tan(δ) / L
把这三个方程写在一起,就是完整的自行车模型运动学方程:
dx/dt = v * cos(θ)
dy/dt = v * sin(θ)
dθ/dt = v * tan(δ) / L
注意:这个方程里,控制输入是 v 和 δ。v 控制速度大小,δ 控制转向。路径规划的任务,就是规划出 v(t) 和 δ(t) 随时间的变化曲线。
我曾经犯过一个错误——在方程里把 tan(δ) 直接写成了 δ。小角度近似下没问题,但一旦转角超过 20°,误差就非常大了。规划出来的路径,车辆根本走不了。所以,除非你确定转角很小,否则别偷懒。
曲率与转向角的关系
从上面的方程可以看出,曲率 κ 和转向角 δ 的关系是:
κ = tan(δ) / L
这个关系非常重要。它告诉我们:
- 轴距 L 越大,同样的转角产生的曲率越小(车越难转弯)
- 转向角 δ 越大,曲率越大(转弯越急)
- 曲率 κ 的倒数就是转弯半径 R = L / tan(δ)
你想想看,大货车为什么转弯半径那么大?就是因为轴距 L 太大了。同样的转角,小车能拐过去,大车就得倒一把。
避坑指南:我曾经在项目中遇到过一个问题——规划出来的路径曲率连续,但车辆就是跟不住。后来发现,是因为我用的运动学模型没有考虑转向角速度的限制。车辆的转向电机是有响应速度的,你不能要求它瞬间把方向盘打到底。所以,在规划时一定要加上转向角速度约束:|dδ/dt| ≤ ω_max。
离散化:从连续到离散
实际工程中,我们不可能用连续方程去控制车辆。控制器是离散的,通常 10-100 Hz 的频率。所以,需要把运动学方程离散化。
最常用的方法是欧拉法:
x(k+1) = x(k) + v(k) * cos(θ(k)) * dt
y(k+1) = y(k) + v(k) * sin(θ(k)) * dt
θ(k+1) = θ(k) + v(k) * tan(δ(k)) / L * dt
其中 dt 是控制周期。这个离散模型,就是路径规划算法里最常用的车辆模型。
我个人习惯,在仿真阶段先用欧拉法,简单够用。但如果控制周期比较大(比如 dt > 0.1s),欧拉法的误差会累积,这时候可以考虑用龙格-库塔法(RK4)来提高精度。
小结一下
这一章我们讲了三个核心内容:
- 自行车模型:把四轮车简化为两轮,忽略左右轮差异
- 阿克曼转向几何:保证所有车轮绕同一个圆心转动
- 运动学方程:从几何关系推导出车辆的微分方程
这些内容看起来简单,但它们是路径规划中曲率约束的物理基础。后面讲曲线插值、优化求解时,都会用到这里的模型。
嗯,最后说一句——模型是死的,但工程是活的。别死记公式,多想想你的车到底是怎么动的。
个人经验:我建议你在做路径规划之前,先用这个运动学模型做一下仿真。把规划出来的路径输入模型,看看车辆能不能跟得上。这一步花不了多少时间,但能帮你避免很多坑。