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

Frenet转Cartesian

1 明确目标

已知车辆质点在Frenet坐标系下的状态:

  • Frenet 坐标系下的纵向坐标: s s s
  • 纵向速度: s ˙ \dot{s} s˙
  • 纵向加速度: s ¨ \ddot{s} s¨
  • 横向坐标: l l l
  • 横向速度: l ˙ \dot{l} l˙
  • 横向加速度: l ¨ \ddot{l} l¨
  • 横向坐标变化率: l ′ l' l
  • 横向坐标的二阶变化率: l ′ ′ l'' l′′

已知参考线上任意点状态(下述状态在参考线生成后都可以通过计算得到):

  • 参考线上的任意点: s r s_r sr和其对应的 r r ⃗ \vec{r_r} rr
  • 参考线上任意点的单位切向量: τ r ⃗ \vec{\tau_r} τr
  • 参考线上任意点的单位法向量: n r ⃗ \vec{n_r} nr
  • 参考线上任意点的曲率: κ r \kappa_r κr
  • 参考线上任意点的曲率变化率: κ r ′ \kappa_r' κr

求解车辆质点在Cartesian坐标系下的状态:

  • 位置向量: r h ⃗ \vec{r_h} rh
  • 速度向量: v h ⃗ \vec{v_h} vh
  • 切线方向与 x x x轴夹角: θ h \theta_h θh
  • 加速度向量: a h ⃗ \vec{a_h} ah
  • 曲率: κ h \kappa_h κh

2 公式推导

2.1 基础公式汇总

为了方便查阅,现将前文《01Frenet与Cartesian坐标系(基础知识)》推导的Frenet基础公式汇总如下:

  • 核心关系

