本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。
此专栏是关于《自动驾驶汽车决策与控制》书籍的笔记.
假设汽车只能向前行驶,Dubins曲线是在满足曲率约束和规定的始端和末端的切线方向的条件下,连接两个二维平面(即X-Y平面)的最短路径;如果汽车也可以反向行驶,则路径为Reeds-Shepp曲线;
对于汽车,系统的简单运动学模型为:
{
x
˙
=
v
cos
θ
y
˙
=
v
sin
θ
θ
˙
=
u
(1)
{˙x=vcosθ˙y=vsinθ˙θ=u
其中:
(
x
,
y
)
(x,y)
(x,y)是汽车的位置,
θ
\theta
θ是航向,汽车以恒定速度
v
v
v移动,转弯速度控制
u
u
u是有界的;
最佳路径类型可以用与汽车驾驶行为相似的"右转( R ),左转(L),直线(S)"描述来表达;
最佳路径总是六种类型之一:RSR,RSL,LSR,LSL,RLR,LRL;

实例说明: 考虑对于某些给定的初始位置和最终位置及切线,最佳路径显示为RSR类型,表明汽车行进顺序为:右转弧( R ),直线段(S),右转弧( R );这个序列形成最短的曲线,将起始点
A
A
A连接到终点
B
B
B,并在每个端点处曲线满足切线条件,且该处曲率不超过给定值大小;

代表了一类曲率可以用弧长(对应轨迹中的 s s s轴)的多项式函数来表示的曲线簇;
使用三阶(Cubic)或五阶(Quintic)多项式螺旋线,其曲率 κ \kappa κ和轨迹弧长 s s s的关系 κ ( s ) \kappa(s) κ(s)的关系如下:
基于这种使用三阶(五阶)螺旋线连接的轨迹,其参数可以通过梯度下降(Gradient Descent)方法快速有效进行搜索;
以三阶多项式为例:考虑从汽车初始姿态
q
i
n
i
t
=
(
x
1
,
y
1
,
θ
1
,
κ
1
)
q_{init}=(x_1,y_1,\theta_1,\kappa_1)
qinit=(x1,y1,θ1,κ1)到目标姿态
q
g
o
a
l
=
(
x
G
,
y
G
,
θ
G
,
κ
G
)
q_{goal}=(x_G,y_G,\theta_G,\kappa_G)
qgoal=(xG,yG,θG,κG),且具有连续曲率的三阶螺旋线;在初始状态时,考虑曲率的一阶导数和二阶导数均需要满足初始状态的限制,可得:
κ
0
=
κ
1
κ
1
=
d
κ
(
0
)
/
d
s
κ
2
=
d
2
κ
(
0
)
/
d
s
2
(2)
κ0=κ1κ1=dκ(0)/dsκ2=d2κ(0)/ds2
一些常用曲线构造:
Bezier曲线构造
一段
n
n
n次Bezier曲线的表达式为:
P
(
u
)
=
∑
i
=
0
n
B
i
n
(
u
)
P
i
,
u
∈
[
0
,
1
]
(3)
P(u)=\sum_{i=0}^nB_{i}^n(u)P_i,u\in[0,1]\tag{3}
P(u)=i=0∑nBin(u)Pi,u∈[0,1](3)
B i n ( u ) = n ! i ! ( n − i ) ! u i ( 1 − u ) n − i , i ∈ { 0 , 1 , … , n } (4) B_{i}^n(u)=\frac{n!}{i!(n-i)!}u^i(1-u)^{n-i},i\in\{0,1,\dots,n\}\tag{4} Bin(u)=i!(n−i)!n!ui(1−u)n−i,i∈{0,1,…,n}(4)
其中: u u u是位置参数, P i P_i Pi是Bezier曲线的控制点;
Bezier曲线的控制点描述了曲线的大体走向,通过控制曲线的控制点就可以控制曲线的形状;所有控制点组成的多边形称为曲线的特征多边形;
在规划汽车路径时,常用的几何性质:
端点性质
曲线起始于第一个控制点,终止于最后一个控制点;
P
(
0
)
=
P
0
,
P
(
1
)
=
P
n
(5)
P(0)=P_0,P(1)=P_n\tag{5}
P(0)=P0,P(1)=Pn(5)
起点处和终点处的Bezier曲线分别相切于特征多边形的第一条边和最后一条边;
T
(
0
)
=
n
(
P
1
−
P
0
)
,
T
(
1
)
=
n
(
P
n
−
P
n
−
1
)
(6)
T(0)=n(P_1-P_0),T(1)=n(P_n-P_{n-1})\tag{6}
T(0)=n(P1−P0),T(1)=n(Pn−Pn−1)(6)
Bezier曲线起点处和终点处的二阶导数分别只与前3个控制点和最后3个控制点有关;
S
(
0
)
=
n
(
n
−
1
)
(
P
2
−
2
P
1
+
P
0
)
,
S
(
1
)
=
n
(
n
−
1
)
(
P
n
−
2
P
n
−
1
+
P
n
−
2
)
(7)
S(0)=n(n-1)(P_2-2P_1+P_0),S(1)=n(n-1)(P_n-2P_{n-1}+P_{n-2})\tag{7}
S(0)=n(n−1)(P2−2P1+P0),S(1)=n(n−1)(Pn−2Pn−1+Pn−2)(7)
凸包性
Bezier曲线 P ( u ) P(u) P(u)是各控制点 P i P_i Pi的凸线性组合,曲线落在控制点构成的凸包中;当各控制点构成的特征多边形是凸时,整条Bezier曲线也是凸的,即曲线没有反曲点(拐点);
几何不变性
若满足位置连续约束条件,则需要两个控制点,即曲线的第1个和最后1个控制点;若满足方向连续条件,则需要4个控制点,前2个和最后两个控制点;若满足曲率连续约束条件,则需要6个控制点,前3个和最后3个控制点;
S
(
0
)
=
n
(
n
−
1
)
(
P
2
−
2
P
1
+
P
0
)
c
(
u
)
=
[
P
x
′
(
u
)
P
y
′
′
(
u
)
−
P
x
′
′
(
u
)
P
y
′
(
u
)
/
∣
∣
P
′
(
u
)
∣
∣
3
]
(8)
S(0)=n(n-1)(P_2-2P_1+P_0)c(u)=[P'_x(u)P''_y(u)-P''_x(u)P'_y(u)/||P'(u)||^3]\tag{8}
S(0)=n(n−1)(P2−2P1+P0)c(u)=[Px′(u)Py′′(u)−Px′′(u)Py′(u)/∣∣P′(u)∣∣3](8)
若要实现Bezier曲线对两线段的光滑过渡,Bezier曲线至少要有6个控制点,由于
n
n
n次Bezier曲线具有
n
+
1
n+1
n+1个控制点,则Bezier曲线的次数至少为5次;
B样条曲线概述
设有控制顶点
P
0
,
P
1
,
P
2
,
…
,
P
n
P_0,P_1,P_2,\dots,P_n
P0,P1,P2,…,Pn,则
k
k
k阶
(
k
−
1
)
(k-1)
(k−1)次B样条曲线的数学表达式为:
P
(
t
)
=
∑
i
=
0
n
N
i
,
k
(
t
)
P
i
(9)
P(t)=\sum_{i=0}^nN_{i,k}(t)P_i\tag{9}
P(t)=i=0∑nNi,k(t)Pi(9)
其中:
N
i
,
k
(
t
)
N_{i,k}(t)
Ni,k(t)是B样条基函数,
N
i
,
k
(
t
)
N_{i,k}(t)
Ni,k(t)中每一部分被称为B样条;
B样条基函数是一个 k k k阶 k − 1 k-1 k−1次分段多项式,也被称为 k k k阶 k − 1 k-1 k−1次多项式样条;参数 t t t是一组被称为结点矢量的非递减序列;
德布尔-考克斯递推定义:
N
i
,
1
(
t
)
=
{
1
,
t
i
≤
t
≤
t
i
+
1
,
0
,
t
≤
t
i
,
t
≥
t
i
+
1
,
k
=
1
(10)
N_{i,1}(t)= {1,ti≤t≤ti+1,0,t≤ti,t≥ti+1
N i , k = t − t i t i − k − 1 − t i N i , k − 1 ( t ) + t i + k − t t i + k − t i + 1 N i + 1 , k − 1 ( t ) , k ≥ 2 (11) N_{i,k}=\frac{t-t_i}{t_{i-k-1}-t_i}N_{i,k-1}(t)+\frac{t_{i+k}-t}{t_{i+k}-t_{i+1}}N_{i+1,k-1}(t),k≥2\tag{11} Ni,k=ti−k−1−tit−tiNi,k−1(t)+ti+k−ti+1ti+k−tNi+1,k−1(t),k≥2(11)
约定: 0 0 = 0 \frac{0}{0}=0 00=0;
该递推公式表明:欲确定第 i i i个 k k k阶B样条 N i , k ( t ) N_{i,k}(t) Ni,k(t),需要用 t i , t i + 1 , … , t i + k t_i,t_{i+1},\dots,t_{i+k} ti,ti+1,…,ti+k共 k + 1 k+1 k+1个结点;称区间 [ t i , t i + k ] [t_i,t_{i+k}] [ti,ti+k]为 N i , k ( t ) N_{i,k}(t) Ni,k(t)的支撑区间;
曲线方程中, n + 1 n+1 n+1个控制顶点 P i ( i = 0 , 1 , 2 , … , n ) P_i(i=0,1,2,\dots,n) Pi(i=0,1,2,…,n)要用到 n + 1 n+1 n+1个 k k k阶B样条基 N i , k ( t ) N_{i,k}(t) Ni,k(t);支撑区间的并集定义了这一组B样条基的结点矢量 T = [ t 0 , t 1 , … , t n + k ] T=[t_0,t_1,\dots,t_{n+k}] T=[t0,t1,…,tn+k];
假设控制多边形的顶点数为 n n n,阶数为 k k k(次数为 k − 1 k-1 k−1),则结点矢量是 T = [ t 0 , t 1 , … , t n + k ] T=[t_0,t_1,\dots,t_{n+k}] T=[t0,t1,…,tn+k];B样条曲线按结点矢量中结点的分布情况,划分成4中类型:
B样条曲线具有如下性质: