4. 路径表示方法:参数曲线、多项式曲线、样条曲线、贝塞尔曲线

做路径规划这些年,我最大的体会是:路径怎么表示,直接决定了后面的优化能不能跑起来。你想想看,如果路径本身连个数学表达式都没有,那曲率约束、速度规划这些根本无从下手。

所以这一节,咱们聊聊路径的几种主流表示方法。我个人习惯把它们分成四类:参数曲线、多项式曲线、样条曲线、贝塞尔曲线。每种都有各自的脾气,用对了地方就是利器,用错了就是坑。

4.1 参数曲线:最基础的表达方式

先说参数曲线。说白了,就是把路径上的点用参数 t 来表示。比如二维空间里,一个点可以写成:

x = f(t)
y = g(t)

t 的取值范围通常是 [0, 1]。t=0 是起点,t=1 是终点。

为什么要用参数形式?因为这样处理起来特别方便。你想求切线?直接对 t 求导就行。想算曲率?一阶导、二阶导一组合就出来了。

核心公式:参数曲线的曲率计算公式

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

其中 x' = dx/dt, x'' = d²x/dt²,y 同理。

我在项目中遇到过一个问题:直接用参数曲线表示路径时,如果参数化不均匀,会导致路径点分布不均匀。比如 t 均匀变化,但实际路径上的点却忽快忽慢。嗯,这里要注意,参数化方式会影响后续的插值和优化效果。

4.2 多项式曲线:简单但有限制

多项式曲线是最直观的。就是把 x 和 y 分别表示成 t 的多项式:

x(t) = a₀ + a₁t + a₂t² + ... + aₙtⁿ
y(t) = b₀ + b₁t + b₂t² + ... + bₙtⁿ

多项式的好处是计算简单,求导容易。但有个致命问题:阶数高了容易震荡。你想想看,一个 7 次多项式,稍微动一下系数,曲线可能就扭得不成样子。

避坑指南:我曾经用 5 次多项式做路径平滑,结果在端点处曲率突变,导致车辆实际行驶时方向盘猛打。后来发现,多项式曲线在端点处的导数连续性很难保证,尤其是高阶导数。

所以我的建议是:多项式曲线适合做短距离、低阶的路径表示。比如从 A 点到 B 点,中间没有复杂障碍物,用 3 次多项式就够用了。

4.3 样条曲线:分段处理的艺术

样条曲线解决了多项式曲线的痛点。它的思路很简单:把整条路径分成若干段,每段用低阶多项式表示,段与段之间保证连续性。

最常见的三次样条,每段是 3 次多项式,段间保证 C² 连续(位置、速度、加速度都连续)。

个人经验:我习惯用三次样条做路径平滑。原因很简单:C² 连续意味着曲率连续,这对车辆控制特别友好。方向盘不会突然抖动。

样条曲线的数学形式:

S(t) = aᵢ + bᵢ(t - tᵢ) + cᵢ(t - tᵢ)² + dᵢ(t - tᵢ)³
     t ∈ [tᵢ, tᵢ₊₁]

其中 i 表示第 i 段,a、b、c、d 是待求系数。通过连续性条件和边界条件,可以解出所有系数。

样条曲线的缺点是什么?全局依赖。你改了一个点的位置,整条曲线都得重新算。这在实时规划中是个麻烦事。

4.4 贝塞尔曲线:控制点驱动

贝塞尔曲线是我个人比较喜欢的一种表示方法。它用控制点来定义曲线形状,直观又好调。

n 阶贝塞尔曲线的公式:

B(t) = Σᵢ₌₀ⁿ C(n,i) (1-t)^(n-i) tⁱ Pᵢ

其中 Pᵢ 是控制点,C(n,i) 是组合数。

贝塞尔曲线有几个重要性质:

  • 端点插值:曲线经过第一个和最后一个控制点
  • 凸包性质:曲线完全落在控制点构成的凸包内
  • 变差缩减性:曲线不会比控制多边形有更多的波动

实际应用:在自动驾驶路径规划中,我常用 3 阶或 4 阶贝塞尔曲线做局部路径生成。控制点少,计算快,而且凸包性质天然保证了路径不会偏离太远。

但贝塞尔曲线也有局限:全局控制。移动一个控制点,整条曲线都会变化。所以它适合做局部路径,不适合做全局路径规划。

4.5 四种方法的对比

方法 连续性 局部控制 计算复杂度 适用场景
参数曲线 取决于函数 无 低 简单路径
多项式曲线 全局连续 无 低 短距离平滑
样条曲线 C² 连续 弱 中 全局路径平滑
贝塞尔曲线 Cⁿ 连续 无 低 局部路径生成

4.6 知识体系结构图

路径表示方法知识体系 路径表示方法 参数曲线 多项式曲线 样条曲线 贝塞尔曲线 核心特性 • 参数 t 驱动 • 求导方便 • 曲率计算简单 核心特性 • 计算简单 • 高阶易震荡 • 适合短距离 核心特性 • C² 连续 • 分段低阶 • 全局依赖 核心特性 • 控制点驱动 • 凸包性质 • 局部路径 选择建议:根据场景需求选择合适的方法 曲率约束 → 样条曲线 / 贝塞尔曲线

4.7 我的选择建议

说了这么多,到底该用哪种?我的经验是这样的:

  • 做全局路径规划:用样条曲线。C² 连续保证曲率平滑,适合长距离路径。
  • 做局部路径避障:用贝塞尔曲线。控制点少,计算快,凸包性质保证安全。
  • 做短距离连接:用多项式曲线。简单直接,够用就好。
  • 做理论分析:用参数曲线。数学性质清晰,方便推导。

一个小技巧:我经常把样条曲线和贝塞尔曲线结合起来用。先用样条做全局路径,然后在局部用贝塞尔做微调。这样既保证了全局的平滑性,又有了局部的灵活性。

嗯,路径表示方法就聊到这里。每种方法都有自己的脾气,关键是要理解它们的本质,然后根据实际场景灵活选择。记住,没有最好的方法,只有最合适的方法。

可可精品资料库