一、曲率约束基础:曲率定义、曲径半径与路径规划
大家好,欢迎来到《曲率约束与防控制发散实战课程》。我是你们的老朋友,一个在控制领域摸爬滚打多年的工程师。
今天咱们聊点实在的——曲率约束。说实话,我刚入行那会儿,觉得曲率这东西就是数学课本里的概念,跟实际工程八竿子打不着。直到有一次,我设计的一个AGV小车在工厂里原地打转,差点撞翻货架……嗯,从那以后,我再也不敢小看曲率了。
1.1 曲率到底是什么?
先别急着翻公式。咱们用大白话理解一下:曲率,就是曲线弯曲的程度。
你想想看,一条直线,它弯不弯?不弯。那曲率就是0。一个圆,它弯得均匀,曲率就是常数。一条山路,弯来弯去,曲率就在不断变化。
数学上,曲率 κ 的定义是:
κ = |dθ / ds|
其中 dθ 是切线方向的变化量,ds 是弧长。说白了,就是单位弧长上方向转了多少。
我个人习惯用另一种方式理解:曲率是路径的“急转弯程度”。数值越大,转弯越急。
核心要点:
- 直线:κ = 0
- 大半径圆弧:κ 小
- 小半径圆弧:κ 大
- 尖点:κ → ∞(理论上,实际不存在)
1.2 曲率半径——更直观的兄弟
曲率半径 R 是曲率的倒数:
R = 1 / κ
这个参数在工程里更常用。为什么?因为你可以直接拿它跟车辆的转弯半径对比。
我记得有一次调试无人驾驶清扫车,客户要求路径必须满足 R ≥ 5米。我当时想,这不就是最小转弯半径嘛,简单。结果一跑仿真,车在某个拐角处直接冲上路沿……后来发现,我用的路径规划算法根本没考虑曲率连续性,路径上有个地方的曲率半径瞬间从10米跳到了3米。
避坑指南:
我曾经犯过一个低级错误——只检查路径上离散点的曲率半径,忽略了点与点之间的变化率。结果路径看起来没问题,实际跑起来控制量剧烈抖动。记住:曲率半径不仅要满足最小值要求,变化率也要平滑。
1.3 曲率在路径规划中的意义
好,现在咱们聊聊为什么曲率这么重要。我总结了三个核心意义:
- 物理可行性:任何移动机器人、车辆都有最小转弯半径限制。路径曲率必须小于这个限制,否则就是“画饼充饥”。
- 控制稳定性:曲率突变会导致控制量(比如方向盘转角)剧烈变化,轻则抖动,重则发散。我见过一个项目,就是因为路径曲率不连续,导致PID控制器直接饱和,系统失稳。
- 乘坐舒适性:对于载人平台,曲率变化率(即曲率导数)直接影响横向加速度变化率,也就是“推背感”的来源。曲率变化太猛,乘客会晕车。
个人经验:
在实际项目中,我通常把曲率约束分为两级:
- 硬约束:曲率绝对值 ≤ 车辆最大允许曲率(对应最小转弯半径)
- 软约束:曲率变化率 ≤ 某个阈值(保证控制平滑)
硬约束是红线,碰了就出问题。软约束是优化目标,碰了还能跑,但体验差。
1.4 知识体系框架
下面这张图是我自己整理的曲率约束知识体系,帮你建立全局视角:
1.5 一个简单的计算示例
咱们来点实际的。假设你有一个路径点序列,想计算每个点的曲率。最常用的方法是三点法:
// 伪代码:三点法计算曲率
function computeCurvature(p1, p2, p3):
// p1, p2, p3 是三个相邻路径点
v1 = p2 - p1
v2 = p3 - p2
// 计算叉积(二维情况)
cross = v1.x * v2.y - v1.y * v2.x
// 计算向量长度
len1 = sqrt(v1.x^2 + v1.y^2)
len2 = sqrt(v2.x^2 + v2.y^2)
// 曲率 = 2 * |叉积| / (|v1| * |v2| * |v1+v2|)
curvature = 2 * abs(cross) / (len1 * len2 * (len1 + len2))
return curvature
注意:这个公式假设点间距均匀。如果点间距不均匀,需要先做弧长参数化。我习惯在计算前先对路径做等距重采样,这样曲率计算更稳定。
1.6 本章小结
曲率约束不是什么高深莫测的东西。说白了,就是回答三个问题:
- 你的车能不能拐过这个弯?(硬约束)
- 拐弯的时候抖不抖?(软约束)
- 乘客会不会骂你?(舒适性)
我在实际项目中,第一步永远是检查路径的曲率分布。画个曲率图,一眼就能看出问题在哪。这个习惯帮我避免了好几次重大事故。
嗯,今天就先聊到这。记住:曲率是路径规划的“体检报告”,看不懂它,后面控制肯定出问题。