规划决策篇:1.1笛卡尔坐标--->Frenet坐标转换公式推导

2,153 阅读6分钟

预备知识

什么是自然坐标系

在笛卡尔坐标系下,以xx轴坐标和yy轴坐标确定一个点,xx轴与yy轴的方向是一直固定不变的,下图的xyxy轴,yy轴的单位方向向量为(0,1),xx轴的方向向量为(1,0),即固定xyxy轴构成了确定一个坐标点位的参考系,而自然坐标系下的参考系不再是固定方向的,参考系是一条曲线,即下图红色曲线。

黑色曲线由车辆的轨迹点组成,现考虑某时刻的车辆轨迹点tt,在笛卡尔坐标系下的坐标即为(xt,yt)(x_t,y_t),但是以笛卡尔坐标系描述车辆位置,在路径规划时不便于进行计算,需要将其投影到自然坐标系,进行横纵向的解耦。

下图以道路中心线作为自然坐标系的参考线,我们如何计算tt点的自然坐标呢,首先找到tt点在参考线上的投影点bb,投影点bb到参考线起点的弧长为ssbb点到tt点的距离为ll,那么我们就称以参考线为参考系的tt点的自然坐标为(s,l)(s,l)

这样看来自然坐标和笛卡尔坐标还是比较相似的,只不过自然坐标系下两个轴的方向向量不是固定不变的,需要我们通过计算投影来获得两个轴的方向向量。

本文要讲解的就是基于指定条件笛卡尔坐标和自然坐标(Frenet坐标)的相互转化,有数学推导,不需要了解推导过程的可以直接看转换公式。

image.png

二维Frenet公式

Frenet公式有三维的表达形式,但是在自动驾驶领域,局部的道路路面看作是二维平面,不太关注高度信息,所以这里直接考虑二维的情况。

笛卡尔坐标系下,考虑曲线上一点,其位矢r\overrightarrow{r}、单位法向量n\overrightarrow{n}、单位切向量τ\overrightarrow{\tau}如下:

image.png

图1

1.求解切向量τ\overrightarrow{\tau}对弧长ss的导数dτds\frac{d\overrightarrow{\tau}}{ds}

考虑点移动了一个微小的位移,转过dθd\theta,当dθ0d\theta\rightarrow 0dτd\overrightarrow{\tau}的方向趋近于τ\overrightarrow{\tau}的垂直方向,与n\overrightarrow{n}的方向一致,又τ\overrightarrow{\tau}+dτd\overrightarrow{\tau}dτd\overrightarrow{\tau}都是单位向量,所以矢量三角是等腰三角形,有:

dτ=21sin(dθ2)nd\overrightarrow{\tau} = 2 * 1* sin(\frac{d\theta}{2})*\overrightarrow{n}\\

所以:

dτds=limθ02sin(dθ2)dsn=2dθ2dsn=dθdsn=kn\frac{d\overrightarrow{\tau}}{ds} = \lim_{\theta\rightarrow0}\frac{2 * sin(\frac{d\theta}{2})}{ds} * \overrightarrow{n}= \frac{2*\frac{d\theta}{2}}{ds}*\overrightarrow{n}= \frac{d\theta}{ds}*\overrightarrow{n}=k*\overrightarrow{n}\\

k为该点处的曲率。

2.求解法向量n\overrightarrow{n}对弧长s的导数dnds\frac{d\overrightarrow{n}}{ds}

考虑指点移动了一个微小的位移,转过dθd\theta,当dθ0d\theta\rightarrow 0dnd\overrightarrow{n}的方向趋近于n\overrightarrow{n}的垂直方向,与τ\overrightarrow{\tau}的方向相反,所以有:

dn=21sin(dθ2)τd\overrightarrow{n} = -2 * 1* sin(\frac{d\theta}{2})*\overrightarrow{\tau}\\

所以:

dnds=limθ02sin(dθ2)dsτ=2dθ2dsτ=dθdsτ=kτ\frac{d\overrightarrow{n}}{ds} = \lim_{\theta\rightarrow0}\frac{-2 * sin(\frac{d\theta}{2})}{ds} * \overrightarrow{\tau}= \frac{-2*\frac{d\theta}{2}}{ds}*\overrightarrow{\tau}= -\frac{d\theta}{ds}*\overrightarrow{\tau}=-k*\overrightarrow{\tau}\\

