当前位置:   article > 正文

贝塞尔曲线,B-样条,非均匀有理B样条梳理_样条,b样条,贝塞尔

样条,b样条,贝塞尔


在一些最新的机器人的运动规划工作中,贝塞尔曲线、B样条、非均匀有理B样条常常被用来表征一条时空轨迹,取代了常用的时间多项式表征方法。这是因为贝塞尔曲线、B样条、非均匀有理B样条有一些优异的性质。是什么性质让以上三者在运动规划中大显身手,三者之间又有什么异同?这篇文章希望能够将这些概念讲清楚,希望对你有所帮助。

1. 贝塞尔曲线(Bézier curve)

1.1 一阶贝塞尔曲线

首先考虑这样一条曲线方程:
B ( t ) = P 0 + ( P 1 − P 0 ) t = ( 1 − t ) P 0 + t P 1 (1) \mathbf{B}(t)=\mathbf{P_{0}}+(\mathbf{P_1}-\mathbf{P_0})t=(1-t)\mathbf{P_0}+t\mathbf{P_1} \tag{1} B(t)=P0+(P1P0)t=(1t)P0+tP1(1)
假设 P 0 \mathbf{P_0} P0, P 1 \mathbf{P_1} P1是平面中的两点,则 B ( t ) \mathbf{B}(t) B(t)代表平面中的一段线段,假设 P 0 \mathbf{P_0} P0, P 1 \mathbf{P_1} P1是三维空间中的两点,则 B ( t ) \mathbf{B}(t) B(t)代表三维空间中的一段线段。如图1所示:


图1 一阶贝塞尔动画示意图

1.2 二阶贝塞尔曲线、高阶贝塞尔曲线

相应的,二阶贝塞尔曲线可以看成由空间中的三点 P 0 \mathbf{P_0} P0, P 1 \mathbf{P_1} P1, P 2 \mathbf{P_2} P2追踪,其对应曲线方程写为:
B ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 , t ∈ [ 0 , 1 ] (2) \mathbf{B}(t)=(1-t)^2\mathbf{P_0}+2t(1-t)\mathbf{P_1}+t^2\mathbf{P_2} ,t\in[0,1]\tag{2} B(t)=(1t)2P0+2t(1t)P1+t2P2,t[0,1](2)
二阶贝塞尔曲线的动画示意图如图2所示。


图2 二阶贝塞尔曲线动画示意图

我们也可以这样理解二阶贝塞尔曲线,假设 Q 0 \mathbf{Q_0} Q0 P 0 \mathbf{P_0} P0 P 1 \mathbf{P_1} P1间的连续点,描述了一段线性(一阶)贝塞尔曲线 B P 0 P 1 \mathbf{B_{P_0P_1}} BP0P1, Q 1 \mathbf{Q_1} Q1 P 1 \mathbf{P_1} P1 P 2 \mathbf{P_2} P2间的连续点,描述了一段线性(一阶)贝塞尔曲线 B P 1 P 2 \mathbf{B_{P_1P_2}} BP1P2,则以 Q 1 \mathbf{Q_1} Q1 Q 2 \mathbf{Q_2} Q2为控制点(路径点)的贝塞尔曲线方程可以写为:
B ( t ) = ( 1 − t ) Q 0 + t Q 1 (3) \mathbf{B}(t)=(1-t)\mathbf{Q_0}+t\mathbf{Q_1} \tag{3} B(t)=(1t)Q0+tQ1(3)
( 3 ) {(3}) (3)与式 ( 2 ) {(2}) (2)是完全等价的。式 ( 3 ) {(3}) (3)给出了二阶贝塞尔曲线的递归形式,同理,对于三阶贝塞尔曲线,可以看成由四个空间中的控制点 P 0 \mathbf{P_0} P0, P 1 \mathbf{P_1} P1, P 2 \mathbf{P_2} P2 P 3 \mathbf{P_3} P3,或是三个线性贝塞尔曲线描述点 Q 0 \mathbf{Q_0} Q0 Q 1 \mathbf{Q_1} Q1 Q 2 \mathbf{Q_2} Q2,或是两个二阶贝塞尔曲线描述点 R 0 \mathbf{R_0} R0, R 1 \mathbf{R_1} R1组成。三阶贝塞尔的曲线动画示意图如图3所示,其方程为:

B ( t ) = ( 1 − t ) 3 P 0 + 3 P 1 t ( 1 − t ) 2 + 3 P 2 t 2 ( 1 − t ) + P 3 t 3 , t ∈ [ 0 , 1 ] (4) \mathbf{B}(t)=(1-t)^3\mathbf{P_0}+3\mathbf{P_1}t(1-t)^2+3\mathbf{P_2}t^2 (1-t)+\mathbf{P_3}t^3,t\in[0,1]\tag{4} B(t)=(1t)3P0+3P1t(1t)2+3P2t2(1t)+P3t3,t[0,1](4)


