欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

无人车路径算法----曲线路径I

时间:2023-05-26

本篇博客主要介绍一些路径规划中常用的几何曲线,包括贝塞尔曲线(Bezier Curve),样条曲线(Spline Curve)


1、贝塞尔曲线(Bezier Curve) 1.1 定义

贝塞尔曲线最初是用于汽车主体的设计,后被广泛应用于图形设计和路径规划中。
贝塞尔曲线由首尾起始点以及中间的控制点相互作用生成,其中起始点是曲线的必经点又称为锚点,控制点的作用是用来改变曲线的曲率及形状,n个点对应 n-1阶贝塞尔曲线。

1.2 伯恩斯坦多项式(Bernstein Polynomial)

伯恩斯坦多项式(Bernstein polynomial)逼近连续函数的一系列多项式, 其公式的表达形式与bezier曲线的表达形式相辅相成,因此常用来作为bezier曲线的计算公式。

1.3 公式推导

变量物理意义

B ( t ) B(t) B(t)表示 t t t时刻下的点的坐标 P 0 P_0 P0​表示起点, P n P_n Pn​表示终点, P i P_i Pi​为控制点

值得注意的是,bezier的相关公式推导是具有强烈的递归性质的, 通过下面的公式多阶公式推导可以看出此特性

一阶贝塞尔曲线
一阶贝塞尔曲线其实就是一条线段,动图如下所示:

由此开始推导公式:
首先,根据向量计算可得,
B ( t ) = P 0 + ( P 1 − P 0 ) ∗ t ,   t ∈ [ 0 , 1 ] B(t) = P_0 + (P_1 - P_0) * t, t in [0, 1] B(t)=P0​+(P1​−P0​)∗t, t∈[0,1]
变形后可得,
B ( t ) = ( 1 − t ) P 0 + t P 1 ,   t ∈ [ 0 , 1 ] B(t) = (1 - t)P_0 + t P_1, t in [0, 1] B(t)=(1−t)P0​+tP1​, t∈[0,1]
上述公式描述了一个连续点构成的直线线段

二阶贝塞尔曲线
二阶贝塞尔曲线是一个抛物线,动图如下图所示:

其中, P 0 ′ P_0' P0′​表示图中绿色直线的左端点,即线段 P 0 P 1 → overrightarrow{ P_0 P_1} P0​P1​ ​上的点;
P 1 ′ P_1' P1′​表示图中绿色直线的右端点,即线段 P 1 P 2 → overrightarrow{ P_1 P_2} P1​P2​ ​上的点
利用一阶贝塞尔曲线公式可得:
P 0 ′ = ( 1 − t ) P 0 + t P 1 P_0' = (1-t)P_0 + tP_1 P0′​=(1−t)P0​+tP1​
P 1 ′ = ( 1 − t ) P 1 + t P 2 P_1' = (1-t)P_1 + tP_2 P1′​=(1−t)P1​+tP2​
$
begin{align*}
B(t) &= P_0’ + (P_1’ - P_0’)t
&= (1-t)P_0’ + tP_1’
&= (1-t)^2 P_0 + 2(1-t)t P_1 + t^2 P_2 , t in [0, 1]
end{align
}
$

三阶贝塞尔曲线
三阶贝塞尔曲线是同样是可以利用上述递归性质进行推演。二阶贝塞尔是通过将控制点之间再采点的方式实现一阶降阶,三阶贝塞尔曲线的构造则是通过将控制点之间采点先降阶为二阶贝塞尔再进一步降阶为一阶的过程。

公式为:
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 ] B(t) = (1 - t)^3 P_0 + 3 P_1 t (1-t)^2 + 3P_2 t^2(1-t) + P_3t^3, t in [0, 1] B(t)=(1−t)3P0​+3P1​t(1−t)2+3P2​t2(1−t)+P3​t3, t∈[0,1]

由以上三阶贝塞尔的公式推导可得出结论,高阶的贝塞尔曲线也可以通过不断递归直至一阶得出最终公式。
P i k = { P i k = 0 ( 1 − t ) P i k − 1 + t P i + 1 k − 1 k = 1 , 2 , 3... , n ;   i = 0 , 1 , . . . , n − k P_i^k=left{ begin{aligned} P_i && k = 0 \ (1-t)P_i^{k-1} + tP_{i+1}^{k-1} && k=1,2,3...,n; i = 0, 1, ..., n-k end{aligned} right、 Pik​={Pi​(1−t)Pik−1​+tPi+1k−1​​​k=0k=1,2,3...,n; i=0,1,...,n−k​

1.4 伯恩斯坦公式

伯恩斯坦多项式(Bernstein polynomial)逼近连续函数的一系列多项式, 其公式的表达形式与bezier曲线的表达形式相辅相成,因此常用来作为bezier曲线的计算公式。
B n ( t ) = ∑ i = 0 n ( B i , n ( t ) ∗ P i ) = ∑ i = 0 n C i k t i ( 1 − t ) n − i ∗ P i begin{aligned} B_n(t) &= sum_{i = 0} ^n (B_{i,n}(t) * P_i) \ &= sum_{i = 0}^nC_i^kt^i (1-t)^{n-i} * P_i end{aligned} Bn​(t)​=i=0∑n​(Bi,n​(t)∗Pi​)=i=0∑n​Cik​ti(1−t)n−i∗Pi​​

譬如上述的三阶贝塞尔曲线系数则可以表示为:
B 0 , 3 ( t ) = ( 1 − t ) 3 ; B 1 , 3 ( t ) = 3 t ( 1 − t ) 2 ; B 2 , 3 ( t ) = 3 t 2 ( 1 − t ) ; B 3 , 3 ( t ) = t 3 ; begin{aligned} B_{0,3}(t) &= (1-t)^3; \ B_{1,3}(t) &= 3t(1-t)^2; \ B_{2,3}(t) &= 3t^2(1-t); \ B_{3,3}(t) &= t^3; end{aligned} B0,3​(t)B1,3​(t)B2,3​(t)B3,3​(t)​=(1−t)3;=3t(1−t)2;=3t2(1−t);=t3;​

1.5 贝塞尔曲线的一些特性

这里主要介绍一些路径规划中会用到的特性:

贝塞尔曲线始终包含在所有控制点的最下凸包中。因此我们常可以通过规定控制点的最小凸包来限制贝塞尔曲线的范围贝塞尔曲线在t=0 以及t =1时的导数与此处的直线段导数相同。此性质可以利用在贝塞尔曲线的拼接上,当拼接点为三点一线的中间点时,即可以保证两端贝塞尔曲线的导数连续。

1.6 曲率连续与相切连续

曲线的连续定义与种类

位置连续:连曲线的端点相接触切线连续:两曲线相接部分的斜率相同曲率连续:两曲线的接触点的曲率相同,且具有相同的方向
连续性的介次:曲率连续>相切连续>位置连续,阶次高的连续性取决于阶次低的连续性
没有位置连续,则不可能切线连续,没有切线连续,则没有曲率连续。位置连续是零阶次的连续,一般称为G0连续或c0连续,切线连续是一阶连续,称为G1连续或C1连续,曲率连续是二阶连续,一般称为 G2或C2连续


参考链接:
https://blog.csdn.net/tianhai110/article/details/2203572

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。