Frenet坐标系在无人驾驶中的应用
待整理
本文从毕设中整理,尚未整理完成。
Frenet坐标系介绍
Frenet–Serret公式用于描述粒子在三维欧氏空间内沿一条连续可微曲线的运动学特征
T
⃗
\vec T
T称为切向量(Tangent),表示沿曲线运动方向的单位向量;
N
⃗
\vec N
N称为法向量(Normal),表示当前曲线运动平面内垂直于的单位向量;
B
⃗
\vec B
B称为当前运动平面的副法向量(Binormal),表示同时垂直于和的单位向量。令
r
(
t
)
r(t)
r(t)为这个欧式空间中随着时间
t
t
t改变的非退化曲线,可令
s
(
t
)
s(t)
s(t)为这条非退化曲线在时间t的弧长。
退化曲线即:两条相交直线,当一个平面过圆锥的顶点截圆锥面得到曲线,其方程为(A1x+B1y+C1) *(A2x+B2y+C2) = 0
形似二次曲线,实际为两条直线
s ( t ) = ∫ 0 t ∣ ∣ γ ′ ( σ ) ∣ ∣ d σ s(t) = \int_0^t ||\gamma'(\sigma)|| d\sigma s(t)=∫0t∣∣γ′(σ)∣∣dσ
t t t还可以表示为 s s s的函数,也即是存在 t ( s ) t(s) t(s),从而有 r ⃗ ( s ) = r ⃗ ( t ( s ) ) \vec r(s)=\vec r(t(s)) r(s)=r(t(s)),对于这条将利用弧长表达的曲线函数,可以定义其切向量 T ⃗ \vec T T、法向量 N ⃗ \vec N N、副法向量 B ⃗ \vec B B如下:
假设存在: y ( x ) 、 z ( x ) y(x) 、z(x) y(x)、z(x)两个函数
那么存在:用z表示y的函数 y ( z ) = y ( x ( z ) ) = y ( z ) y(z) = y(x(z)) = y(z) y(z)=y(x(z))=y(z)
注: y = 3 ∗ x 、 x ( y ) = 1 / 3 ∗ y y = 3*x 、 x(y) = 1/3 * y y=3∗x、x(y)=1/3∗y z = 2 ∗ x 、 x ( z ) = 1 / 2 ∗ z \qquad z = 2*x 、x(z) = 1/2 * z z=2∗x、x(z)=1/2∗z
y ( z ) = y ( x ( z ) ) = 3 ∗ x ( z ) = 3 ∗ 1 / 2 ∗ z \qquad y(z) = y(x(z)) = 3 * x(z) = 3 * 1/2 * z y(z)=y(x(z))=3∗x(z)=3∗1/2∗z
T ⃗ \vec T T d r ⃗ d s ∣ ∣ d r ⃗ d s ∣ ∣ \frac{\frac{d\vec r}{ds}}{||\frac{d\vec r}{ds}||} ∣∣dsdr∣∣dsdr d r ⃗ d s \qquad \frac{d\vec r}{ds} dsdr 除以自己的范数(长度),得到一个归一化的向量
N ⃗ \vec N N d T ⃗ d s ∣ ∣ d T ⃗ d s ∣ ∣ \frac{\frac{d\vec T}{ds}}{||\frac{d\vec T}{ds}||} ∣∣dsdT∣∣dsdT
B ⃗ = T ⃗ × N ⃗ \vec B = \vec T ×\vec N B=T×N
根据公式可知:
d
T
⃗
d
s
=
κ
N
⃗
\frac{d\vec T}{ds}=\kappa \vec N
dsdT=κN
d N ⃗ d s = − κ T ⃗ + τ B ⃗ \frac{d\vec N}{ds}=-\kappa \vec T+\tau \vec B dsdN=−κT+τB
d B ⃗ d s = − τ N ⃗ \frac{d\vec B}{ds}=-\tau \vec N dsdB=−τN
其中,
κ
、
τ
\kappa、\tau
κ、τ为
r
⃗
(
t
(
s
)
)
\vec r(t(s))
r(t(s))曲线的曲率和挠率。其矩阵表达式如下所示:
[
T
⃗
′
N
⃗
′
B
⃗
′
]
=
\begin{bmatrix} \vec T' \\ \vec N' \\ \vec B' \end{bmatrix}=
⎣⎡T′N′B′⎦⎤=
[
0
κ
0
−
κ
0
τ
0
τ
0
]
\begin{bmatrix} 0 &\kappa&0 \\ -\kappa&0&\tau \\ 0&\tau &0 \end{bmatrix}
⎣⎡0−κ0κ0τ0τ0⎦⎤
[
T
⃗
N
⃗
B
⃗
]
\begin{bmatrix}\vec T \\ \vec N\\ \vec B\end{bmatrix}
⎣⎡TNB⎦⎤
frenet坐标在无人驾驶中的用途
对于当前的无人驾驶研究而言,通常不会单独将高度作为规划因素,因此可以将车辆运动曲线投影到同一平面内,即令
τ
\tau
τ=0,这样上式就可以简化为:
[
T
⃗
′
N
⃗
′
]
\begin{bmatrix}\vec T'\\\vec N'\end{bmatrix}
[T′N′]=
[
0
κ
−
κ
0
]
\begin{bmatrix}0&\kappa \\ -\kappa &0\end{bmatrix}
[0−κκ0]
[
T
⃗
N
⃗
]
\begin{bmatrix}\vec T\\ \vec N\end{bmatrix}
[TN]
假定
r
⃗
(
t
(
s
)
)
\vec r(t(s))
r(t(s))是参考线在弧长
s
s
s处的位置,
x
x
x是当前车辆轨迹点,该向量一般采用UTM坐标表示,
x
⃗
=
[
x
,
y
]
T
\vec x = [x,y]^T
x=[x,y]T,在Frenet坐标系下,一般采用弧长s和横向偏移l描述车辆当前位置对其描述,即
x
⃗
=
x
⃗
(
s
,
l
)
\vec x =\vec x(s,l)
x=x(s,l)。
θ r 、 T ⃗ r 、 N ⃗ r \theta_r、\vec T_r、\vec N_r θr、Tr、Nr分别为规划轨迹的方位角、单位切向角和单位法向角, θ r 、 T ⃗ r 、 N ⃗ r \theta_r、\vec T_r、\vec N_r θr、Tr、Nr分别为当前轨迹的方位角、单位切向角和单位法向角。由正交定义可得:
T ⃗ r = [ cos θ r sin θ r ] \vec T _r=\begin{bmatrix}\cos\theta_r\\\sin\theta_r\end{bmatrix} Tr=[cosθrsinθr]
N ⃗ r = [ − sin θ r cos θ r ] \vec N_r =\begin{bmatrix}-\sin\theta_r&\cos\theta_r\end{bmatrix} Nr=[−sinθrcosθr]
T ⃗ x = [ cos θ x sin θ x ] \vec T_x =\begin{bmatrix}\cos\theta_x\\\sin\theta_x\end{bmatrix} Tx=[cosθxsinθx]
N ⃗ x = [ − sin θ x cos θ x ] \vec N_x =\begin{bmatrix}-\sin\theta_x&\cos\theta_x\end{bmatrix} Nx=[−sinθxcosθx]
因为正交,所以可知: T ⃗ r × N ⃗ r \vec T_r×\vec N_r Tr×Nr=0、 T ⃗ x × N ⃗ x \vec T_x×\vec N_x Tx×Nx=0
通过对平面向量的加减可得:
x
⃗
(
s
,
l
)
=
r
⃗
(
s
)
+
l
(
s
)
N
⃗
r
(
s
)
\vec x(s,l)=\vec r(s)+l(s)\vec N_r(s)
x(s,l)=r(s)+l(s)Nr(s)
根据公式得:
l
N
⃗
T
N
⃗
=
N
⃗
T
(
x
⃗
−
r
⃗
)
l\vec N^T \vec N=\vec N^T(\vec x-\vec r)
lNTN=NT(x−r)
根据外积的反称性可知:
l
=
[
x
⃗
r
⃗
]
N
⃗
r
l=\begin{bmatrix}\vec x\\\vec r\end{bmatrix}\vec N_r
l=[xr]Nr
假设有任意
∀
a
\forall a
∀a:
a
˙
=
\dot{a}=
a˙=
d
(
a
)
d
t
\frac{d(a)}{dt}
dtd(a)
a ¨ = \ddot{a}= a¨= d ( a ˙ ) d t \frac{d(\dot{a})}{dt} dtd(a˙)
a ′ = a'= a′= d ( a ) d s \frac{d(a)}{ds} dsd(a)
a ′ ′ = a''= a′′= d ( a ′ ) d s \frac{d(a')}{ds} dsd(a′)
在上式中,俺们规定,
a
˙
\dot{a}
a˙表示
a
a
a对时间
t
t
t的一阶求导,
a
¨
\ddot{a}
a¨表示
a
a
a对时间
t
t
t的一阶求导,
a
′
a'
a′表示
a
a
a对弧长
s
s
s的一阶求导,
a
′
′
a''
a′′表示
a
a
a对弧长
s
s
s的二阶求导。
则有:
l
˙
=
[
x
⃗
˙
−
r
⃗
˙
]
T
N
⃗
r
−
[
x
⃗
−
r
⃗
]
T
N
r
⃗
˙
\dot{l}=\begin{bmatrix}\dot{\vec x} -\dot{\vec r}\end{bmatrix}^T\vec N_r-\begin{bmatrix}\vec x-\vec r\end{bmatrix}^T \dot{\vec {N_r}}
l˙=[x˙−r˙]TNr−[x−r]TNr˙
由单位切向量和单位法向量的定义可得:
x
⃗
˙
=
\dot{\vec x}=
x˙=
d
∣
∣
x
⃗
∣
∣
d
t
\frac {d||\vec x||}{dt}
dtd∣∣x∣∣
T
⃗
x
=
v
x
T
⃗
x
\vec T_x=v_x\vec T_x
Tx=vxTx
r ⃗ ˙ = \dot{\vec r}= r˙= d ∣ ∣ r ⃗ ∣ ∣ d t \frac {d||\vec r||}{dt} dtd∣∣r∣∣ T ⃗ r = s ˙ T ⃗ \vec T_r=\dot{s}\vec T Tr=s˙T
将公式互相带入,结合平面几何知识可知:
l
˙
=
v
x
sin
Δ
θ
\dot{l}=v_x\sin\Delta \theta
l˙=vxsinΔθ
其中
Δ
θ
\Delta\theta
Δθ为
θ
x
−
θ
r
\theta_x-\theta_r
θx−θr。
同样地可知:
x
⃗
˙
=
\dot{\vec x}=
x˙=
d
(
r
⃗
+
l
N
⃗
r
)
d
t
\frac{d(\vec r+l\vec N_r)}{dt}
dtd(r+lNr)
=
r
⃗
˙
+
l
˙
N
⃗
r
+
l
N
⃗
r
˙
=\dot{\vec r}+\dot{l}\vec N_r+l\dot{\vec N_r}
=r˙+l˙Nr+lNr˙
即是:
v x = ∣ ∣ x ⃗ ˙ ∣ ∣ = v_x=||\dot{\vec x}||= vx=∣∣x˙∣∣= [ s ˙ ( 1 − κ t ) l ] 2 + l ˙ 2 \sqrt{[\dot{s}(1-\kappa_t)l]^2+\dot{l}^2} [s˙(1−κt)l]2+l˙2
最终可以将
l
′
l'
l′和
l
′
′
l''
l′′表示如下:
l
′
=
l'=
l′=
v
x
s
˙
\frac{v_x}{\dot{s}}
s˙vx
sin
Δ
θ
\sin\Delta\theta
sinΔθ
(
1
−
κ
r
l
)
tan
Δ
θ
(1-\kappa_rl)\tan\Delta\theta
(1−κrl)tanΔθ
l ′ ′ = l''= l′′= − ( κ r ′ l + κ r l ′ ) tan Δ θ + -(\kappa_r'l+\kappa_rl')\tan\Delta\theta+ −(κr′l+κrl′)tanΔθ+ ( 1 − κ r l ) cos 2 Δ θ \frac{(1-\kappa_rl)}{\cos^2\Delta\theta} cos2Δθ(1−κrl) ( κ x (\kappa_x (κx 1 − κ r l cos Δ θ \frac{1-\kappa_rl}{\cos\Delta\theta} cosΔθ1−κrl − κ r ) -\kappa_r) −κr)