一、曲率约束概述
1.1 什么是曲率
曲率,说白了就是描述曲线弯曲程度的量。
你想想看,一条直线和一条圆弧,哪个更弯?当然是圆弧。但同样是圆弧,半径1米的比半径10米的更弯。曲率就是用来量化这个「弯的程度」的。
数学上,曲率 κ 的定义很简单:
κ = 1 / R
其中 R 是曲率半径。半径越小,曲率越大,弯得越急。
举个例子:
- 高速公路的弯道,曲率半径通常大于200米,曲率小于0.005
- 城市道路的直角转弯,曲率半径可能只有5米,曲率高达0.2
- 直线呢?曲率半径无穷大,曲率为0
我在项目中遇到过一件事。有一次做AGV导航,小车在仓库里总是撞到货架。查了半天,发现是路径规划时没考虑曲率约束。小车能规划出路径,但实际转弯时根本转不过来。嗯,从那以后我再也不敢忽略曲率了。
1.2 曲率在路径规划中的重要性
为什么曲率这么重要?我给你三个理由:
- 运动学可行性——任何非全向移动的机器人,都有最小转弯半径的限制。你让一辆汽车原地掉头?不可能。路径的曲率必须小于机器人能承受的最大曲率。
- 动力学稳定性——高速行驶时,曲率过大意味着向心加速度过大。我见过一个案例,无人车在高速上规划了一条曲率0.1的路径,结果80km/h过弯时差点侧翻。曲率约束直接关系到安全。
- 控制精度——曲率变化太剧烈,控制器根本跟不上。你想想看,上一秒还是直行,下一秒突然要转90度,哪个舵机受得了?
核心观点:曲率约束不是可选项,而是路径规划中的硬约束。忽略它,你的路径就是一张废纸。
1.3 曲率约束的数学定义
好,我们来看数学上的严格定义。
对于一条参数化曲线 p(s) = (x(s), y(s)),其中 s 是弧长参数,曲率 κ 的计算公式为:
κ(s) = |x'(s)y''(s) - y'(s)x''(s)| / (x'(s)² + y'(s)²)^(3/2)
看着复杂?其实没那么可怕。对于实际工程中常用的路径表示方式,曲率计算可以简化。
常见路径的曲率计算:
| 路径类型 | 表示方式 | 曲率公式 |
|---|---|---|
| 直线 | y = kx + b | κ = 0 |
| 圆弧 | 半径 R | κ = 1/R |
| 三次样条 | y = ax³ + bx² + cx + d | κ = |y''| / (1 + y'²)^(3/2) |
| 贝塞尔曲线 | 控制点 P₀, P₁, P₂, P₃ | κ = |B'(t) × B''(t)| / |B'(t)|³ |
曲率约束的数学表达就是:
|κ(s)| ≤ κ_max, ∀s ∈ [0, S]
其中 κ_max 是机器人允许的最大曲率,S 是路径总长。这个约束必须对路径上的每一个点都成立。
个人经验:我建议你在规划阶段就把曲率约束加进去,而不是规划完再检查。后处理修路径,往往越修越糟。我曾经试过先规划再平滑,结果路径被改得面目全非,还不如一开始就约束好。
1.4 曲率约束的知识体系
下面这张图,是我梳理的曲率约束相关知识点。你可以把它当作本章的地图:
1.5 避坑指南
我曾经踩过的坑:
- 坑一:只约束路径点上的曲率,忽略了点之间的曲率变化。结果路径看起来平滑,实际跑起来抖得厉害。
- 坑二:把曲率约束设得太宽松。想着「差不多就行」,结果路径规划出来全是急转弯,机器人根本没法用。
- 坑三:没考虑曲率变化率。最大曲率没超,但曲率从0突变到0.2,控制器直接懵了。
其实,曲率约束这件事,说难不难,说简单也不简单。关键是要理解它背后的物理意义——你规划的每一条路径,最终都要由真实的机器人去执行。机器人的转向机构、轮胎摩擦力、电机响应速度,这些都会限制它能走多弯的路。
我个人习惯是,在项目初期就把机器人的最小转弯半径测出来,然后乘以一个安全系数(比如1.2),作为曲率约束的上限。这样既保证了可行性,又留有余量。
好了,关于曲率约束的概述就讲到这里。记住一句话:曲率约束不是束缚,而是保障。它让你的路径从「理论上可行」变成「实际上可用」。
本章要点回顾:
- 曲率 = 1/曲率半径,衡量曲线弯曲程度
- 曲率约束影响运动学、动力学、控制精度三大方面
- 数学约束:|κ(s)| ≤ κ_max,对路径上每一点成立
- 常见路径的曲率计算方式各不相同,需要区别对待
可可精品资料库