这里得到两个重要公式:

dτds=kn(1)\frac{d\overrightarrow{\tau}}{ds} =k*\overrightarrow{n}\tag{1}
dnds=kτ(2)\frac{d\overrightarrow{n}}{ds} =-k*\overrightarrow{\tau}\tag{2}

切向量和法向量对时间求导

链式转换一下:

dτdt=dτdsdsdt=knv(3)\frac{d\overrightarrow{\tau}}{dt} =\frac{d\overrightarrow{\tau}}{ds}\frac{ds}{dt}=k*\overrightarrow{n}*|\overrightarrow{v}|\tag{3}
dndt=dndsdsdt=kτv(4)\frac{d\overrightarrow{n}}{dt} =\frac{d\overrightarrow{n}}{ds}\frac{ds}{dt}=-k*\overrightarrow{\tau}*|\overrightarrow{v}|\tag{4}

曲线上点的速度和加速度公式(对时间求导)

image.png

图2

drd\overrightarrow{r}趋近于0时,drd\overrightarrow{r}的方向趋近于τ\overrightarrow{\tau}的方向,即切线方向,dr|d\overrightarrow{r}|趋近于dsds

位矢对时间的一阶导数即速度v:

r˙=drdt=drdtτ=dsdtτ=vτ\overrightarrow{\dot{r}}=\frac{d\overrightarrow{r}}{dt} = \frac{|d\overrightarrow{r}|}{dt} * \overrightarrow{\tau} = \frac{ds}{dt} * \overrightarrow{\tau}=|\overrightarrow{v}|* \overrightarrow{\tau}\\

位矢对时间的二阶导数即加速度a:

这里用到了乘法求导法则,同时用到了公式1的结论:

r¨=dr˙dt=d(vτ)dt=dvdtτ+dτdtv\overrightarrow{\ddot{r}}=\frac{d\overrightarrow{\dot{r}}}{dt} = \frac{d(|\overrightarrow{v}|* \overrightarrow{\tau})}{dt} =\frac{d|\overrightarrow{v}|}{dt}*\overrightarrow{\tau}+\frac{d\overrightarrow{\tau}}{dt}*|\overrightarrow{v}|\\

那么dτdt\frac{d\overrightarrow{\tau}}{dt}怎么求呢,要结合公式1的结论以及链式求导法则:

dτdt=dτdsdsdt=knv\frac{d\overrightarrow{\tau}}{dt}=\frac{d\overrightarrow{\tau}}{ds}\frac{ds}{dt}=k*\overrightarrow{n}*|\overrightarrow{v}|

所以:

r¨=dvdtτ+knvv=v˙τ+knv2\overrightarrow{\ddot{r}}=\frac{d|\overrightarrow{v}|}{dt}*\overrightarrow{\tau}+k*\overrightarrow{n}*|\overrightarrow{v}|*|\overrightarrow{v}|=\dot{v}*\overrightarrow{\tau}+k*\overrightarrow{n}*|\overrightarrow{v}|^2\\

可以看出曲线上的点的加速度由切向加速度和法向加速度组成。

这一步得到两个重要基础公式:

r˙=vτ(5)\overrightarrow{\dot{r}}=|\overrightarrow{v}|* \overrightarrow{\tau}\tag{5}
r¨=v˙τ+knv2(6)\overrightarrow{\ddot{r}}=\dot{v}*\overrightarrow{\tau}+k*\overrightarrow{n}*|\overrightarrow{v}|^2\tag{6}

预备知识总结

变量名称含义
r\overrightarrow{r}曲线上某点在笛卡尔坐标系下的位矢
r˙\overrightarrow{\dot{r}}曲线上某点在笛卡尔坐标系下的速度向量(v\overrightarrow{v}),对时间的导数
r¨\overrightarrow{\ddot{r}}曲线上某点在笛卡尔坐标系下的加速度向量(a\overrightarrow{a}),对时间的导数
τ\overrightarrow{\tau}曲线上某点在笛卡尔坐标系下的切向量(单位向量)
n\overrightarrow{n}曲线上某点在笛卡尔坐标系下的法向量(单位向量)
dτds\frac{d\overrightarrow{\tau}}{ds}曲线上某点的单位切向量对弧长的一阶导数
dnds\frac{d\overrightarrow{n}}{ds}曲线上某点的单位法向量对弧长的一阶导数
τ˙\overrightarrow{\dot{\tau}}曲线上某点的单位切向量对时间的一阶导数
n˙\overrightarrow{\dot{n}}曲线上某点的单位法向量对时间的一阶导数
kk曲线上某点的曲率

