02Frenet与Cartesian坐标系(Cartesian转Frenet公式推导)

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/2x(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˙=ls˙(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+ls¨(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=(rhrr)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˙nrlκ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˙=1lκ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τrvhnr(1krl)(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(krs˙l+κrls˙)=1κrl1(ahτr+vhκrs˙nr)+(1κrl)1s˙2(krl+κrl)=1κrlahτr+κrvhnrs˙+(krl+κrl)s˙2=1κrlahτr+κrl˙s˙+(krl+κ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(1lκ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¨ls¨=s˙2ahnrκrs˙vhτrls¨(2-22)

3 总结

推导涉及的几个思路:

  • 找等价关系,做恒等变形;
  • 找不到关系,就用定义;
  • 乘以线性无关向量进行消元;
  • 链式法则求导;
  • 先近似,再求极限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

穿越临界点

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

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

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

打赏作者

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

抵扣说明:

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

余额充值