r h ⃗ = r r ⃗ + l n r ⃗ (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下的向量导数
    r h ⃗ ˙ = v h ⃗ = ∣ v h ⃗ ∣ τ h ⃗ = v h τ 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 ⃗ ˙ = κ h v h n h ⃗ (2-5) \dot{\vec{\tau_h}} = \kappa_hv_h\vec{n_h}\tag{2-5} τh ˙=κhvhnh (2-5)

    n h ⃗ ˙ = − κ h v h τ h ⃗ (2-6) \dot{\vec{n_h}} =-\kappa_hv_h\vec{\tau_h}\tag{2-6} nh ˙=κhvhτh (2-6)

    v h ⃗ ˙ = a h ⃗ = a τ τ h ⃗ + κ h v h 2 n h ⃗ (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下的向量导数
    r r ⃗ ˙ = v r ⃗ = ∣ v r ⃗ ∣ τ 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 ⃗ ˙ = κ r s ˙ n r ⃗ (2-9) \dot{\vec{\tau_r}} = \kappa_r \dot{s} \vec{n_r}\tag{2-9} τr ˙=κrs˙nr (2-9)

    n r ⃗ ˙ = − κ r s ˙ τ r ⃗ (2-10) \dot{\vec{n_r}} =-\kappa_r \dot{s}\vec{\tau_r}\tag{2-10} nr ˙=κrs˙τr (2-10)

2.2 求解 r h ⃗ \vec{r_h} rh

根据(2-1)有:
r h ⃗ = r r ⃗ + l n r ⃗ (2-11) \vec{r_h} = \vec{r_r} + l\vec{n_r}\tag{2-11} rh =rr +lnr (2-11)

2.3 求解 v h ⃗ \vec{v_h} vh

v h ⃗ = r h ⃗ ˙ = r r ⃗ ˙ + l ˙ n r ⃗ + l n r ⃗ ˙ = s τ r ⃗ + l ˙ n r ⃗ − κ r s ˙ τ r ⃗ (2-12) \begin{align} \vec{v_h} &= \dot{\vec{r_h}}\\ &= \dot{\vec{r_r}} + \dot{l}\vec{n_r} + l\dot{\vec{n_r}}\\ &= s\vec{\tau_r} + \dot{l}\vec{n_r} -\kappa_r\dot{s}\vec{\tau_r} \end{align}\tag{2-12} vh =rh ˙=rr ˙+l˙nr +lnr ˙=sτr +l˙nr κrs˙τr (2-12)

可以进一步求得
v h = ∣ v h ⃗ ∣ θ h = a r g ( v h ⃗ ) (2-13) \begin{align} v_h &= |\vec{v_h}|\\ \theta_h&=arg(\vec{v_h}) \end{align}\tag{2-13} vhθh=vh =arg(vh )(2-13)
其中,arg代表求向量的相位角。

求出了 v h ⃗ \vec{v_h} vh ,可以进一步求得
τ h ⃗ = v h ⃗ v h (2-14) \vec{\tau_h} = \frac{\vec{v_h}}{v_h} \tag{2-14} τh =vhvh (2-14)
对于二维平面,
n h ⃗ = A τ h ⃗ = [ 0 − 1 1 0 ] τ h ⃗ (2-15) \begin{align} \vec{n_h} &= A\vec{\tau_h} \\ &= \left[ \begin{array}{cc} 0 & -1 \\ 1 & 0 \\ \end{array} \right]\vec{\tau_h} \end{align}\tag{2-15} nh =Aτh =[0110]τh (2-15)
其中, A A A 是一个二维变换矩阵

Tips:如果是编码的话,(2-15)的乘法也可以直接通过调换坐标进行等价替换,可以进一步提升计算效率。例如, τ h ⃗ = ( x x 2 + y 2 , y x 2 + y 2 ) \vec{\tau_h}=(\frac{x}{\sqrt{x^2+y^2}},\frac{y}{\sqrt{x^2+y^2}}) τh =(x2+y2 x,x2+y2 y),则 n h ⃗ = ( − y x 2 + y 2 , x x 2 + y 2 ) \vec{n_h}=(\frac{-y}{\sqrt{x^2+y^2}},\frac{x}{\sqrt{x^2+y^2}}) nh =(x2+y2 y,x2+y2 x)

2.4 求解 a h ⃗ \vec{a_h} ah

a h ⃗ = v h ⃗ ˙ = s ˙ τ r ⃗ + s τ r ⃗ ˙ + l ¨ n r ⃗ + l ˙ n r ⃗ ˙ − κ r ( s ¨ τ r ⃗ + s ˙ τ r ⃗ ˙ ) = s ˙ τ r ⃗ + s κ r s ˙ n r ⃗ + l ¨ n r ⃗ + ( − κ r s ˙ τ r ⃗ l ˙ ) + ( − κ r s ¨ τ r ⃗ ) + ( − κ r s ˙ κ r s ˙ n r ⃗ ) = [ ( 1 − κ r l ˙ ) s ˙ − κ r s ¨ ] τ r ⃗ + ( κ r s s ˙ + l ¨ − κ r 2 s ˙ 2 ) n r ⃗ (2-16) \begin{align} \vec{a_h} &= \dot{\vec{v_h}}\\ &= \dot{s}\vec{\tau_r}+s\dot{\vec{\tau_r}} + \ddot{l}\vec{n_r} + \dot{l}\dot{\vec{n_r}} - \kappa_r(\ddot{s}\vec{\tau_r} + \dot{s}\dot{\vec{\tau_r}})\\ &= \dot{s}\vec{\tau_r} + s\kappa_r \dot{s} \vec{n_r} + \ddot{l}\vec{n_r} +(-\kappa_r \dot{s}\vec{\tau_r}\dot{l})+(-\kappa_r\ddot{s}\vec{\tau_r}) + (-\kappa_r\dot{s}\kappa_r \dot{s} \vec{n_r})\\ &=[(1-\kappa_r\dot{l})\dot{s}-\kappa_r\ddot{s}]\vec{\tau_r} + (\kappa_rs\dot{s}+\ddot{l}-\kappa_r^2\dot{s}^2)\vec{n_r} \end{align}\tag{2-16} ah =vh ˙=s˙τr +sτr ˙+l¨nr +l˙nr ˙κr(s¨τr +s˙τr ˙)=s˙τr +sκrs˙nr +l¨nr +κrs˙τr l˙)+κrs¨τr )+(κrs˙κrs˙nr )=[(1κrl˙)s˙κrs¨]τr +(κrss˙+l¨κr2s˙2)nr (2-16)

可以进一步求得
a τ = a h ⃗ τ h ⃗ a n = a h ⃗ n h ⃗ (2-17) \begin{align} a_\tau &= \vec{a_h}\vec{\tau_h} \\ a_n &=\vec{a_h}\vec{n_h} \end{align}\tag{2-17} aτan=ah τh =ah nh (2-17)

2.5 求解 κ h \kappa_h κh

由(2-7)可得
κ h = a n v h 2 (2-18) \kappa_h = \frac{a_n}{v_h^2} \tag{2-18} κh=vh2an(2-18)

3 总结

  • 还是坚持使用向量推导的一贯作风,不引入三角函数,会使得表达式更简洁;
  • 编码时使用向量实现是否比三角函数更快还需要进一步实验(理论上会更快)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

穿越临界点

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

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

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

打赏作者

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

抵扣说明:

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

余额充值