Bézier Curve
- 又称: Bezier curve
- 类别: Planning & manipulation › Trajectory optimisation
- 标签: trajectory-optimization, splines, path-planning, geometry, motion-planning
一种由控制点定义的多项式曲线:它始于第一个控制点、终于最后一个控制点,并被中间的控制点牵引;广泛用于机器人的路径、轨迹和笔画形状。
定义
n 次 贝塞尔曲线(Bézier curve)是一种多项式曲线,由 n + 1 个控制点 P₀ … Pₙ 和一个从 0 变化到 1 的参数 t 定义:B(t) = Σ C(n, i) (1 − t)ⁿ⁻ⁱ tⁱ Pᵢ,其中的权重是 Bernstein 基多项式。曲线始于 P₀、终于 Pₙ,两端的切线分别沿控制多边形的第一条边和最后一条边;内部的控制点决定曲线的形状,但一般不在曲线上。具有四个控制点的三次曲线最为常见。这种形式于 1960 年代在法国汽车工业中发展起来,由雷诺的 Pierre Bézier 和雪铁龙的 Paul de Casteljau 各自独立提出。
有几个性质使 贝塞尔曲线在机器人领域中很方便。整条曲线位于其控制点的凸包之内,因此只要把控制点保持在一个无障碍的凸区域内,就能保证曲线也留在该区域内;这把避碰转化为线性约束,凸集图上的轨迹优化就是这样做的。贝塞尔曲线的导数是另一条低一次的 贝塞尔曲线,其控制点为 n(Pᵢ₊₁ − Pᵢ),因此速度和加速度的界限也可以施加在控制点上,只是比较保守。de Casteljau 算法通过反复的线性插值,以数值稳定的方式对曲线求值和分割。
也有一些需要记住的限制。参数 t 既不是时间也不是弧长,因此用作轨迹的曲线仍然需要时间参数化,而且 t 的等步长并不对应曲线上的等距离。移动一个控制点会改变整条曲线,所以长路径通常由若干低次段拼接而成,并在位置、切线和曲率上施加连续性条件,或者用能提供局部控制的 B 样条来表示。为了拟合复杂形状而提高次数,会使曲线更难调整形状,数值性质也更差。
为何重要
贝塞尔曲线为路径和轨迹提供了一种紧凑、平滑且易于施加约束的表示,应用范围从汽车和无人机轨迹一直到工具和画笔笔画。它的凸包性质和导数性质把安全限制和动力学限制转化为少数几个点上的简单约束,这就是它出现在许多基于优化的规划器中的原因。
主要应用
- 为无人机和移动机器人生成平滑轨迹
- 图搜索或基于采样的规划之后的路径平滑
- 自动驾驶车辆的变道和泊车路径
- 绘画、绘图和点胶机器人的工具、画笔和笔的笔画
- 使用凸集图的运动规划
- 足式机器人的摆动腿轨迹
实际应用
一个无人机规划器把穿过仓库的路线分成一串无障碍的凸区域,并为每个区域分配一段 贝塞尔曲线。它要求每段曲线的控制点位于其所属区域之内,把一段的最后几个控制点与下一段的最前几个控制点联系起来,使位置、速度和加速度在连接处相匹配,并限定导数曲线的控制点,以满足速度和加速度限制。由于所有这些约束在控制点上都是线性的,整个问题是一个能快速求解的凸规划。最后一步按选定的时长把每段的参数 t 映射为时间;缩短时长会按比例提高无人机必须达到的每一个速度和加速度。
常见误解
- 贝塞尔曲线经过它的所有控制点 — 只有第一个和最后一个控制点在曲线上;内部的控制点牵引曲线,但曲线并不经过它们
- 参数 t 就是时间 — t 是介于 0 和 1 之间的形状参数;速度和加速度由单独的时间缩放来设定
- 对复杂路径来说,次数越高越好 — 高次曲线会失去局部控制;由低次段组成的链或 B 样条通常更可取
- 限定控制点就能得到精确的速度限制 — 对导数控制点的界限是充分但保守的,因此实际峰值通常低于该界限
谁需要了解
- 运动规划和轨迹规划工程师
- 自动驾驶车辆和无人机开发人员
- 喷涂、焊接和点胶机器人的编程人员
- 设计摆动轨迹的足式运动工程师
相关技术
- B 样条(B-Splines)
- de Casteljau 算法(de Casteljau Algorithm)
- Bernstein 多项式(Bernstein Polynomials)
- NURBS
- 时间最优路径参数化(Time-Optimal Path Parameterization)
- 凸优化(Convex Optimization)
相关术语
相关项目
- Nav2: ROS 2 navigation stack with path planning and obstacle avoidance for mobile robots
- ROS Motion Planning: One repo implementing 40+ classic and learning-based robot path planners as ROS plugins
- OMPL: Sampling-based motion planning library powering MoveIt and countless robotics applications
- MoveIt 2: Motion planning framework for ROS 2 robot arms, with kinematics and collision checking
- PyRoki: Modular Python toolkit for kinematic optimization across CPU, GPU, and TPU via JAX
- mink: Python inverse kinematics library built on MuJoCo supporting 20+ robot platforms
视频
- The Beauty of Bézier Curves: Freya Holmér