而对于6个基础公式:

公式(1)、(2)描绘的是曲线点切向量、法向量对曲线弧长的导数关系

公式(3)、(4)描绘的是曲线点切向量、法向量对时间的导数关系

公式(5)、(6)描绘的是曲线点的位矢对时间的一阶导、二阶导关系

现在考虑一下两条曲线,一条曲线是车辆的轨迹线,一条曲线是参考线(即Frenet坐标系下的参考线)

image.png

所谓使用参考线作为坐标轴的意思就是:对轨迹上任意一点tt,找到该点到参考线的投影点bb,既然是投影点那么tt点必然在bb点的法向量方向上,考虑参考线上点bb到参考线的起始点弧长为ssttbb的法向量方向上的距离为ll那么我们就把坐标(ss,ll)称为以轨迹线为参考系的Frenet坐标

为了方便推导笛卡尔坐标到Frenet坐标的转换公式,结合公式(1)、(2)、(3)、(4)、(5)、(6),可以得到以下基础公式:

rt˙=vtτt(7)\overrightarrow{\dot{r_t}}=|\overrightarrow{v_t}|* \overrightarrow{\tau_t}\tag{7}
rb˙=s˙τb(8)\overrightarrow{\dot{r_b}}=\dot{s}* \overrightarrow{\tau_b}\tag{8}
τt˙=ktntvt(9)\overrightarrow{\dot{\tau_t}}=k_t*\overrightarrow{n_t}*|\overrightarrow{v_t}|\tag{9}
nt˙=ktτtvt(10)\overrightarrow{\dot{n_t}}=-k_t*\overrightarrow{\tau_t}*|\overrightarrow{v_t}|\tag{10}
τb˙=kbnbvb(11)\overrightarrow{\dot{\tau_b}}=k_b*\overrightarrow{n_b}*|\overrightarrow{v_b}|\tag{11}
nb˙=kbτbvb(12)\overrightarrow{\dot{n_b}}=-k_b*\overrightarrow{\tau_b}*|\overrightarrow{v_b}|\tag{12}
rt¨=at=vt˙τt+kntvt2(13)\overrightarrow{\ddot{r_t}}=\overrightarrow{a_t}=\dot{v_t}*\overrightarrow{\tau_t}+k*\overrightarrow{n_t}*|\overrightarrow{v_t}|^2\tag{13}

公式(7)~(13)分别描绘了轨迹点位矢对时间的一阶导(公式7)、参考线投影点位矢对时间的一阶导(公式8)、轨迹点切向量对时间的一阶导(公式9)、轨迹点法向量对时间的一阶导(公式10)、参考线投影点切向量对时间的一阶导(公式11)、参考线投影点法向量对时间的一阶导(公式12)、轨迹点加速度(公式13)

推导

经过预备知识的学习,问题就转化为了:

若已知笛卡尔坐标系下:

轨迹点的位矢、速度、加速度、曲率:rt\overrightarrow{r_t}vt\overrightarrow{v_t}at\overrightarrow{a_t}ktk_t

参考线的起点坐标:(xs,ys)(x_s,y_s)

求Frenet坐标系下:

