4. 曲率约束建模:路径曲率定义、曲率与转向角的关系、最大曲率限制的数学表达

好,咱们进入正题。曲率约束,说白了就是回答一个问题:我的车到底能拐多急的弯?

这个问题不搞清楚,你规划出来的路径再平滑也没用。机器人或者自动驾驶车辆到了弯道跟前,一把方向打不过来,那就尴尬了。我早期做AGV(自动导引车)项目时就吃过这个亏,路径规划得漂漂亮亮,结果实车一跑,到弯道直接原地打转——嗯,就是因为没考虑曲率上限。

4.1 路径曲率的定义

先说说曲率到底是什么。数学上,曲率描述的是曲线在某一点的弯曲程度。

想象你开车。路越弯,方向盘打得越多,曲率就越大。直道上曲率为0,圆环上曲率是常数。

严格定义是这样的:

曲率 κ 是切线方向角对弧长的导数。

公式:κ = dθ / ds

其中 θ 是切线与x轴的夹角,s 是弧长。

对于参数化曲线 (x(t), y(t)),曲率计算公式为:

κ = (x'y'' - y'x'') / (x'² + y'²)^(3/2)

这里 x'、y' 是一阶导数,x''、y'' 是二阶导数。说白了,曲率跟路径的一阶导(速度方向)和二阶导(加速度方向)都有关系。

我个人习惯把曲率理解成「单位弧长上方向变化的快慢」。你想想看,如果方向变化很快,说明弯很急,曲率就大。

4.2 曲率与转向角的关系

好,数学定义有了。但实际车辆怎么跟曲率挂钩?

这里要用到自行车模型。这是路径规划里最常用的简化模型,虽然简单,但够用。

自行车模型的核心假设:

  • 车辆前后轮各一个(合并左右轮)
  • 车辆在平面上运动,忽略侧倾
  • 轮胎无侧滑

在这个模型下,前轮转向角 δ 与曲率 κ 的关系是:

κ = tan(δ) / L

其中 L 是轴距(前后轮中心距离),δ 是前轮转向角。

这个公式怎么来的?我简单推导一下:

  1. 车辆转弯时,后轮中心画出一个圆弧
  2. 圆弧半径 R 满足:R = L / tan(δ)
  3. 曲率 κ = 1/R = tan(δ) / L

所以你看,转向角越大,曲率越大,转弯半径越小。这个关系是非线性的——tan函数在角度大时增长很快。

我的经验:实际项目中,转向角一般不会超过40度。超过这个值,tan函数增长太快,曲率变化剧烈,控制起来容易抖。我曾经在测试时把转向角设到45度,结果路径跟踪误差直接爆表。

4.3 最大曲率限制的数学表达

现在进入核心——如何把曲率约束写成数学表达式,让优化器能理解。

车辆有物理极限:

  • 最大转向角 δ_max(机械限位)
  • 最大转向角速度 δ̇_max(转向电机能力)

对应的曲率约束就是:

|κ| ≤ κ_max = tan(δ_max) / L

但光有这个还不够。路径规划中,我们通常把路径离散成一系列点。每个点上的曲率都要满足这个约束。

对于离散路径点 p_i = (x_i, y_i),曲率可以用三点法近似计算:

κ_i ≈ 2 * |(p_{i+1} - p_i) × (p_i - p_{i-1})| / 
        (|p_{i+1} - p_i| * |p_i - p_{i-1}| * |p_{i+1} - p_{i-1}|)

这个公式看着复杂,其实本质就是三个点确定的圆的曲率。叉积的模长代表三角形面积,分母是边长乘积。

那么,在优化问题中,曲率约束可以写成:

对于所有 i = 1, 2, ..., N-1:
  |κ_i| ≤ κ_max

或者写成更紧凑的形式:

|x_i' y_i'' - y_i' x_i''| ≤ κ_max * (x_i'² + y_i'²)^(3/2)

注意:这个约束是非凸的!因为右边是三次方项。直接扔给优化器,求解会很慢,甚至不收敛。我建议的做法是:

  • 要么用序列二次规划(SQP)逐步逼近
  • 要么把约束线性化,牺牲一点精度换求解速度

我曾经在高速场景下吃过非凸约束的亏,求解器跑了10秒还没收敛,车都快撞上了。后来改成线性化约束,0.1秒搞定。

4.4 知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图:

曲率约束建模知识体系 路径曲率定义 曲率与转向角关系 最大曲率限制 κ = dθ / ds 参数化曲线公式 自行车模型 κ = tan(δ) / L |κ| ≤ tan(δ_max)/L 离散三点法近似 核心:非凸约束 → 需线性化处理 实际工程中,还要考虑转向角速度约束 δ̇_max 这会影响曲率的变化率,即曲率导数约束 注意:非凸约束是优化难点

4.5 实际工程中的注意事项

最后,我总结几个实际项目中容易踩的坑:

问题 现象 解决方案
曲率约束太紧 路径过于保守,转弯半径过大 适当放宽约束,或加入松弛变量
曲率约束太松 路径出现急弯,车辆无法跟踪 根据实测转向角反算 κ_max
忽略曲率变化率 路径曲率突变,方向盘猛打 加入曲率导数约束 |dκ/ds| ≤ κ̇_max
离散点间距不均匀 曲率计算误差大 使用弧长参数化,保证点间距均匀

我的建议:刚开始做曲率约束时,先用仿真跑一遍。把规划出的路径曲率画出来,看看有没有超过 κ_max 的地方。如果有,要么调约束,要么调路径。我曾经在仿真阶段就发现了曲率超限的问题,省了实车测试的大麻烦。

好了,曲率约束建模就讲到这里。记住三个核心:曲率定义、转向关系、约束表达。下一节我们会把这些约束放进优化问题里,看看怎么联合优化速度和曲率。


可可精品资料库