图3 三阶贝塞尔曲线动画示意图

1.3 贝塞尔曲线的一般形式

至此,我们可以给出贝塞尔曲线的一般形式。假设空间中一条n阶贝塞尔曲线,则它被n+1个空间中的控制点唯一确定。具体曲线方程可以写为:

B ( t ) = ∑ i = 0 n ( n i ) P i ( 1 − t ) n − i t i = ( n 0 ) P 0 ( 1 − t ) n t 0 + ( n 1 ) P 1 ( 1 − t ) n − 1 t 1 + ⋯ + ( n n − 1 ) P n − 1 ( 1 − t ) 1 t n − 1 + ( n n ) P n ( 1 − t ) 0 t n , t ∈ [ 0 , 1 ] (5) \mathbf{B}(t)=\sum_{i=0}^{n}\left(

ni
\right) \mathbf{P}_{i}(1-t)^{n-i} t^{i}=\left(
n0
\right) \mathbf{P}_{0}(1-t)^{n} t^{0}+\left(
n1
\right) \mathbf{P}_{1}(1-t)^{n-1} t^{1}+\cdots+\left(
nn1
\right) \mathbf{P}_{n-1}(1-t)^{1} t^{n-1}+\left(
nn
\right) \mathbf{P}_{n}(1-t)^{0} t^{n}, t \in[0,1]\tag{5} B(t)=i=0n(ni)Pi(1t)niti=(n0)P0(1t)nt0+(n1)P1(1t)n1t1++(nn1)Pn1(1t)1tn1+(nn)Pn(1t)0tn,t[0,1](5)

我们可以将式 ( 5 ) {(5)} (5)写为更简单的形式:
B ( t ) = ∑ i = 0 n P i b i , n ( t ) , t ∈ [ 0 , 1 ] (6) \mathbf{B}(t)=\sum_{i=0}^{n}\mathbf{P_ib_{i,n}}(t),t\in[0,1]\tag{6} B(t)=i=0nPibi,n(t),t[0,1](6)

其中, b i , n ( t ) \mathbf{b_{i,n}}(t) bi,n(t)为伯斯坦因基底多项式,具体可写为:
b i , n ( t ) = ( n i ) t i ( 1 − t ) n − i ,   i = 0 , . . . n (7) \mathbf{b_{i,n}}(t)=\left(

ni
\right) t^i(1-t)^{n-i}, \space i=0,...n \tag{7} bi,n(t)=(ni)ti(1t)ni, i=0,...n(7)

在式 ( 3 ) {(3)} (3)中,我们推导了二阶贝塞尔曲线的递归形式,对于n阶贝塞尔曲线,我们可以将其写为更一般的形式:

B ( t ) = ( 1 − t ) B P 0 P 1 . . . P n − 1 ( t ) + t B P 1 P 2 . . . P n ( t ) (8) \mathbf{B}(t)=(1-t)\mathbf{B_{P_0P_1...P_{n-1}}}(t)+t\mathbf{B_{P_1P_2...P_{n}}}(t) \tag{8} B(t)=(1t)BP0P1...Pn1(t)+tBP1P2...Pn(t)(8)

对于式 ( 6 ) {(6)} (6),我们将 P i \mathbf{P_i} Pi称作贝塞尔曲线的控制点,将相邻的 P i \mathbf{P_i} Pi用线段相连,起于 P 0 \mathbf{P_0} P0,终于 P n \mathbf{P_n} Pn,如此形成的多边形称作贝兹多边形,由n+1个控制点所形成的n阶贝塞尔曲线被这些控制点所形成的贝兹多边形包的凸包所包含。如图4所示:


图4 贝塞尔曲线包含于贝兹多边形所形成的凸包

1.4 贝塞尔曲线的性质

在上文中,我们给出了贝塞尔曲线的定义、控制点的定义、贝塞尔曲线的递推形式以及贝兹多边形的凸包性质。贝塞尔曲线所具备的性质与这些定义息息相关,这些性质也是贝塞尔曲线能够被用到机器人运动规划中的主要原因。

给定空间中的一条n阶贝塞尔曲线以及它所依赖的n+1个控制点,则这条贝塞尔曲线具备这些性质:

1.终点插值特性:贝塞尔曲线起始于第0个控制点,终止于最后一个控制点,并绝不会经过其余控制点(除非所有控制点共线)

2.凸包特性:贝塞尔曲线被完整地限制在控制点所形成的凸包内

