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 是轴距(前后轮中心距离),δ 是前轮转向角。
这个公式怎么来的?我简单推导一下:
- 车辆转弯时,后轮中心画出一个圆弧
- 圆弧半径 R 满足:R = L / tan(δ)
- 曲率 κ = 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 知识体系总览
为了让你更直观地理解本章的知识结构,我画了一张图:
4.5 实际工程中的注意事项
最后,我总结几个实际项目中容易踩的坑:
| 问题 | 现象 | 解决方案 |
|---|---|---|
| 曲率约束太紧 | 路径过于保守,转弯半径过大 | 适当放宽约束,或加入松弛变量 |
| 曲率约束太松 | 路径出现急弯,车辆无法跟踪 | 根据实测转向角反算 κ_max |
| 忽略曲率变化率 | 路径曲率突变,方向盘猛打 | 加入曲率导数约束 |dκ/ds| ≤ κ̇_max |
| 离散点间距不均匀 | 曲率计算误差大 | 使用弧长参数化,保证点间距均匀 |
我的建议:刚开始做曲率约束时,先用仿真跑一遍。把规划出的路径曲率画出来,看看有没有超过 κ_max 的地方。如果有,要么调约束,要么调路径。我曾经在仿真阶段就发现了曲率超限的问题,省了实车测试的大麻烦。
好了,曲率约束建模就讲到这里。记住三个核心:曲率定义、转向关系、约束表达。下一节我们会把这些约束放进优化问题里,看看怎么联合优化速度和曲率。
可可精品资料库