3. 贝塞尔曲线入门
贝塞尔曲线是计算机辅助几何设计(CAGD)、路径规划与轨迹平滑中最基础也最优雅的数学工具之一。它由法国工程师皮埃尔·贝塞尔(Pierre Bézier)在雷诺汽车公司工作期间提出,用于汽车车身外形设计。与样条曲线相比,贝塞尔曲线的核心优势在于:曲线的形状完全由一组控制点(Control Points)决定,不依赖全局坐标系,且具有直观的几何意义。在机器人轨迹规划、自动驾驶路径平滑、动画插值以及字体渲染中,贝塞尔曲线都是不可或缺的底层构件。本节将从数学定义出发,深入剖析伯恩斯坦多项式(Bernstein Polynomial)的基函数特性,并重点讲解控制点与凸包(Convex Hull)性质如何在实际工程中指导轨迹优化。
3.1 贝塞尔曲线的数学定义与几何构造
3.1.1 从线性插值到高阶曲线
贝塞尔曲线的定义基于递归的线性插值思想。对于给定的一组控制点 \(P_0, P_1, \dots, P_n\),n次贝塞尔曲线定义为:
B(t) = Σ_{i=0}^{n} P_i · B_{i,n}(t), t ∈ [0, 1]
其中 \(B_{i,n}(t)\) 是伯恩斯坦基函数。当 n=1 时,曲线退化为连接 \(P_0\) 和 \(P_1\) 的直线段;当 n=2 时,得到二次贝塞尔曲线(抛物线);n=3 时即为最常用的三次贝塞尔曲线。工程实践中,三次贝塞尔曲线因其良好的平滑性和计算效率,成为轨迹规划的首选。
几何构造上,贝塞尔曲线可以通过德卡斯特里奥(de Casteljau)算法直观理解:将控制点依次连线,在每条线段上按比例 t 取点,再连接新生成的点,重复此过程直到只剩一个点,该点即为曲线在参数 t 处的位置。这种递推构造方式不仅提供了稳定的数值计算方法,也揭示了曲线与控制点之间的“加权平均”本质。
3.1.2 伯恩斯坦多项式的关键性质
伯恩斯坦多项式 \(B_{i,n}(t) = \binom{n}{i} t^i (1-t)^{n-i}\) 具有三个对轨迹优化至关重要的性质:
- 非负性:对于 \(t \in [0,1]\),所有基函数值均大于等于零。这意味着曲线上的任意点都是控制点的“凸组合”,不会出现负权重导致的“过冲”现象。
- 归一性:\(\sum_{i=0}^{n} B_{i,n}(t) = 1\),保证曲线是控制点的仿射组合,因此曲线具有仿射不变性——对控制点做旋转、平移、缩放,曲线也会同步变换。
- 递推性:\(B_{i,n}(t) = (1-t)B_{i,n-1}(t) + tB_{i-1,n-1}(t)\),这为高效计算提供了递归算法基础。
工程启示:非负性和归一性共同保证了贝塞尔曲线一定落在控制点的凸包内。在轨迹规划中,这意味着只要将控制点约束在安全区域内,生成的曲线就绝不会越界——这是贝塞尔曲线相比多项式插值(如牛顿插值)最核心的安全优势。
3.2 控制点的作用机制与凸包性质
3.2.1 控制点的直观影响
控制点对曲线的影响程度随参数 t 变化:在曲线起点(t=0)处,只有 \(P_0\) 起作用;在终点(t=1)处,只有 \(P_n\) 起作用。中间控制点则在对应参数区间内发挥主导作用。具体而言,\(P_i\) 对曲线的影响权重在 \(t = i/n\) 时达到峰值。这种“局部主导、全局影响”的特性,使得调整单个控制点会改变整条曲线的形状,但影响幅度随距离增大而衰减。
对于三次贝塞尔曲线,控制点 \(P_1\) 和 \(P_2\) 的连线方向决定了曲线在端点处的切线方向。具体地,曲线在 \(P_0\) 处的切线方向与 \(P_0 \rightarrow P_1\) 一致,在 \(P_3\) 处的切线方向与 \(P_2 \rightarrow P_3\) 一致。这一性质在轨迹拼接时尤为重要——若要求两条曲线在连接点处曲率连续,只需保证相邻控制点共线且比例适当。
3.2.2 凸包性质的数学证明与工程价值
凸包性质是指:贝塞尔曲线上的所有点都位于控制点形成的凸包(包含所有控制点的最小凸多边形/多面体)内。证明思路非常简洁:由于所有基函数非负且和为1,曲线上任意点都是控制点的凸组合,而凸组合的结果必然落在凸包内。
| 性质 | 数学表达 | 轨迹规划中的意义 |
|---|---|---|
| 端点插值 | B(0)=P₀, B(1)=Pₙ | 保证轨迹精确经过起点和终点 |
| 凸包包含 | B(t) ∈ Conv(P₀...Pₙ) | 轨迹不超出安全走廊边界 |
| 切线方向 | B'(0) ∝ (P₁-P₀) | 可精确控制起始/终止航向角 |
| 仿射不变性 | Affine(B(t)) = B_affine(t) | 坐标变换后曲线形状不变 |
经验提醒:在自动驾驶路径平滑中,常将道路边界或障碍物膨胀后的多边形作为凸包约束。只要控制点选在安全区域内,生成的贝塞尔曲线就必然满足避障要求,无需逐点碰撞检测,大幅降低计算量。
3.3 案例拆解:使用三次贝塞尔曲线平滑AGV路径
3.3.1 场景与约束
某仓储AGV需要从A点(坐标(0,0),航向角0°)行驶到B点(坐标(10,0),航向角180°),中间需要绕过障碍物区域。初始路径规划算法给出了一条折线路径,包含三个中间点:(3,2)、(5,-1)、(8,2)。折线路径在转折点处存在速度不连续,导致AGV必须减速停车再转向,严重影响运输效率。
3.3.2 贝塞尔曲线设计过程
我们采用分段三次贝塞尔曲线进行平滑。以第一段为例,从起点(0,0)到第一个中间点(3,2):
- 确定端点与控制点:起点P₀=(0,0),终点P₃=(3,2)。根据航向约束,P₁应位于P₀的x轴正方向,取P₁=(1.5,0);P₂应位于P₃的切线方向,取P₂=(2.5,2)。
- 验证凸包:四个控制点形成的凸包为四边形,检查该四边形是否与障碍物区域相交。经计算,凸包完全位于安全区域。
- 计算曲线点:利用伯恩斯坦多项式,在t=0, 0.1, ..., 1处采样,得到平滑轨迹点。
- 曲率检查:计算各点曲率半径,确保最小转弯半径大于AGV的物理限制(0.8m)。
3.3.3 结果与复盘
平滑后的路径最大曲率从折线处的无穷大(尖角)降低至1.2m⁻¹,AGV可以以恒定速度通过,单次运输时间缩短18%。但复盘发现,第一段与第二段曲线在连接点(3,2)处仅达到G0连续(位置连续),航向角存在突变。解决方案是:将第一段的P₂、连接点、第二段的P₁调整为共线,且满足 \(|P₂ - P₃| = |P₃ - P₁|\),实现G1连续(切线连续)。
风险提示:贝塞尔曲线的全局性意味着修改一个控制点会影响整条曲线。在长距离轨迹中,直接使用高阶贝塞尔曲线(n>5)会导致控制点对曲线的影响过于分散,数值稳定性下降。工程上推荐使用分段三次贝塞尔曲线,并辅以连续性约束。
3.4 常见误区与总结复盘
3.4.1 误区一:控制点越多,曲线越平滑
事实并非如此。增加控制点会提高曲线阶数,但高阶多项式容易产生振荡(龙格现象)。例如,用10个控制点拟合一条近似直线,曲线可能在端点附近出现明显波动。正确做法是保持低阶(3次),通过增加曲线段数来逼近复杂形状。
3.4.2 误区二:凸包性质意味着曲线不会超出控制点范围
凸包是包含所有控制点的最小凸集,其范围通常大于控制点坐标的简单包围盒。例如,三个不共线控制点形成的凸包是三角形,曲线可能超出控制点的x/y坐标范围,但绝不会超出三角形区域。在狭窄通道中,需要精确计算凸包边界,而非简单使用控制点的AABB包围盒。
3.4.3 误区三:忽略参数化速度
贝塞尔曲线的参数t均匀变化时,曲线上的弧长速度并不均匀。在控制点密集区域,曲线移动慢;在稀疏区域,移动快。对于轨迹规划,需要额外进行弧长参数化或速度规划,否则AGV会出现忽快忽慢的现象。
3.4.4 总结:贝塞尔曲线的适用边界
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 短距离平滑(<50m) | 单条三次贝塞尔 | 计算简单,凸包易验证 |
| 中长距离路径 | 分段三次贝塞尔+G1/G2连续 | 兼顾灵活性与平滑性 |
| 复杂约束环境 | B样条曲线 | 局部支撑性更好,凸包更紧 |
| 实时动态避障 | 贝塞尔+控制点在线调整 | 凸包性质保证安全 |
贝塞尔曲线作为轨迹平滑的基石,其核心价值在于用少量控制点定义出具有严格数学保证的光滑曲线。理解伯恩斯坦多项式的非负性与归一性,掌握凸包性质的安全边界意义,是后续学习B样条、NURBS以及轨迹优化算法的基础。在实际工程中,务必结合连续性约束、曲率限制和计算效率,选择最合适的曲线表达形式。