3.Hodograph: 贝塞尔曲线对时间微分所得到的曲线仍然是贝塞尔曲线,且新曲线的控制点可以用原有曲线的控制点表示: c i ′ = n ( c i + 1 − c i ) c'_i=n(c_{i+1}-c_i) ci=n(ci+1ci)。其中, n n n为阶数, c i , c i + 1 c_i,c_{i+1} ci,ci+1为原始贝塞尔曲线的控制点, c i ′ c'_i ci为新曲线的控制点。

4.固定时间间隔特性: 一条贝塞尔曲线总是定义在固定时间间隔 t ∈ [ 0 , 1 ] t\in[0,1] t[0,1]上。

1.5 贝塞尔曲线在运动规划中的应用

贝塞尔曲线在自主机器人运动规划中的应用价值基于以上四点特性,体现在如下几个方面上:

1.基于终点差值特性,我们可以设计一条由多段贝塞尔曲线组成的时空运动轨迹,每一段轨迹的的起止点就是由A*等前端路径规划方法找到的路径的转折点。

2.基于凸包特性,我们可以将每一段轨迹的控制点代入我们的碰撞位置约束方程内。假设每一段贝塞尔轨迹都有已经建立好的安全走廊,我们只要让每个控制点的每一维都在安全走廊对应维度的范围之内。这样,我们就能保证控制点所组成的凸包在安全走廊范围之内,从而整段贝塞尔轨迹都包含于安全走廊之内,没有碰撞风险。而不用一个一个采样点的去检查是否碰撞。如图5所示:


图5 贝塞尔轨迹位于安全走廊之内

3.基于Hodograph性质:由于贝塞尔曲线的微分也是贝塞尔曲线,同样具备终点插值特性与凸包性质。因此,位置曲线的微分得到速度曲线,其再次微分得到加速度曲线,皆为贝塞尔曲线,我们能够重复利用凸包性质保证其满足机器人的动力学约束。

2. B-样条(B-spline)

2.1 B样条定义

B样条曲线是贝塞尔曲线的一种一般化。我们知道,给定n+1个控制点,则贝塞尔曲线为n次的。对于B样条曲线来说则不是这样。假设空间中有m+1个控制点,则n次贝塞尔曲线可以写为:

S ( t ) = ∑ i = 0 m P i b i , n ( t ) , t ∈ [ 0 , 1 ] (9) \mathbf{S}(t)=\sum_{i=0}^{m} \mathbf{P}_{i} b_{i, n}(t), t \in[0,1]\tag{9} S(t)=i=0mPibi,n(t),t[0,1](9)

其中 P i \mathbf{P_i} Pi为控制点, b i , n \mathbf{b_{i,n}} bi,n为n次B样条基函数。m为区间数,n为样条曲线的次数,n取值可为 [ 2 , m ] [2,m] [2,m],即当曲线有m+1个控制点时,B样条基函数的次数可为2次到m次。

2.2 B样条基函数的定义

通过2.1节B样条定义我们可知,b样条基函数是组成B样条曲线的关键。那么,B样条基函数是如何定义的呢,它与组成贝塞尔曲线的伯斯坦因基底多项式又有何异同呢?

我们可以通过 C o x − d e B o o r Cox-deBoor CoxdeBoor递归公式来定义m+1个n次B样条基:

