4、路径表示方法:路径点序列、多项式曲线、贝塞尔曲线、样条曲线

路径怎么表示?这是个看似简单、实则坑不少的问题。

我刚开始做机器人导航时,觉得路径嘛,不就是一堆点连起来?后来发现,点连起来的方式不同,机器人走出来的效果天差地别。有的路径让机器人抖得像帕金森,有的路径却丝滑得像德芙巧克力。

今天咱们就把这几种路径表示方法掰开揉碎,讲清楚。

4.1 路径点序列:最朴素的方法

路径点序列,说白了就是一堆离散的坐标点。比如:

waypoints = [
    (0.0, 0.0),
    (1.0, 0.5),
    (2.0, 1.0),
    (3.0, 1.5),
    (4.0, 2.0)
]

每个点代表机器人必须经过的位置。控制器就照着这些点,一个接一个地走。

优点很明显:

  • 实现简单,存个数组就行
  • 直观,一眼就能看懂路径长啥样
  • 适合全局路径规划的输出(比如A*、RRT*)

缺点也很致命:

  • 路径不连续——点与点之间是直线,拐角处有突变
  • 机器人走到每个点必须停下来转向,否则会 overshoot
  • 无法保证曲率连续,高速时容易甩出去
注意: 路径点序列只适合低速、低精度的场景。如果你做的是AGV小车、扫地机器人,勉强能用。但做自动驾驶、高速移动机器人,千万别用这个。

4.2 多项式曲线:让路径变平滑

路径点序列太生硬,怎么办?用多项式曲线去拟合这些点。

最简单的是一次多项式(直线):

y = ax + b

但直线不够用。实际中常用三次多项式:

y = a₀ + a₁x + a₂x² + a₃x³

为什么是三次?因为三次多项式能保证位置和速度连续(C¹连续),而且计算量不大。

我有个项目需要让机器人在仓库里走S形弯道。用三次多项式拟合路径点,效果还不错。但有个问题——多项式次数越高,曲线越容易在端点处剧烈振荡。这叫「龙格现象」,你想想看,一个高次多项式在两端像蛇一样扭来扭去,机器人根本没法跟。

我的建议: 多项式曲线适合短距离、点对点的路径生成。比如机械臂从A点抓取到B点放置,用三次多项式就够。但长距离路径,别用高次多项式,会出问题。

4.3 贝塞尔曲线:设计师的最爱

贝塞尔曲线,你肯定见过。Photoshop里的钢笔工具、字体设计、汽车造型,到处都有它的影子。

它的核心思想是:用几个控制点来「拉」出一条曲线。控制点不一定要在曲线上,但曲线会被控制点「吸引」。

一个三次贝塞尔曲线需要4个控制点:

B(t) = (1-t)³P₀ + 3(1-t)²tP₁ + 3(1-t)t²P₂ + t³P₃
其中 t ∈ [0, 1]

你看,t从0变到1,曲线就从P₀平滑地走到P₃。中间被P₁和P₂拉着走。

贝塞尔曲线的优点:

  • 直观——拖动控制点就能调整曲线形状
  • 凸包性质——曲线始终在控制点围成的多边形内部
  • 端点插值——曲线一定经过首尾控制点

缺点呢?

  • 全局性——移动一个控制点,整条曲线都会变
  • 不适合长路径——控制点一多,曲线就变得难以控制

我在项目中遇到过: 用贝塞尔曲线做泊车路径规划。控制点少,曲线光滑,很适合倒车入库这种短距离场景。但如果你要做几百米的路径,贝塞尔曲线就不太行了——控制点太多,调整起来像在解谜题。

4.4 样条曲线:工业级的选择

样条曲线,说白了就是「分段多项式」——把路径切成一小段一小段,每段用低次多项式拟合,然后在连接处保证光滑。

最常用的是三次样条(Cubic Spline):

  • 每段是三次多项式
  • 段与段之间位置、速度、加速度都连续(C²连续)
  • 整体曲线非常光滑

还有B样条(B-Spline):

  • 比三次样条更灵活
  • 支持局部修改——移动一个控制点只影响附近几段
  • 可以控制曲线的「松紧程度」

样条曲线为什么是工业级选择?因为它在光滑性和局部控制之间取得了完美平衡。

我曾经做过一个高速公路自动驾驶项目,路径长度几十公里。用B样条表示路径,每个控制点只影响周围一小段。调试时调整某个弯道的曲率,其他路段纹丝不动。这种局部性太重要了。

经验之谈: 如果你做的是移动机器人、自动驾驶、无人机航迹规划,优先考虑样条曲线。尤其是B样条,它几乎能解决你遇到的所有路径表示问题。

4.5 四种方法对比

方法 连续性 局部控制 计算量 适用场景
路径点序列 C⁰(位置连续) 是 极低 低速AGV、扫地机器人
多项式曲线 C¹~C² 否 低 短距离点对点运动
贝塞尔曲线 C¹~C² 否(全局) 中 短路径、泊车、机械臂
样条曲线 C² 是(B样条) 中高 长路径、高速运动、自动驾驶

4.6 知识体系图

下面这张图帮你理清这四种方法的关系和选择逻辑:

路径表示方法知识体系 路径表示方法 路径点序列 多项式曲线 贝塞尔曲线 样条曲线 C⁰连续 · 低速场景 C¹~C² · 短距离 C¹~C² · 全局控制 C²连续 · 局部控制 · 长路径 ⭐ 工业首选 连续性越高,路径越光滑;局部控制越好,调试越方便

4.7 怎么选?我的建议

嗯,这里要注意,没有银弹。每种方法都有它的生态位。

  • 做扫地机器人、简单AGV: 路径点序列就够了。别折腾,简单就是美。
  • 做机械臂点对点运动: 三次多项式曲线,计算快、效果好。
  • 做泊车、短距离特殊路径: 贝塞尔曲线,控制直观,调参方便。
  • 做自动驾驶、高速移动机器人: 别犹豫,直接上B样条。虽然实现复杂一点,但后期调试会感谢你自己。

我曾经在一个项目里偷懒用了路径点序列,结果机器人在每个拐角都剧烈抖动,电机嗡嗡响。后来换成B样条,整个世界清净了。从那以后,但凡路径超过10米,我必用样条曲线。

好了,路径表示方法就讲到这里。记住一句话:路径的光滑程度,决定了机器人能跑多快、多稳。

可可精品资料库