数学基础:贝塞尔曲线与B样条曲线的定义、性质、区别及参数化表示
在轨迹规划领域,曲线表达方式直接决定了路径的光顺性、可控性与计算效率。贝塞尔曲线与B样条曲线是两类最基础、应用最广泛的参数曲线。无论是机械臂关节空间插值、移动机器人路径平滑,还是自动驾驶车道级轨迹生成,其底层数学内核都离不开这两类曲线。本节将系统梳理二者的定义、核心性质、参数化表示方法,并通过对比分析与案例拆解,帮助你在实际工程中做出正确的曲线选型。
核心原理:从伯恩斯坦基到B样条基
贝塞尔曲线的数学本质是使用伯恩斯坦基函数对控制点进行加权组合。给定 n+1 个控制点 P₀, P₁, ..., Pₙ,n 次贝塞尔曲线定义为:
C(u) = Σᵢ₌₀ⁿ Bᵢ,ₙ(u) · Pᵢ, u ∈ [0, 1]
其中伯恩斯坦基函数 Bᵢ,ₙ(u) = C(n, i) · uⁱ · (1-u)ⁿ⁻ⁱ。该基函数具有三个关键特征:非负性(所有基函数值 ≥ 0)、归一性(所有基函数之和恒等于 1)、递推性(可通过 de Casteljau 算法稳定求值)。正是这些性质保证了贝塞尔曲线的凸包性、端点插值性和仿射不变性。
B样条曲线则是对贝塞尔思想的推广。它将参数区间 [0,1] 扩展为任意节点向量 U = {u₀, u₁, ..., uₘ},并使用分段多项式基函数 Nᵢ,ₚ(u)(p 为阶数)。B样条基函数通过 Cox-de Boor 递推公式定义:
Nᵢ,₀(u) = 1 若 uᵢ ≤ u < uᵢ₊₁, 否则 0
Nᵢ,ₚ(u) = (u - uᵢ)/(uᵢ₊ₚ - uᵢ) · Nᵢ,ₚ₋₁(u) + (uᵢ₊ₚ₊₁ - u)/(uᵢ₊ₚ₊₁ - uᵢ₊₁) · Nᵢ₊₁,ₚ₋₁(u)
节点向量的选择决定了曲线的分段位置和连续性。当节点向量两端各重复 p+1 次时,曲线为 Clamped 类型,会插值首末控制点;当节点均匀分布时,曲线为均匀 B样条,不经过端点。这一灵活性使得 B样条在工程中远比贝塞尔曲线更实用。
判断方法:如何根据工程需求选择曲线类型
在实际轨迹规划中,选择贝塞尔还是 B样条,需要从以下四个维度进行判断:
| 判断维度 | 贝塞尔曲线 | B样条曲线 |
|---|---|---|
| 控制点数量变化 | 阶数随之变化,计算量非线性增长 | 阶数固定,增加控制点仅增加段数 |
| 局部修改需求 | 修改任一控制点影响整条曲线 | 修改一点仅影响相邻 p+1 段 |
| 连续性要求 | 拼接时需额外约束,C¹ 连续需对齐切线 | 通过节点重复度直接控制 Cᵖ⁻ᵏ 连续 |
| 计算实时性 | de Casteljau 算法 O(n²) | de Boor 算法 O(p²),p 通常较小 |
一个实用的判断流程是:如果轨迹点数较少(≤ 6 个)且不需要后续调整,贝塞尔曲线足够;如果轨迹点数较多、需要迭代优化或局部避障调整,则必须使用 B样条。此外,若需要精确经过某些路径点(如起点、终点、障碍物边界点),应使用 Clamped B样条或分段贝塞尔拼接。
案例拆解:移动机器人路径平滑中的曲线选型
假设我们为一台室内移动机器人规划从 A 点到 B 点的路径,全局规划器生成了 12 个离散路径点(含起点和终点)。初始路径存在明显折角,需要平滑处理。我们对比两种方案:
方案一:使用单一贝塞尔曲线。12 个控制点意味着 11 次贝塞尔曲线,计算复杂度高,且修改中间任意一个控制点都会导致整条曲线变形,无法针对局部障碍物进行微调。实际测试中,曲线在拐弯处出现不必要的振荡,且无法保证与起点/终点的航向约束同时满足。
方案二:使用三次 B样条曲线。阶数 p=3,节点向量采用 Clamped 类型,控制点仍为 12 个。曲线被分为 9 段,每段仅受 4 个控制点影响。当机器人探测到前方新增障碍物时,只需调整最近的 2-3 个控制点,其余部分保持不变。同时,通过设置节点重复度,可以保证起点和终点的位置与航向精确约束。
从量化指标看,方案二的计算耗时仅为方案一的 1/3(de Boor 算法 O(p²) vs de Casteljau 算法 O(n²)),且局部调整的响应时间从 120ms 降至 25ms。更重要的是,B样条的凸包性保证了平滑后的路径不会超出原始路径点围成的凸包范围,从而避免碰撞风险。
该案例的复盘经验是:轨迹点数超过 8 个或存在局部动态避障需求时,应优先选择 B样条。贝塞尔曲线更适合作为 B样条的基础构建块(例如将 B样条拆分为多段贝塞尔进行渲染或碰撞检测)。
常见误区与总结复盘
在工程实践中,以下三个误区最为常见:
- 误区一:认为贝塞尔曲线阶数越高越好。实际上,高阶贝塞尔曲线数值稳定性差,de Casteljau 算法虽然比直接计算伯恩斯坦基稳定,但阶数超过 10 后仍会出现微小扰动被放大的问题。工程上推荐使用分段低阶(3-5 次)曲线拼接。
- 误区二:混淆 B样条阶数与次数。B样条的阶数 p 等于次数 k+1(即 p = k+1)。三次 B样条(p=3)意味着每段是三次多项式,但整体曲线是 C² 连续的。很多初学者误以为 p=3 就是三阶连续,实际上 C² 连续意味着二阶导数连续,而非三阶。
- 误区三:忽略节点向量的影响。节点向量的分布直接决定曲线形状。均匀节点向量适用于周期性轨迹,而 Clamped 节点向量适用于有明确起点/终点约束的轨迹。非均匀节点向量可以在曲率变化大的区域加密节点,提高拟合精度。
风险提示:在轨迹规划中,B样条的局部支撑性虽然带来灵活性,但也意味着如果控制点分布不均匀,可能导致曲线在某些区域过度弯曲。建议在生成控制点时,结合路径曲率约束进行等弧长采样,避免控制点间距差异过大。
总结而言,贝塞尔曲线是理解参数曲线的基础,其直观的几何意义和简单的数学形式适合教学与简单场景;B样条曲线则是工程轨迹规划的基石,其局部支撑性、阶数独立性和连续性可控性使其成为复杂轨迹优化的首选。在实际项目中,通常采用 B样条作为底层表示,并在需要时将其转换为分段贝塞尔形式以利用 GPU 并行计算或进行精确碰撞检测。掌握二者的数学本质与工程权衡,是构建高质量轨迹规划系统的第一步。