b j , 0 ( t ) : = { 1 t j < t < t j + 1 0 … (10) b_{j, 0}(t):=\left\{

1tj<t<tj+10
\right.\tag{10} bj,0(t):={10tj<t<tj+1(10)
b j , n ( t ) : = t − t j t j + n − t j b j , n − 1 ( t ) + t j + n + 1 − t t j + n + 1 − t j + 1 b j + 1 , n − 1 ( t ) (11) b_{j, n}(t):=\frac{t-t_{j}}{t_{j+n}-t_{j}} b_{j, n-1}(t)+\frac{t_{j+n+1}-t}{t_{j+n+1}-t_{j+1}} b_{j+1, n-1}(t)\tag{11} bj,n(t):=tj+ntjttjbj,n1(t)+tj+n+1tj+1tj+n+1tbj+1,n1(t)(11)

从式10与式11我们可以知道,第 j j j个控制点所对应的n次 B样条基只与与 [ t j , t j + n + 1 ] [t_{j},t_{j+n+1}] [tj,tj+n+1]共n+1个参数区间有关,即 b j , n ( t ) b_{j,n}(t) bj,n(t)只在 [ t j , t j + n + 1 ] [t_{j},t_{j+n+1}] [tj,tj+n+1]不为0。

从相反的角度来说, b j , n ( t ) b_{j,n}(t) bj,n(t)的影响只存在于 [ t j , t j + n + 1 ] [t_{j},t_{j+n+1}] [tj,tj+n+1]这一段参数空间上。这与式(7)所定义的贝塞尔曲线中的伯斯坦因基地多项式是不同的,伯斯坦因及底多项式的每一项都会作用在整个参数空间上。

从上式我们也可以知道,若我们准备设计一条定义在参数空间 [ t s , t f ] [t_s,t_f] [ts,tf]上的有m个控制点的n次B样条曲线,则我们需要把 [ t s , t f ] [t_s,t_f] [ts,tf]划分为m+n个区间,即需要m+n+1个参数节点 [ t 0 , t 1 , . . . t m + n + 1 ] [t_0,t_1,...t_{m+n+1}] [t0,t1,...tm+n+1]。注意,在不同的博客和资料中,所需要的节点数或许会有表达上的差异,这是因为部分资料中将n作为B样条基函数的阶数=次数+1,因此所需的参数节点即变为:m+n,也就是:控制点个数+阶数;

2.3 B样条基函数的定义域

由于我们定义的B样条基函数是n次n+1阶的,因此,合法的定义域上应该要有n+1个基函数(亦即控制点)与其对应。虽然我们将参数轴划分为m+n+1节点,m+n个参数区间,但并不是所有区间上都定义有足够的基函数。
如图6所示,考虑一个有五5个顶点,4阶的B样条曲线,则其合法的定义域应该为: [ u 3 , u 5 ] [u_3,u_5] [u3,u5](定义有4个控制点)


图6 B样条曲线定义域示意图

更一般的,对于一个m个顶点,n次的B样条曲线,其合法定义区间为: [ u n , u m ] [u_n,u_m] [un,um]

例:一个具备14个顶点,6次的B样条曲线,则其节点数应为:14+6+1=21.假设节点的分布为均匀的,则节点序列为[0.05,0.1,…0.95,1]的合法定义区间为[0.3,0.7],一个符合要求的B样条曲线如图7所示:


图7 B样条曲线定义域示意图2

2.4 B样条基函数重要参数

在上一节中,我们已经对B样条,B样条基函数做出了完整的解释。在这里,我们重新梳理一下定义B样条曲线所需要的参数:

  1. 定义域 t ∈ [ t s , t f ] t\in[t_s,t_f] t[ts,tf],一般为时间轴
  2. 控制点 P i P_i Pi,共m个
  3. B样条基函数次数n
  4. 节点数量:m+n+1

2.4 B样条基函数性质:

B样条基函数有以下重要性质:

1. b i , n ( t ) b_{i,n}(t) bi,n(t)是在t上的n次多项式。

2.非负性:对于所有的 i , n , t i,n,t i,n,t b i , n ( t ) b_{i,n}(t) bi,n(t)为非负的。

3.局部支撑或局部作用: b i , n ( t ) b_{i,n}(t) bi,n(t)定义在 [ t I , t i + n + 1 ] [t_I,t_{i+n+1}] [tI,ti+n+1]上,并只对定义区间内的曲线施加影响。

4 权和性:所有非零的n次基函数在区间 [ t i , t i + 1 ] [t_i,t_{i+1}] [ti,ti+1]上的和为1

5 连续性: 在一个有重复度k的节点处,基函数 b i , n ( t ) b_{i,n}(t) bi,n(t) C n − k C^{n-k} Cnk连续的。

2.5 B样条曲线性质:

在得到B样条基函数性质后,B样条曲线的性质也就显而易见了:

1.具有m个控制点,n次的B样条曲线应具备m+n+1个节点,定义在 [ t n , t m ] [t_n,t_m] [tn,tm]上。

2.凸包性:样条曲线包含在控制折线所形成的凸包内。

3.局部作用:第i个控制点 P i P_i Pi只影响区间 [ t i , t i + n + 1 ] [t_i,t_{i+n+1}] [ti,ti+n+1]上的曲线。

4.Hodograph: B样条曲线的微分得到的是低一阶的B样条曲线。

5.在一个有重复度k的节点处,基函数 b i , n ( t ) b_{i,n}(t) bi,n(t) C n − k C^{n-k} Cnk连续的。

2.6 运动规划中B样条曲线与贝塞尔曲线的异同

相比较与贝塞尔曲线,B样条曲线同样具备贝塞尔曲线凸包、Hodograph等性质。不同的是,贝塞尔曲线天然具备高阶连续性,且不必定义在固定区间[0,1]上。这给轨迹表征带来了很大的方便。

另外一个优点是B样条曲线能够进行局部调整,控制点调整所带来的影响是局部的,不会影响整条曲线的变化。

3. 非均匀有理B样条(Non-Uniform Ratioinal B-splines)

3.1 非均匀

显然地,节点间隔不均匀的B样条曲线就是非均匀B样条曲线(待补充)

3.2 有理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/675433
推荐阅读
相关标签
  

闽ICP备14008679号