Frenet坐标系与Cartesian坐标系互转(一):公式推导

Frenet坐标系在无人驾驶领域被普遍使用,特别是在城市、高速等道路交通环境下无人驾驶的路径规划系统中。Frenet坐标系使用道路的中心线作为Base frame,使用参考线的切线向量和法线向量建立坐标系。相比笛卡尔坐标系,Frenet坐标系简化了路径规划问题。网上关于Frenet坐标系的博客或资料很多,此处不再赘述。本文先给出简单的转换公式推导过程,然后给出三对Frenet坐标系与Cartesian坐标系互转的python代码与使用示例方便自己查阅使用。详细推导参见博客Apollo项目坐标系研究。note:下图中Frenet的q坐标轴也可以用d或l表示。
Frenet坐标系与Cartesian坐标系互转(一):公式推导_第1张图片

文章目录

    • 一、 Frenet坐标系与Cartesian坐标系的转换公式简单推导
      • 1.1 Frenet公式
      • 1.2 简单推导过程
        • 已知 x ⃗ = [ x x , y x ] \vec{x}=[x_{x}, y_{x}] x =[xx,yx]推导 [ s , l ] [s, l] [s,l]
        • 已知 x ⃗ = [ x x , y x ] , θ x , v x \vec{x}=[x_{x}, y_{x}],\theta_{x},v_x x =[xx,yx],θx,vx推导 [ s , l , s ˙ , l ˙ , l ′ ] [s, l,\dot{s},\dot{l},l'] [s,l,s˙,l˙,l]
        • 已知 x ⃗ = [ x x , y x ] , θ x , v x , a x , k x \vec{x}=[x_{x}, y_{x}],\theta_{x},v_x,a_x,k_{x} x =[xx,yx],θx,vx,ax,kx推导 [ s , l , s ˙ , l ′ , s ¨ , l ′ ′ ] [s, l,\dot{s},l',\ddot{s},l''] [s,l,s˙,l,s¨,l′′]
        • 综合以上可得转换公式
        • cartesian转Frenet一般计算步骤

一、 Frenet坐标系与Cartesian坐标系的转换公式简单推导

1.1 Frenet公式

下图显示了一条3D空间中一条连续可微的曲线K,P为曲线K上的一个点,黄色平面为曲线K在点P处的运动平面。 T ⃗ \vec{T} T 为曲线K在点P处的切向量, N ⃗ \vec{N} N 为K在P处的法向量( N ⃗ \vec{N} N T ⃗ \vec{T} T 在同一运动平面), B ⃗ \vec{B} B 为曲线K在P处的副法向量( B ⃗ \vec{B} B 垂直于运动平面)。
Frenet坐标系与Cartesian坐标系互转(一):公式推导_第2张图片
有Frenet公式:
{ d T ⃗ d s = k N ⃗ d N ⃗ d s = − k T ⃗ + τ B ⃗ d B ⃗ d s = − τ N ⃗ \left\{\begin{matrix} \frac{d\vec{T}}{ds}= & k\vec{N} \\ \frac{d\vec{N}}{ds}= & -k\vec{T}+\tau\vec{B} \\ \frac{d\vec{B}}{ds}= & -\tau\vec{N} \end{matrix}\right. dsdT =dsdN =dsdB =kN kT +τB τN

其中, d d s \frac{d}{ds} dsd表示某一方向向量对弧长 s s s的导数, k k k为曲率( curvature), τ \tau τ为挠率( torsion)。

  • 曲率:曲线不能形成一条直线的度量值,曲率越趋于0,则曲线越趋近于直线;
  • 挠率:是曲线不能形成在同一平面内运动曲线的度量值,挠率越趋于0,则曲线越趋近于在同一平面内运动。

在大地表面,局部路面可看作一个平面,对于无人驾驶路径规划应用,挠率可设定为0。从而Frenet公式进一步简化为:
{ d T ⃗ d s = k N ⃗ d N ⃗ d s = − k T ⃗ (1) \left\{\begin{matrix} \frac{d\vec{T}}{ds}= & k\vec{N} \\ \frac{d\vec{N}}{ds}= & -k\vec{T} \end{matrix}\right. \tag{1} {dsdT =dsdN =kN kT (1)

1.2 简单推导过程

引博客Apollo项目坐标系研究中的图如下:
Frenet坐标系与Cartesian坐标系互转(一):公式推导_第3张图片
Frenet坐标系: [ s , s ˙ , s ¨ , l , l ˙ , l ¨ , l ′ , l ′ ′ ] [s, \dot{s}, \ddot{s}, l, \dot{l}, \ddot{l}, l', l''] [s,s˙,s¨,l,l˙,l¨,l,l′′],Cartesian坐标系: [ x ⃗ , v x , a a , θ x , k x ] [\vec{x},v_{x}, a_{a}, \theta_{x},k_{x}] [x ,vx,aa,θx,kx],释义如下:

  • s s s:Frenet纵坐标;
  • s ˙ = d s d t \dot{s}=\frac{ds}{dt} s˙=dtds:Frenet纵坐标对时间的导数,也即沿base frame的速度;
  • s ¨ = d s ˙ d t \ddot{s}=\frac{d\dot{s}}{dt} s¨=dtds˙:沿base frame的加速度;
  • l l l:Frenet横坐标;
  • l ˙ = d l d t \dot{l}=\frac{dl}{dt} l˙=dtdl:Frenet横向速度;
  • l ¨ = d l ˙ d t \ddot{l}=\frac{d\dot{l}}{dt} l¨=dtdl˙:Frenet横向加速度;
  • l ′ = d l d s l'=\frac{dl}{ds} l=dsdl:Frenet横向坐标对纵向坐标的导数;
  • l ′ ′ = d l ′ d s l''=\frac{dl'}{ds} l′′=dsdl:Frenet横向坐标对纵向坐标的二阶导;
  • x ⃗ \vec{x} x :为对应Cartesian坐标系下的坐标,是一个向量;
  • θ x \theta_{x} θx:Cartesian坐标系下的朝向;
  • k x = d θ x d s k_{x}=\frac{d\theta_{x}}{ds} kx=dsdθx:曲率;
  • v x = ∣ ∣ x ⃗ ˙ ∣ ∣ 2 v_{x}=||\dot{\vec{x}}||_{2} vx=∣∣x ˙2:Cartesian坐标系下的线速度(无方向,无正负)
  • a x = d v x d t a_{x}=\frac{dv_{x}}{dt} ax=dtdvx:Cartesian坐标系下的加速度;

已知 x ⃗ = [ x x , y x ] \vec{x}=[x_{x}, y_{x}] x =[xx,yx]推导 [ s , l ] [s, l] [s,l]

  • s s s
    首先,找到曲线上离 [ x x , y x ] [x_{x},y_{x}] [xx,yx]最近的参考点 r ⃗ = [ x r , y r ] \vec{r}=[x_{r}, y_{r}] r =[xr,yr],该参考点处的 s s s即为 [ x x , y x ] [x_{x}, y_{x}] [xx,yx]在Frenet坐标系下的 s s s

  • l l l
    x ⃗ , r ⃗ \vec{x},\vec{r} x ,r 分别为参考点与待转换点在Cartesian坐标系下的向量,我们有 x ⃗ = r ⃗ + l N r ⃗ \vec{x}=\vec{r}+l\vec{N_{r}} x =r +lNr ,变换可得:
    l = ( x ⃗ − r ⃗ ) T N r ⃗ = ∣ ∣ x ⃗ − r ⃗ ∣ ∣ 2 cos ⁡ ( θ x − r − ( θ r + π 2 ) ) = ∣ ∣ x ⃗ − r ⃗ ∣ ∣ 2 ( sin ⁡ ( θ x − r ) cos ⁡ ( θ r ) − cos ⁡ ( θ x − r ) sin ⁡ ( θ r ) ) l=(\vec{x}-\vec{r})^{T}\vec{N_{r}}=||\vec{x}-\vec{r}||_{2}\cos(\theta_{x-r}-(\theta_{r}+\frac{\pi}{2}))=||\vec{x}-\vec{r}||_{2}(\sin(\theta_{x-r})\cos(\theta_{r})-\cos(\theta_{x-r})\sin(\theta_{r})) l=(x r )TNr =∣∣x r 2cos(θxr(θr+2π))=∣∣x r 2(sin(θxr)cos(θr)cos(θxr)sin(θr))

备注:上式中, θ x − r \theta_{x-r} θxr为向量 x ⃗ − r ⃗ \vec{x}-\vec{r} x r 的方向角度, θ r + π 2 \theta_{r}+\frac{\pi}{2} θr+2π为单位向量 N ⃗ r \vec{N}_{r} N r的方向角度(对比上一张图可知),则上式可利用向量点乘公式 a ⃗ × b ⃗ = ∣ a ∣ ∣ b ∣ cos ⁡ θ \vec{a}\times \vec{b}=|a||b|\cos{\theta} a ×b =a∣∣bcosθ得到。此处, θ \theta θ为向量 a ⃗ \vec{a} a 与向量 b ⃗ \vec{b} b 之间的夹角。

假定 x ⃗ = ( x x , y x ) , r ⃗ = ( x r , y r ) \vec{x}=(x_{x}, y_{x}), \vec{r}=(x_{r}, y_{r}) x =(xx,yx),r =(xr,yr),则 ∣ ∣ x ⃗ − r ⃗ ∣ ∣ 2 = ( x x − x r ) 2 + ( y x − y r ) 2 ||\vec{x}-\vec{r}||_{2}=\sqrt{(x_{x}-x_{r})^2+(y_{x}-y_{r})^2} ∣∣x r 2=(xxxr)2+(yxyr)2

在Frenet坐标系下,每个点到base frame上参考点的向量都与该参考点的法向量 N ⃗ \vec{N} N 同向或反向,因此, sin ⁡ ( θ x − r ) cos ⁡ ( θ r ) − cos ⁡ ( θ x − r ) sin ⁡ ( θ r ) = 1 或 − 1 \sin(\theta_{x-r})\cos(\theta_{r})-\cos(\theta_{x-r})\sin(\theta_{r})=1 或 -1 sin(θxr)cos(θr)cos(θxr)sin(θr)=11 θ x − r \theta_{x-r} θxr为向量 x ⃗ − r ⃗ \vec{x}-\vec{r} x r 的角度,因此, sin ⁡ ( θ x − r ) cos ⁡ ( θ x − r ) = y x − y r x x − x r \frac{\sin(\theta_{x-r})}{\cos(\theta_{x-r})}=\frac{y_{x}-y_{r}}{x_{x}-x_{r}} cos(θxr)sin(θxr)=xxxryxyr。可以根据 ( x x − x r ) 2 + ( y x − y r ) 2 \sqrt{(x_{x}-x_{r})^2+(y_{x}-y_{r})^2} (xxxr)2+(yxyr)2 来确定 l l l的绝对取值, ( y x − y r ) cos ⁡ ( θ r ) − ( x x − x r ) sin ⁡ ( θ r ) (y_{x}-y_{r})\cos(\theta_{r})-(x_{x}-x_{r})\sin(\theta_{r}) (yxyr)cos(θr)(xxxr)sin(θr)的正负来确定 l l l的正负号,公式如下:

l = s i g n ( ( y x − y r ) cos ⁡ ( θ r ) − ( x x − x r ) sin ⁡ ( θ r ) ) ( x x − x r ) 2 + ( y x − y r ) 2 (2) l = sign\left((y_{x}-y_{r})\cos(\theta_{r})-(x_{x}-x_{r})\sin(\theta_{r})\right)\sqrt{(x_{x}-x_{r})^2+(y_{x}-y_{r})^2} \tag{2} l=sign((yxyr)cos(θr)(xxxr)sin(θr))(xxxr)2+(yxyr)2 (2)

已知 x ⃗ = [ x x , y x ] , θ x , v x \vec{x}=[x_{x}, y_{x}],\theta_{x},v_x x =[xx,yx],θx,vx推导 [ s , l , s ˙ , l ˙ , l ′ ] [s, l,\dot{s},\dot{l},l'] [s,l,s˙,l˙,l]

  • l ˙ \dot{l} l˙根据 v x v_x vx s ˙ \dot{s} s˙定义,有 r ⃗ ˙ = s ˙ T r ⃗ \dot{\vec{r}}=\dot{s}\vec{T_r} r ˙=s˙Tr x ⃗ ˙ = v x T x ⃗ \dot{\vec{x}}=v_x \vec{T_x} x ˙=vxTx
    x ⃗ \vec{x} x r ⃗ \vec{r} r 的关系 x ⃗ = r ⃗ + l N r ⃗ \vec{x}=\vec{r}+l\vec{N_{r}} x =r +lNr ,可得 l = ( x ⃗ − r ⃗ ) T N r ⃗ l=(\vec{x}-\vec{r})^{T}\vec{N_{r}} l=(x r )TNr ,两边对时间 t t t求导得如下等式:
    l ˙ = ( x ⃗ ˙ − r ⃗ ˙ ) T N r ⃗ + ( x ⃗ − r ⃗ ) T N r ⃗ ˙ = v x T x ⃗ T N r ⃗ − s ˙ T r ⃗ T N r ⃗ + l N r ⃗ T N r ⃗ ˙ \dot{l}=(\dot{\vec{x}}-\dot{\vec{r}})^{T}\vec{N_{r}}+(\vec{x}-\vec{r})^{T}\dot{\vec{N_{r}}} \\ = v_{x}\vec{T_{x}}^{T}\vec{N_{r}}-\dot{s}\vec{T_{r}}^{T}\vec{N_{r}}+l\vec{N_{r}}^{T}\dot{\vec{N_{r}}} l˙=(x ˙r ˙)TNr +(x r )TNr ˙=vxTx TNr s˙Tr TNr +lNr TNr ˙

由Frenet公式(见上式(1))有 N r ⃗ ′ = d N r ⃗ d s = − k r T r ⃗ \vec{N_{r}}'=\frac{d\vec{N_{r}}}{ds}=-k_{r}\vec{T_{r}} Nr =dsdNr =krTr ,于是有 N r ⃗ ˙ = d s d t d N r ⃗ d s = − k r s ˙ T r ⃗ \dot{\vec{N_{r}}}=\frac{ds}{dt}\frac{d\vec{N_{r}}}{ds}=-k_{r}\dot{s}\vec{T_{r}} Nr ˙=dtdsdsdNr =krs˙Tr ,代入上式可得:

l ˙ = v x T x ⃗ T N r ⃗ − s ˙ T r ⃗ T N r ⃗ − l s ˙ k r N r ⃗ T T r ⃗ \dot{l}=v_{x}\vec{T_{x}}^{T}\vec{N_{r}}-\dot{s}\vec{T_{r}}^{T}\vec{N_{r}}-l\dot{s}k_{r}\vec{N_{r}}^{T}\vec{T_{r}} l˙=vxTx TNr s˙Tr TNr ls˙krNr TTr

由于 N r ⃗ \vec{N_{r}} Nr T r ⃗ \vec{T_{r}} Tr 正交 ⇒ N r ⃗ T T r ⃗ = T r ⃗ T N r ⃗ = 0 \Rightarrow \vec{N_{r}}^{T}\vec{T_{r}}=\vec{T_{r}}^{T}\vec{N_{r}}=0 Nr TTr =Tr TNr =0 T x ⃗ T N r ⃗ = cos ⁡ ( θ x − θ r − π 2 ) = sin ⁡ ( θ x − θ r ) \vec{T_{x}}^{T}\vec{N_{r}}=\cos(\theta_{x}-\theta_{r}-\frac{\pi}{2})=\sin(\theta_{x}-\theta_{r}) Tx TNr =cos(θxθr2π)=sin(θxθr),代入上式得:
l ˙ = v x sin ⁡ ( θ x − θ r ) (3) \dot{l}=v_{x}\sin(\theta_{x}-\theta_{r}) \tag{3} l˙=vxsin(θxθr)(3)

  • s ˙ \dot{s} s˙
    x ⃗ \vec{x} x r ⃗ \vec{r} r 的关系 x ⃗ = r ⃗ + l N r ⃗ \vec{x}=\vec{r}+l\vec{N_{r}} x =r +lNr ,对等式两边求导可得: v x T x ⃗ = s ˙ T r ⃗ + l ˙ N r ⃗ − s ˙ k r l T r ⃗ v_x\vec{T_x}=\dot{s}\vec{T_r}+\dot{l}\vec{N_r}-\dot{s}k_r l\vec{T_r} vxTx =s˙Tr +l˙Nr s˙krlTr

上式两边左乘 T r ⃗ \vec{T_r} Tr 得到 v x cos ⁡ ( θ x − θ r ) = s ˙ ( 1 − k r l ) v_x\cos(\theta_x-\theta_r)=\dot{s}(1-k_r l) vxcos(θxθr)=s˙(1krl),整理可得:
s ˙ = v x cos ⁡ ( θ x − θ r ) 1 − k r l (4) \dot{s}=\frac{v_x \cos(\theta_x-\theta_r)}{1-k_r l} \tag{4} s˙=1krlvxcos(θxθr)(4)

  • l ′ l' l

l ′ = d l d s = l ˙ s ˙ l'=\frac{dl}{ds}=\frac{\dot{l}}{\dot{s}} l=dsdl=s˙l˙ ,将 l ˙ \dot{l} l˙ s ˙ \dot{s} s˙代入得:

l ′ = ( 1 − k r l ) tan ⁡ ( θ x − θ r ) (5) l'=(1-k_{r}l)\tan(\theta_{x}-\theta_{r}) \tag{5} l=(1krl)tan(θxθr)(5)

已知 x ⃗ = [ x x , y x ] , θ x , v x , a x , k x \vec{x}=[x_{x}, y_{x}],\theta_{x},v_x,a_x,k_{x} x =[xx,yx],θx,vx,ax,kx推导 [ s , l , s ˙ , l ′ , s ¨ , l ′ ′ ] [s, l,\dot{s},l',\ddot{s},l''] [s,l,s˙,l,s¨,l′′]

  • l ′ ′ l'' l′′

l ′ = ( 1 − k r l ) tan ⁡ ( θ x − θ r ) l'=(1-k_{r}l)\tan(\theta_{x}-\theta_{r}) l=(1krl)tan(θxθr),可得 l ′ ′ = d l ′ d s = ( 1 − k r l ) ′ tan ⁡ ( θ x − θ r ) + ( 1 − k r l ) ( θ x − θ r ) ′ cos ⁡ 2 ( θ x − θ r ) l''=\frac{dl'}{ds}=(1-k_{r}l)'\tan(\theta_{x}-\theta_{r})+(1-k_{r}l)\frac{(\theta_{x}-\theta_{r})'}{\cos^{2}(\theta_{x}-\theta_{r})} l′′=dsdl=(1krl)tan(θxθr)+(1krl)cos2(θxθr)(θxθr)

假定 s x s_{x} sx为为车辆当前轨迹 x ⃗ \vec{x} x 的弧长,有:
d d s = d s x d t d t d s d d s x = v x s ˙ d d s x = 1 − k r l cos ⁡ ( θ x − θ r ) d d s x \frac{d}{ds}=\frac{ds_{x}}{dt}\frac{dt}{ds}\frac{d}{ds_{x}}=\frac{v_{x}}{\dot{s}}\frac{d}{ds_{x}}=\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}\frac{d}{ds_{x}} dsd=dtdsxdsdtdsxd=s˙vxdsxd=cos(θxθr)1krldsxd

又有曲率: k r = d θ r d s k_{r}=\frac{d\theta_{r}}{ds} kr=dsdθr, k x = d θ x d s x k_{x}=\frac{d\theta_{x}}{ds_{x}} kx=dsxdθx

故: l ′ ′ = d l ′ d s = − ( k r ′ l + k r l ′ ) tan ⁡ ( θ x − θ r ) + ( 1 − k r l ) cos ⁡ 2 ( θ x − θ r ) ( d θ x d s − d θ r d s ) l''=\frac{dl'}{ds}=-(k_{r}'l+k_{r}l')\tan(\theta_{x}-\theta_{r})+\frac{(1-k_{r}l)}{\cos^2(\theta_{x}-\theta_{r})}(\frac{d\theta_{x}}{ds}-\frac{d\theta_{r}}{ds}) l′′=dsdl=(krl+krl)tan(θxθr)+cos2(θxθr)(1krl)(dsdθxdsdθr)

由于: d θ x d s = 1 − k r l cos ⁡ ( θ x − θ r ) d θ x d s x = 1 − k r l cos ⁡ ( θ x − θ r ) k x \frac{d\theta_{x}}{ds}=\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}\frac{d\theta_{x}}{ds_{x}}=\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}k_{x} dsdθx=cos(θxθr)1krldsxdθx=cos(θxθr)1krlkx
综上可得:

l ′ ′ = − ( k r ′ l + k r l ′ ) tan ⁡ ( θ x − θ r ) + ( 1 − k r l ) cos ⁡ 2 ( θ x − θ r ) ( 1 − k r l cos ⁡ ( θ x − θ r ) k x − k r ) (6) l''=-(k_{r}'l+k_{r}l')\tan(\theta_{x}-\theta_{r})+\frac{(1-k_{r}l)}{\cos^2(\theta_{x}-\theta_{r})}(\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}k_{x}-k_{r})\tag{6} l′′=(krl+krl)tan(θxθr)+cos2(θxθr)(1krl)(cos(θxθr)1krlkxkr)(6)

a x = d v x d t = s ¨ 1 − k r l cos ⁡ ( θ x − θ r ) + s ˙ 2 cos ⁡ ( θ x − θ r ) [ l ′ ( k x 1 − k r l cos ⁡ ( θ x − θ r ) − k r ) − ( k r ′ l + k r l ′ ) ] a_{x}=\frac{dv_{x}}{dt}=\ddot{s}\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}+\frac{\dot{s}^{2}}{\cos(\theta_{x}-\theta_{r})}\left[l'(k_{x}\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}-k_{r})-(k_{r}'l+k_{r}l')\right] ax=dtdvx=s¨cos(θxθr)1krl+cos(θxθr)s˙2[l(kxcos(θxθr)1krlkr)(krl+krl)]

s ¨ = a x cos ⁡ ( θ x − θ r ) − s ˙ 2 [ l ′ ( k x 1 − k r l cos ⁡ ( θ x − θ r ) − k r ) − ( k r ′ l + k r l ′ ) ] 1 − k r l (7) \ddot{s}=\frac{a_{x}\cos(\theta_{x}-\theta_{r})-\dot{s}^{2}\left[l'(k_{x}\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}-k_{r})-(k_{r}'l+k_{r}l')\right]}{1-k_{r}l}\tag{7} s¨=1krlaxcos(θxθr)s˙2[l(kxcos(θxθr)1krlkr)(krl+krl)](7)

综合以上可得转换公式

  • Cartesian转 Frenet
    { s = s r s ˙ = v x cos ⁡ ( θ x − θ r ) 1 − k r l s ¨ = a x cos ⁡ ( θ x − θ r ) − s ˙ 2 [ l ′ ( k x 1 − k r l cos ⁡ ( θ x − θ r ) − k r ) − ( k r ′ l + k r l ′ ) ] 1 − k r l l = s i g n ( ( y x − y r ) cos ⁡ ( θ r ) − ( x x − x r ) sin ⁡ ( θ r ) ) ( x x − x r ) 2 + ( y x − y r ) 2 l ′ = ( 1 − k r l ) tan ⁡ ( θ x − θ r ) l ′ ′ = − ( k r ′ l + k r l ′ ) tan ⁡ ( θ x − θ r ) + ( 1 − k r l ) cos ⁡ 2 ( θ x − θ r ) ( 1 − k r l cos ⁡ ( θ x − θ r ) k x − k r ) (8) \left\{\begin{matrix}s=& s_{r} \\ \dot{s}=& \frac{v_{x}\cos(\theta_{x}-\theta_{r})}{1-k_{r}l} \\ \ddot{s}=& \frac{a_{x}\cos(\theta_{x}-\theta_{r})-\dot{s}^{2}\left[l'(k_{x}\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}-k_{r})-(k_{r}'l+k_{r}l')\right]}{1-k_{r}l} \\ l=& sign\left((y_{x}-y_{r})\cos(\theta_{r})-(x_{x}-x_{r})\sin(\theta_{r})\right)\sqrt{(x_{x}-x_{r})^2+(y_{x}-y_{r})^2} \\ l'=& (1-k_{r}l)\tan(\theta_{x}-\theta_{r}) \\ l''= &-(k_{r}'l+k_{r}l')\tan(\theta_{x}-\theta_{r})+\frac{(1-k_{r}l)}{\cos^2(\theta_{x}-\theta_{r})}(\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}k_{x}-k_{r}) \end{matrix}\right. \tag{8} s=s˙=s¨=l=l=l′′=sr1krlvxcos(θxθr)1krlaxcos(θxθr)s˙2[l(kxcos(θxθr)1krlkr)(krl+krl)]sign((yxyr)cos(θr)(xxxr)sin(θr))(xxxr)2+(yxyr)2 (1krl)tan(θxθr)(krl+krl)tan(θxθr)+cos2(θxθr)(1krl)(cos(θxθr)1krlkxkr)(8)

  • Frenet转Cartesian
    { x x = x r − l sin ⁡ ( θ r ) y x = y r + l cos ⁡ ( θ r ) θ x = arctan ⁡ ( l ′ 1 − k r l ) + θ r ∈ [ − π , π ] v x = [ s ˙ ( 1 − k r l ) ] 2 + ( s ˙ l ′ ) 2 a x = s ¨ 1 − k r l cos ⁡ ( θ x − θ r ) + s ˙ 2 cos ⁡ ( θ x − θ r ) [ l ′ ( k x 1 − k r l cos ⁡ ( θ x − θ r ) − k r ) − ( k r ′ l + k r l ′ ) ] k x = ( ( l ′ ′ + ( k r ′ l + k r l ′ ) tan ⁡ ( θ x − θ r ) ) cos ⁡ 2 ( θ x − θ r ) 1 − k r l + k r ) cos ⁡ ( θ x − θ r ) 1 − k r l (9) \left\{\begin{matrix} x_{x}= & x_{r}-l\sin(\theta_{r}) \\ y_{x}=& y_{r}+l\cos(\theta_{r}) \\ \theta_{x}=& \arctan(\frac{l'}{1-k_{r}l})+\theta_{r} \in [-\pi, \pi] \\ v_{x}= &\sqrt{[\dot{s}(1-k_{r}l)]^{2}+(\dot{s}l')^{2}} \\ a_{x}= &\ddot{s}\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}+\frac{\dot{s}^{2}}{\cos(\theta_{x}-\theta_{r})}\left[l'(k_{x}\frac{1-k_{r}l}{\cos(\theta_{x}-\theta_{r})}-k_{r})-(k_{r}'l+k_{r}l')\right] \\ k_{x}= & ((l''+(k_{r}'l+k_{r}l')\tan(\theta_{x}-\theta_{r}))\frac{\cos^{2}(\theta_{x}-\theta_{r})}{1-k_{r}l}+k_{r})\frac{\cos(\theta_{x}-\theta_{r})}{1-k_{r}l} \end{matrix}\right. \tag{9} xx=yx=θx=vx=ax=kx=xrlsin(θr)yr+lcos(θr)arctan(1krll)+θr[π,π][s˙(1krl)]2+(s˙l)2 s¨cos(θxθr)1krl+cos(θxθr)s˙2[l(kxcos(θxθr)1krlkr)(krl+krl)]((l′′+(krl+krl)tan(θxθr))1krlcos2(θxθr)+kr)1krlcos(θxθr)(9)

cartesian转Frenet一般计算步骤

问题:已知 ( x x , y x , θ x , v x , a x , k x ) , ( s r , x r , y r , θ r , k r , k r ′ ) , (x_x, y_x, \theta_x, v_x, a_x, k_x), (s_r, x_r, y_r, \theta_r, k_r, k_r'), (xx,yx,θx,vx,ax,kx),(sr,xr,yr,θr,kr,kr), s , s ˙ , s ¨ , l , l ′ , l ′ ′ s, \dot{s}, \ddot{s},l,l', l'' s,s˙,s¨,l,l,l′′

step 1:计算 d x = x x − x r , d y = y x − y r , d θ = θ x − θ r d_x=x_x-x_r,d_y=y_x-y_r,d_{\theta}=\theta_x-\theta_r dx=xxxr,dy=yxyr,dθ=θxθr;
step 2:计算 C d r d x = d y cos ⁡ ( θ r ) − d x sin ⁡ ( θ r ) C_{drdx}=d_y\cos(\theta_r)-d_x\sin(\theta_r) Cdrdx=dycos(θr)dxsin(θr);
step 3:计算 l = s i g n ( C d r d x ) d x 2 + d y 2 l=sign(C_drdx)\sqrt{d_x^2+d_y^2} l=sign(Cdrdx)dx2+dy2 ;
step 4:计算 C 1 − k r l = 1 − k r l C_{1-k_r l}=1-k_r l C1krl=1krl;
step 5:计算 l ′ = C 1 − k r l tan ⁡ ( d θ ) l'=C_{1-k_r l}\tan(d_{\theta}) l=C1krltan(dθ);
step 6:计算 C k r l ′ = k r ′ l + k r l ′ C_{k_rl'}=k'_rl+k_rl' Ckrl=krl+krl;
step 7:计算 l ′ ′ = − C k r l ′ tan ⁡ ( d θ ) + C 1 − k r l cos ⁡ ( d θ ) ( k x C 1 − k r l cos ⁡ ( d θ ) − k r ) l''=-C_{k_r l'}\tan(d_{\theta})+\frac{C_{1-k_r l}}{\cos(d_{\theta})}(\frac{k_xC_{1-k_r l}}{\cos(d_{\theta})}-k_r) l′′=Ckrltan(dθ)+cos(dθ)C1krl(cos(dθ)kxC1krlkr);
step 8:计算 s = s r s=s_r s=sr;
step 9:计算 s ˙ = v x cos ⁡ ( d θ ) C 1 − k r l \dot{s}=\frac{v_x \cos(d_{\theta})}{C_{1-k_r l}} s˙=C1krlvxcos(dθ);
step 10:计算 C d θ ′ = C 1 − k r l k x cos ⁡ ( d θ ) − k r C_{d_{\theta}'}=\frac{C_{1-k_r l}}{k_x\cos(d_{\theta})}-k_r Cdθ=kxcos(dθ)C1krlkr;
step 11:计算 s ¨ = a x cos ⁡ ( d θ ) − s ˙ 2 ( l ′ C d θ ′ − C k r l ′ ) C 1 − k r l \ddot{s}=\frac{a_x\cos(d_{\theta})-\dot{s}^2(l'C_{d_{\theta}'}-C_{k_r l'})}{C_{1-k_r l}} s¨=C1krlaxcos(dθ)s˙2(lCdθCkrl)


Frenet坐标系与Cartesian坐标系互转(二):Python代码函数实现

Frenet坐标系与Cartesian坐标系互转(三):应用示例


END
by windSeS
first update 2020.9.23
modified at 2022.5.19

你可能感兴趣的:(无人驾驶技术系统,Frenet坐标系,无人驾驶,路径规划,lattic)