赞
踩
首先考虑这样一条曲线方程:
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+(P1−P0)t=(1−t)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所示:
相应的,二阶贝塞尔曲线可以看成由空间中的三点
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)=(1−t)2P0+2t(1−t)P1+t2P2,t∈[0,1](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)=(1−t)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)=(1−t)3P0+3P1t(1−t)2+3P2t2(1−t)+P3t3,t∈[0,1](4)
至此,我们可以给出贝塞尔曲线的一般形式。假设空间中一条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(
我们可以将式
(
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=0∑nPibi,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(
在式 ( 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)=(1−t)BP0P1...Pn−1(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所示:
在上文中,我们给出了贝塞尔曲线的定义、控制点的定义、贝塞尔曲线的递推形式以及贝兹多边形的凸包性质。贝塞尔曲线所具备的性质与这些定义息息相关,这些性质也是贝塞尔曲线能够被用到机器人运动规划中的主要原因。
给定空间中的一条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+1−ci)。其中, 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.基于终点差值特性,我们可以设计一条由多段贝塞尔曲线组成的时空运动轨迹,每一段轨迹的的起止点就是由A*等前端路径规划方法找到的路径的转折点。
2.基于凸包特性,我们可以将每一段轨迹的控制点代入我们的碰撞位置约束方程内。假设每一段贝塞尔轨迹都有已经建立好的安全走廊,我们只要让每个控制点的每一维都在安全走廊对应维度的范围之内。这样,我们就能保证控制点所组成的凸包在安全走廊范围之内,从而整段贝塞尔轨迹都包含于安全走廊之内,没有碰撞风险。而不用一个一个采样点的去检查是否碰撞。如图5所示:
3.基于Hodograph性质:由于贝塞尔曲线的微分也是贝塞尔曲线,同样具备终点插值特性与凸包性质。因此,位置曲线的微分得到速度曲线,其再次微分得到加速度曲线,皆为贝塞尔曲线,我们能够重复利用凸包性质保证其满足机器人的动力学约束。
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=0∑mPibi,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.1节B样条定义我们可知,b样条基函数是组成B样条曲线的关键。那么,B样条基函数是如何定义的呢,它与组成贝塞尔曲线的伯斯坦因基底多项式又有何异同呢?
我们可以通过 C o x − d e B o o r Cox-deBoor Cox−deBoor递归公式来定义m+1个n次B样条基:
b
j
,
0
(
t
)
:
=
{
1
t
j
<
t
<
t
j
+
1
0
…
(10)
b_{j, 0}(t):=\left\{
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+n−tjt−tjbj,n−1(t)+tj+n+1−tj+1tj+n+1−tbj+1,n−1(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,也就是:控制点个数+阶数;
由于我们定义的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个控制点)
更一般的,对于一个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所示:
在上一节中,我们已经对B样条,B样条基函数做出了完整的解释。在这里,我们重新梳理一下定义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} Cn−k连续的。
在得到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} Cn−k连续的。
相比较与贝塞尔曲线,B样条曲线同样具备贝塞尔曲线凸包、Hodograph等性质。不同的是,贝塞尔曲线天然具备高阶连续性,且不必定义在固定区间[0,1]上。这给轨迹表征带来了很大的方便。
另外一个优点是B样条曲线能够进行局部调整,控制点调整所带来的影响是局部的,不会影响整条曲线的变化。
显然地,节点间隔不均匀的B样条曲线就是非均匀B样条曲线(待补充)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。