sss˙\dot{s}s¨\ddot{s}lldlds(l)\frac{dl}{ds}(l^{'})d2lds(l)\frac{d^2l}{ds}(l^{''})

1.求解第1步——计算投影点相关信息:

依据几何关系找到当前待计算轨迹点tt在参考线上的投影点并计算(具体方法再写一篇):

投影点的切向量和法向量:τb\overrightarrow{\tau_b}nb\overrightarrow{n_b} ,投影点的位矢、曲率、方向角:rb=(xb,yb)\overrightarrow{r_b}=(x_b,y_b)kbk_bθb\theta_b

根据简单的三角函数关系可得: τb=(cosθb,sinθb)\overrightarrow{\tau_b}=(cos\theta_b,sin\theta_b)nb=(sinθb,cosθb)\overrightarrow{n_b}=(-sin\theta_b,cos\theta_b)

2.依据向量关系求解:

(1).求解ll

依据向量关系rt=rb+lnb\overrightarrow{r_t}=\overrightarrow{r_b}+l*\overrightarrow{n_b},两边同时乘nb\overrightarrow{n_b}可得:l=nb(rtrb)l=\overrightarrow{n_b}(\overrightarrow{r_t}-\overrightarrow{r_b})

(2).求解s˙\dot{s}

image.png

(3).求解l˙\dot{l}

在(2)的推导中:两边同时乘τb\overrightarrow{\tau_b}的步骤改为两边同时乘nb\overrightarrow{n_b}直接得到:

l˙=vtnb\dot{l} = \overrightarrow{v_t}·\overrightarrow{n_b}\\

(4).求解l=dldsl^{'} = \frac{dl}{ds}

dlds=dldtdsdt=l˙s˙=vtnbvtcos(θtθb)1lkb\frac{dl}{ds}=\frac{\frac{dl}{dt}}{\frac{ds}{dt}}=\frac{\dot{l}}{\dot{s}}= \frac{\overrightarrow{v_t}·\overrightarrow{n_b}}{\frac{|\overrightarrow{v_t}|cos(\theta_t-\theta_b)}{1-l*k_b}}\\

(5).求解s¨\ddot{s}

这一步骤太麻烦了,先给个结论:

s¨=atτb1kbl+s˙2kbl1kbl+s˙2(kbl+kbl)1kbl\ddot{s} = \frac{\overrightarrow{a_t}·\overrightarrow{\tau_b}}{1-k_b·l} + \frac{\dot{s}^2·k_b·l^{'}}{1-k_b·l} + \frac{\dot{s}^2(k^{'}_b l+k_b l^{'})}{1-k_b l}

(6).求解l¨\ddot{l}

l¨=atnbkb(1kbl)s˙2\ddot{l}=\overrightarrow{a_t}·\overrightarrow{n_b}-k_b(1-k_b l)\dot{s}^2

(7).求解l=d2ldsl^{''}=\frac{d^2l}{ds}

l=d2lds=dl˙s˙ds=l¨ls¨s˙2l^{''}=\frac{d^2l}{ds}=\frac{d\frac{\dot{l}}{\dot{s}}}{ds}=\frac{\ddot{l}-l^{'}\ddot{s}}{\dot{s}^2}

笛卡尔坐标转Frenet坐标公式总结

l=nb(rtrb)l=\overrightarrow{n_b}(\overrightarrow{r_t}-\overrightarrow{r_b})\\
l˙=vtnb\dot{l} = \overrightarrow{v_t}·\overrightarrow{n_b}\\
l¨=atnbkb(1kbl)s˙2\ddot{l}=\overrightarrow{a_t}·\overrightarrow{n_b}-k_b(1-k_b l)\dot{s}^2
s˙=vtcos(θtθb)1kbl\dot{s} = \frac{|v_t|·cos(\theta_t-\theta_b)}{1-k_b·l}
s¨=atτb1kbl+s˙2kbl1kbl+s˙2(kbl+kbl)1kbl\ddot{s} = \frac{\overrightarrow{a_t}·\overrightarrow{\tau_b}}{1-k_b·l} + \frac{\dot{s}^2·k_b·l^{'}}{1-k_b·l} + \frac{\dot{s}^2(k^{'}_b l+k_b l^{'})}{1-k_b l}
l=l˙s˙l^{'}=\frac{\dot{l}}{\dot{s}}\\
l=d2lds=dl˙s˙ds=l¨ls¨s˙2l^{''}=\frac{d^2l}{ds}=\frac{d\frac{\dot{l}}{\dot{s}}}{ds}=\frac{\ddot{l}-l^{'}\ddot{s}}{\dot{s}^2}

其中tt为下标的量代表轨迹点(车辆点)相关的信息,bb为下标的量代表投影点相关的信息。

想要完成笛卡尔坐标到自然坐标系的转换,不仅仅是套用计算公式就行,我们需要知道车辆的速度、加速度、位矢,投影点的曲率、切向量、法向量,那么如何得到这些信息呢,车辆轨迹点的信息应该是上游的定位模块给输出给我们,而匹配点信息需要依据高精地图给出的参考线(是离散点)信息进行计算,下一篇讲解投影点相关信息的计算。