3. 曲率约束的数学建模:最大曲率约束、曲率变化率约束、基于车辆最小转弯半径的约束推导

各位同学,咱们今天聊点硬核的——曲率约束的数学建模。

说实话,我在做自动驾驶路径规划的头两年,踩过最大的坑就是「规划出来的路径看着挺顺眼,但车就是跟不上去」。后来我才明白,问题出在曲率约束上。你想想看,一辆车能转多急的弯,能多快地从直道进入弯道,这些物理限制如果不写到数学模型里,那规划出来的轨迹就是一张废纸。

好,咱们一步步来拆解。

3.1 最大曲率约束:车能转多急的弯?

先问一个最基础的问题:一辆车在某个速度下,能通过的最小转弯半径是多少?

这个问题的答案,直接决定了路径上任意一点的曲率上限。

咱们从车辆运动学模型出发。对于前轮转向的车辆,有一个经典的公式:

κ_max = tan(δ_max) / L

其中:

  • κ_max:最大曲率(单位:1/m)
  • δ_max:前轮最大转向角(单位:rad)
  • L:轴距(单位:m)

举个例子。我参与过一个乘用车项目,轴距 L=2.8m,前轮最大转向角 δ_max=35°(约0.61 rad)。那么:

κ_max = tan(0.61) / 2.8 ≈ 0.70 / 2.8 ≈ 0.25 (1/m)

对应的最小转弯半径就是:

R_min = 1 / κ_max ≈ 4.0 m

嗯,这里要注意——这个4米是理论值。实际项目中,我一般会留20%~30%的安全余量。为什么?因为轮胎侧偏、悬架变形、路面附着系数变化,都会让实际转弯半径变大。我曾经吃过这个亏,规划出来的路径曲率刚好卡在理论极限上,结果实车测试时,车辆在高速过弯时直接推头了……

核心结论:最大曲率约束本质上就是车辆物理极限的数学表达。公式很简单,但工程应用时要留余量。

3.2 曲率变化率约束:别让方向盘「跳崖」

最大曲率约束管的是「能不能转过去」,但还有一个更隐蔽的问题——「能不能平顺地转过去」。

你想想看,如果路径上某一点曲率从0突然跳到0.2,方向盘需要在一瞬间从回正状态打到某个角度。这在物理上是不可能的。因为方向盘有转速限制,转向执行器有响应延迟。

曲率变化率约束,数学上表达为:

|dκ/ds| ≤ (dκ/ds)_max

或者用时间域表达:

|dκ/dt| ≤ (dκ/dt)_max

其中 s 是弧长,t 是时间。两者通过车速 v 关联:

dκ/dt = v · dκ/ds

我在项目中遇到过这样一个场景:某次泊车路径规划,算法只考虑了最大曲率约束,没管曲率变化率。结果路径上有一段曲率从0.1突变到0.15,虽然都在最大曲率范围内,但方向盘需要以超过执行器极限的速度转动。实车测试时,方向盘「咔咔」响了两声,然后报错了……

工程经验:曲率变化率约束的取值,通常来自转向系统的阶跃响应测试。一般乘用车的 (dκ/dt)_max 在 0.1~0.3 (1/m/s) 之间。低速泊车时可以取小一点,高速巡航时可以取大一点。

3.3 基于最小转弯半径的约束推导

好,咱们把上面两个约束统一到一个框架里。

最小转弯半径 R_min 是车辆的一个固有参数。它和最大曲率的关系是:

κ_max = 1 / R_min

但这里有个坑——R_min 并不是一个固定值。它和车速有关。为什么?因为高速时轮胎侧偏角变大,实际转弯半径会比低速时大。

我习惯用一个经验公式来拟合这个关系:

R_eff(v) = R_min · (1 + α · v²)

其中 α 是一个与轮胎特性、悬架刚度有关的系数,一般通过实车标定得到。我做过的一个项目中,α 大约在 0.002~0.005 (s²/m²) 之间。

那么,考虑车速后的最大曲率约束就是:

κ_max(v) = 1 / [R_min · (1 + α · v²)]

同时,曲率变化率约束也要考虑车速:

|dκ/dt| ≤ (dκ/dt)_max

结合 dκ/ds = (dκ/dt) / v,得到:

|dκ/ds| ≤ (dκ/dt)_max / v

你看,车速越低,允许的曲率变化率(按弧长计)就越大。这很符合直觉——低速时方向盘可以打得快一些。

注意:当车速 v → 0 时,|dκ/ds| 的上限会趋于无穷大。这在数学上没问题,但工程上要设置一个上限值,防止数值溢出。我一般会设一个硬上限,比如 5 (1/m²)。

3.4 知识体系总览

说了这么多,咱们用一张图来梳理一下整个知识结构:

曲率约束知识体系 最大曲率约束 κ ≤ κ_max κ_max = tan(δ_max)/L R_min = 1/κ_max → 车辆物理极限 曲率变化率约束 |dκ/ds| ≤ (dκ/ds)_max |dκ/dt| ≤ (dκ/dt)_max dκ/dt = v · dκ/ds → 转向执行器限制 最小转弯半径 R_eff(v) = R_min·(1+αv²) κ_max(v) = 1/R_eff(v) α: 轮胎/悬架特性 → 车速相关修正 综合约束条件 |κ| ≤ κ_max(v) 且 |dκ/ds| ≤ (dκ/dt)_max / v 工程应用:路径平滑 → 轨迹生成 → 实车跟踪 留余量 → 实车标定 → 迭代优化

3.5 工程实践中的几个坑

最后,我把自己踩过的坑总结一下,你们以后遇到了能少走弯路:

  1. 别把理论值当实际值用。 最小转弯半径的理论值是基于刚性轮胎假设的,实际中轮胎会侧偏,悬架会变形。我一般会在理论值基础上加20%的余量。
  2. 曲率变化率约束不能只看弧长域。 同样的路径,低速和高速时对转向系统的要求完全不同。一定要同时考虑时间域和弧长域。
  3. 标定参数α很重要。 不同轮胎、不同载荷、不同路面,α的值都不一样。我建议每个车型至少做三组标定:空载、半载、满载。
  4. 数值稳定性。 当车速接近0时,曲率变化率约束会变得非常宽松。但数值计算时要注意除零问题。我习惯在分母上加一个小量ε,比如1e-6。

一个小技巧:在实际代码中,我会把曲率约束封装成一个函数,输入是路径点序列和车速剖面,输出是每个点上的最大允许曲率和曲率变化率。这样路径规划模块只需要调用这个函数,不用关心底层的物理模型细节。

好,曲率约束的数学建模就讲到这里。这些公式看着简单,但真正用好它们,需要在项目中反复调试和标定。你们先消化一下,有问题随时问我。

可可精品资料库