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

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

一、 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公式:
{ 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坐标系: [ 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

同时也希望大家多多支持本人第一个付费专栏《自动驾驶规划入门(已完结)》,满足我一点点的虚荣心=v=。

  • 225
    点赞
  • 1048
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 54
    评论
### 回答1: 坐标系 Frenet坐标系Cartesian坐标系都是用于描述物体在空间中的位置和运动状态的坐标系。 Frenet坐标系是一种基于曲线的坐标系,它描述了物体在曲线上的位置和运动状态。它由三个坐标轴组成:切线轴、法线轴和副法线轴。切线轴指向曲线的切线方向,法线轴指向曲线的凸侧,副法线轴与切线轴和法线轴垂直,指向曲线的弯曲方向。 Cartesian坐标系是一种基于直角坐标系坐标系,它描述了物体在三维空间中的位置和运动状态。它由三个坐标轴组成:x轴、y轴和z轴。x轴和y轴在水平面内,z轴垂直于水平面。 两种坐标系都有各自的优缺点,选择使用哪种坐标系取决于具体的应用场景和需求。 ### 回答2: Frenet坐标系Cartesian坐标系都是数学中常见的坐标系。它们都可以用来描述物体在不同的状态下的位置和运动状态。不同之处在于它们的定义和使用方法略有不同。 Frenet坐标系,也称为切向量坐标系,是一种基于曲线的坐标系,用于描述物体在曲线上的位置和运动状态。Frenet坐标系的三个坐标轴分别是曲线的切向量、法向量和副法向量。其中,切向量是曲线在任意一点的切线方向,法向量是垂直于切向量的向量,而副法向量是垂直于切向量和法向量的向量。这种坐标系的优点在于能够有效地描述曲线的弯曲和转向情况,使得计算曲线上任意一点的速度和加速度等物理量更加方便。 相比之下,Cartesian坐标系是一种基于直线的坐标系,用于描述物体在直角坐标系中的位置和运动状态。在这种坐标系中,物体的三个坐标轴分别是x、y、z轴,它们垂直于彼此形成一个直角三角形。这种坐标系的优点在于计算简单,容易理解。但它不能有效地描述曲线的特性,因为在直线上一些物理量的计算需要涉及到微积分和向量的运算,这使得计算比较麻烦并且容易出现误差。 总的来说,Frenet坐标系Cartesian坐标系各有优缺点,具体使用哪种坐标系取决于需要描述物体的特性和应用场景。在实际应用中,这两种坐标系常常相互转换,以便更好地描述物体在运动过程中的位置和状态。 ### 回答3: Frenet坐标系是一种曲线坐标系,用于描述空间中的曲线。与笛卡尔坐标系不同,Frenet坐标系以曲线的切线、法向和副法向为基准,通过参数化曲线的方式来描述曲线的位置。因此,Frenet坐标系可以更好地描述曲线的几何性质,例如曲率和扭率等。 在Frenet坐标系中,曲线的位置可以由三个参数来描述,即曲线的弧长s、曲率k和扭率τ。这三个参数分别对应着曲线的沿切线变化、沿法向变化和沿副法向变化。通过这些参数,可以准确地描述曲线的位置和方向,而且可以轻松地计算曲线上任意点的切线、法向和副法向。 相比之下,笛卡尔坐标系则是以直角坐标系为基准,使用x、y和z三个坐标轴来描述空间的位置。尽管笛卡尔坐标系在描述平面和立体图形时比较简便,但当描述曲线的时候就显得比较复杂。因为曲线的位置和方向不能通过单一的坐标轴来描述,必须使用更复杂的公式和计算方法。 总的来说,Frenet坐标系相对于笛卡尔坐标系来说,在描述曲线几何性质上更加直观和准确。在实际应用中,Frenet坐标系有广泛的应用,例如在计算机图形学、机器视觉等领域中,以及在车辆导航和机器人路径规划中也有广泛的应用。
评论 54
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

windSeS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值