Cartesian转Frenet
1 明确目标
已知车辆质点在Cartesian坐标系下的状态:
-
位置向量:rh⃗\vec{r_h}rh,通过定位模块可以获得车辆位置坐标(xh,yh)(x_h,y_h)(xh,yh),即rh⃗\vec{r_h}rh。
-
切线方向与xxx轴夹角:θh\theta_hθh,通过定位模块可以获得车辆的朝向角yawyawyaw角或者headingheadingheading角,即θh\theta_hθh。
-
车辆所在轨迹的单位切向量:τh⃗\vec{\tau_h}τh
τh⃗=(cosθh,sinθh)(1-1) \vec{\tau_h} = (cos\theta_h, sin\theta_h)\tag{1-1} τh=(cosθh,sinθh)(1-1) -
车辆所在轨迹的单位法向量:nh⃗\vec{n_h}nh
nh⃗=(−sinθh,cosθh)(1-2) \vec{n_h} = (-sin\theta_h, cos\theta_h)\tag{1-2} nh=(−sinθh,cosθh)(1-2) -
速度向量:vh⃗\vec{v_h}vh
vh⃗=∣vh⃗∣τh⃗=vhτh⃗(1-3) \vec{v_h} = |\vec{v_h}| \vec{\tau_h} = v_h \vec{\tau_h} \tag{1-3} vh=∣vh∣τh=vhτh(1-3)
其中,vhv_hvh 为标量,代表车辆纵向速度,可以通过轮速传感器和阿克曼转向模型计算得到。 -
曲率:κh\kappa_hκh 为车辆行驶轨迹的曲率,可以通过下述曲率公式计算得到。
κ=∣x′(t)y′′(t)−y′(t)x′′(t)∣(x′(t)2+y′(t)2)3/2(1-4) \kappa = \frac{|x'(t)y''(t) - y'(t)x''(t)|}{\left( x'(t)^2 + y'(t)^2 \right)^{3/2}} \tag{1-4} κ=(x′(t)2+y′(t)2)3/2∣x′(t)y′′(t)−y′(t)x′′(t)∣(1-4) -
加速度向量:ah⃗\vec{a_h}ah
ah⃗=vh⃗˙=aττh⃗+κhvh2nh⃗(1-5) \vec{a_h} = \dot{\vec{v_h}}=a_{\tau}\vec{\tau_h} +\kappa_h v_h^2 \vec{n_h} \tag{1-5} ah=vh˙=aττh+κhvh2nh(1-5)
从上式中可以看出aha_hah 可以通过两种方式得到:一种通过vh⃗\vec{v_h}vh对时间求导(可以用差分代替)得到;一种是通过纵向加速度计获得aτa_\tauaτ,然后结合κh\kappa_hκh计算得到。这两种方式前者属于预测的方式,后一种属于观测的方式,可以选择一种,也可以选择使用卡尔曼滤波器将这两者结合起来使用,获得更准确的ah⃗\vec{a_h}ah 。
已知参考线上任意点状态(下述状态在参考线生成后都可以通过计算得到):
- 参考线上的任意点:srs_rsr
- 参考线上任意点的单位切向量:τr⃗\vec{\tau_r}τr
- 参考线上任意点的单位法向量:nr⃗\vec{n_r}nr
- 参考线上任意点的曲率:κr\kappa_rκr
- 参考线上任意点的曲率变化率:κr′\kappa_r'κr′
求车辆质点在Frenet坐标系下的状态:
- Frenet 坐标系下的纵向坐标:sss
- 纵向速度:s˙\dot{s}s˙
- 纵向加速度:s¨\ddot{s}s¨
- 横向坐标:lll
- 横向速度:l˙\dot{l}l˙
- 横向加速度:l¨\ddot{l}l¨
- 横向坐标变化率:l′l'l′
- 横向坐标的二阶变化率:l′′l''l′′
2 公式推导
2.1 基础公式汇总
为了方便查阅,现将前文推导的Frenet基础公式汇总如下:
- 核心关系
rh⃗=rr⃗+lnr⃗(2-1) \vec{r_h} = \vec{r_r} + l\vec{n_r}\tag{2-1} rh=rr+lnr(2-1)
- Frenet最小状态集
l˙=l′s˙(2-2) \dot{l} = l'\dot{s}\tag{2-2} l˙=l′s˙(2-2)
l¨=l′′s˙2+l′s¨(2-3) \ddot{l} = l''\dot{s}^2+l'\ddot{s}\tag{2-3} l¨=l′′s˙2+l′s¨(2-3)
-
车辆在Cartesian下的向量导数
rh⃗˙=vh⃗=∣vh⃗∣τh⃗=vhτh⃗(2-4) \dot{\vec{r_h}} = \vec{v_h}= |\vec{v_h}|\vec{\tau_h}=v_h\vec{\tau_h}\tag{2-4} rh˙=vh=∣vh∣τh=vhτh(2-4)τh⃗˙=κhvhnh⃗(2-5) \dot{\vec{\tau_h}} = \kappa_hv_h\vec{n_h}\tag{2-5} τh˙=κhvhnh(2-5)
nh⃗˙=−κhvhτh⃗(2-6) \dot{\vec{n_h}} =-\kappa_hv_h\vec{\tau_h}\tag{2-6} nh˙=−κhvhτh(2-6)
vh⃗˙=ah⃗=aττh⃗+κhvh2nh⃗(2-7) \dot{\vec{v_h}} = \vec{a_h} = a_{\tau}\vec{\tau_h} +\kappa_h v_h^2 \vec{n_h}\tag{2-7} vh˙=ah=aττh+κhvh2nh(2-7)
-
匹配点在Cartesian下的向量导数
rr⃗˙=vr⃗=∣vr⃗∣τr⃗=s˙τr⃗(2-8) \dot{\vec{r_r}} = \vec{v_r}= |\vec{v_r}|\vec{\tau_r}=\dot{s}\vec{\tau_r}\tag{2-8} rr˙=vr=∣vr∣τr=s˙τr(2-8)τr⃗˙=κrs˙nr⃗(2-9) \dot{\vec{\tau_r}} = \kappa_r \dot{s} \vec{n_r}\tag{2-9} τr˙=κrs˙nr(2-9)
nr⃗˙=−κrs˙τr⃗(2-10) \dot{\vec{n_r}} =-\kappa_r \dot{s}\vec{\tau_r}\tag{2-10} nr˙=−κrs˙τr(2-10)
2.2 寻找突破口(求解s)
根据sss的定义:车辆质点在实际轨迹上的位置投影到参考线(可以理解为车道中心线)的点(xr,yr)(x_r, y_r)(xr,yr),距离参考线起点的长度,不难算出s。具体的算法在工程实现时往往会单独抽象为一个“计算匹配点/l投影点”的模块,在该模块内不但要完成sss计算的基本功能,还会加入一些辅助加速的算法,这块后续有机会再说,现在我们认为sss是可以根据现有信息计算得到的就可以了。即
s=sr(2-11)
s = s_r \tag{2-11}
s=sr(2-11)
2.3 撕开一道口子(求解l)
将之前推导出的核心关系公式(2-1)两边同时点乘nr⃗\vec{n_r}nr可得
l=(rh⃗−rr⃗)nr⃗(2-12)
l = (\vec{r_h} - \vec{r_r}) \vec{n_r} \tag{2-12}
l=(rh−rr)nr(2-12)
2.4 按部就班(求解s˙\dot{s}s˙)
将核心关系公式(2-1)两边同时对ttt 求导,可得
rh⃗˙=rr⃗˙+l˙nr⃗+lnr⃗˙(2-13)
\dot{\vec{r_h}} = \dot{\vec{r_r}} + \dot{l} \vec{n_r} + l \dot{\vec{n_r}} \tag{2-13}
rh˙=rr˙+l˙nr+lnr˙(2-13)
将(2-4)、(2-8)、(2-10)带入,可得
vh⃗=s˙τr⃗+l˙nr⃗−lκrs˙τr⃗(2-14)
\vec{v_h} = \dot{s}\vec{\tau_r} + \dot{l}\vec{n_r} -l\kappa_r \dot{s} \vec{\tau_r}\tag{2-14}
vh=s˙τr+l˙nr−lκrs˙τr(2-14)
为了消除未知量l˙\dot{l}l˙,将公式两边同时乘以τr⃗\vec{\tau_r}τr,可得
vh⃗τr⃗=s˙−lκrs˙(2-14)
\vec{v_h}\vec{\tau_r} = \dot{s} -l\kappa_r \dot{s} \tag{2-14}
vhτr=s˙−lκrs˙(2-14)
整理后可得
s˙=vh⃗τr⃗1−lκr(2-15)
\dot{s} = \frac{\vec{v_h}\vec{\tau_r}}{1-l\kappa_r}\tag{2-15}
s˙=1−lκrvhτr(2-15)
2.5 按部就班(求解l˙\dot{l}l˙)
对(2-14)等式两侧同时点乘nr⃗\vec{n_r}nr,可得
l˙=vh⃗nr⃗(2-16)
\dot{l} = \vec{v_h} \vec{n_r} \tag{2-16}
l˙=vhnr(2-16)
2.6 按部就班(求解l′l'l′)
将(2-15)和(2-16)带入(2-2)可得
l′=vh⃗⋅nr⃗vh⃗⋅τr⃗(1−krl)(2-17)
l' = \frac{\vec{v_h} \cdot \vec{n_r}}{\vec{v_h} \cdot \vec{\tau_r}} (1 - k_r l)\tag{2-17}
l′=vh⋅τrvh⋅nr(1−krl)(2-17)
2.7 渐入佳境(求解s¨\ddot{s}s¨)
s¨=ds˙dt=ddt(vh⃗τr⃗1−κrl)=1(1−κrl)2[(vh⃗˙τr⃗+vh⃗τr⃗˙)(1−κrl)+vh⃗τr⃗(κr˙l+κrl˙)]=11−κrl(ah⃗τr⃗+vh⃗κrs˙nr⃗)+1(1−κrl)vh⃗τr⃗1−κrl(kr′s˙l+κrl′s˙)=11−κrl(ah⃗τr⃗+vh⃗κrs˙nr⃗)+1(1−κrl)s˙2(kr′l+κrl′)=ah⃗τr⃗+κrvh⃗nr⃗s˙+(kr′l+κrl′)s˙21−κrl=ah⃗τr⃗+κrl˙s˙+(kr′l+κrl′)s˙21−κrl(2-18) \begin{align} \ddot{s} &= \frac{d\dot{s}}{dt}\\ &= \frac{d}{dt} \left( \frac{\vec{v_h} \vec{\tau_r}}{1 - \kappa_r l} \right) \\ &= \frac{1}{(1 - \kappa_r l)^2} \left[ (\dot{\vec{v_h}} \vec{\tau_r} + \vec{v_h} \dot{\vec{\tau_r}})(1-\kappa_rl) + \vec{v_h} \vec{\tau_r} (\dot{\kappa_r}l + \kappa_r\dot{l}) \right]\\ &= \frac{1}{1 - \kappa_r l} \left( \vec{a_h}\vec{\tau_r} + \vec{v_h}\kappa_r\dot{s}\vec{n_r} \right) + \frac{1}{(1 - \kappa_r l)} \frac{\vec{v_h}\vec{\tau_r}}{1-\kappa_r l}\left( k_r'\dot{s} l + \kappa_r l'\dot{s} \right) \\ &= \frac{1}{1 - \kappa_r l} \left( \vec{a_h}\vec{\tau_r} + \vec{v_h}\kappa_r\dot{s}\vec{n_r} \right) + \frac{1}{(1 - \kappa_r l)} \dot{s}^2\left( k_r' l + \kappa_r l' \right) \\ &= \frac{\vec{a_h}\vec{\tau_r} + \kappa_r\vec{v_h}\vec{n_r}\dot{s} + \left( k_r' l + \kappa_r l' \right)\dot{s}^2}{1 - \kappa_r l} \\ &= \frac{\vec{a_h}\vec{\tau_r} + \kappa_r\dot{l}\dot{s} + \left( k_r' l + \kappa_r l' \right)\dot{s}^2}{1 - \kappa_r l} \\ \end{align} \tag{2-18} s¨=dtds˙=dtd(1−κrlvhτr)=(1−κrl)21[(vh˙τr+vhτr˙)(1−κrl)+vhτr(κr˙l+κrl˙)]=1−κrl1(ahτr+vhκrs˙nr)+(1−κrl)11−κrlvhτr(kr′s˙l+κrl′s˙)=1−κrl1(ahτr+vhκrs˙nr)+(1−κrl)1s˙2(kr′l+κrl′)=1−κrlahτr+κrvhnrs˙+(kr′l+κrl′)s˙2=1−κrlahτr+κrl˙s˙+(kr′l+κrl′)s˙2(2-18)
又因为(2-2),有
s¨=ah⃗τr⃗+(2κrl′+κ′l)s˙21−κrl(2-19) \ddot{s} = \frac{\vec{a_h}\vec{\tau_r} + (2\kappa_r l' + \kappa'l)\dot{s}^2}{1 - \kappa_r l} \tag{2-19} s¨=1−κrlahτr+(2κrl′+κ′l)s˙2(2-19)
2.8 渐入佳境(求解l¨\ddot{l}l¨)
l¨=dl˙dt=ddt(vh⃗nr⃗)=vh⃗˙nr⃗+vh⃗nr⃗˙=ah⃗nr⃗−κrs˙vh⃗τr⃗(2-20) \begin{align} \ddot{l} &= \frac{d\dot{l}}{dt} \\ &= \frac{d}{dt}\left(\vec{v_h} \vec{n_r}\right) \\ &= \dot{\vec{v_h}}\vec{n_r} + \vec{v_h}\dot{\vec{n_r}} \\ &= \vec{a_h}\vec{n_r} - \kappa_r \dot{s} \vec{v_h}\vec{\tau_r} \end{align} \tag{2-20} l¨=dtdl˙=dtd(vhnr)=vh˙nr+vhnr˙=ahnr−κrs˙vhτr(2-20)
又因为(2-15),有
l¨=ah⃗nr⃗−κrs˙2(1−lκr)(2-21)
\ddot{l} = \vec{a_h}\vec{n_r} - \kappa_r \dot{s}^2 (1-l\kappa_r)\tag{2-21}
l¨=ahnr−κrs˙2(1−lκr)(2-21)
2.9 鸣金收兵(求解l′′l''l′′)
由(2-3)和 (2-20)可得
l′′=l¨−l′s¨s˙2=ah⃗nr⃗−κrs˙vh⃗τr⃗−l′s¨s˙2(2-22)
\begin{align}
l'' &= \frac{\ddot{l} - l'\ddot{s}}{\dot{s}^2} \\
&= \frac{\vec{a_h}\vec{n_r} - \kappa_r \dot{s} \vec{v_h}\vec{\tau_r} - l'\ddot{s}}{\dot{s}^2}
\end{align} \tag{2-22}
l′′=s˙2l¨−l′s¨=s˙2ahnr−κrs˙vhτr−l′s¨(2-22)
3 总结
推导涉及的几个思路:
- 找等价关系,做恒等变形;
- 找不到关系,就用定义;
- 乘以线性无关向量进行消元;
- 链式法则求导;
- 先近似,再求极限。