车辆运动学建模(一)

引言

车辆运动学模型对于学习自动驾驶知识,应用自动驾驶算法来说是必不可少的基础知识。网上对于这部分知识的讲解文章也有很多,但是有些细节没有过多描述,这对于新人来说可能不是那么友好。这个系列的文章将以简单的自行车模型为例,讲解车辆运动学模型的理论知识,最后将会编程进行验证。

位置建立在车辆后轴中心的运动学模型

概述

运动学模型建模的方法大致有自行车模型,阿克曼转向模型等,自行车模型里按照位置建立在后轴中心和质点又有不同的建模方式。这里以建立在后轴中心为例进行讲解。

运动

为什么要单独说运动呢,有两点:

第一点是运动学模型是以约束为前提建立的,换句话说,运动是按照一定规律动作的,没有规律就无所谓运动,因此约束的建立就是建立了运动的规则。

第二是从状态空间表示运动的角度出发的,现代控制理论中,等式左边是状态的运动,也就是状态的微分,而输入u,当前状态x决定了下一步状态相对于当前状态是怎么表示。

汽车几何模型


如上图所示,车辆用两个椭圆和一个直线表示,定义:

前轮相对于车辆自身姿态有一个转角{\delta}

车身相对于世界坐标系x轴的偏航角为\theta

车身速度方向v

前轮速度方向v_{f},前轮沿前轮方向速度为v_{fx},前轮沿车身垂直方向速度为v_{fy};

约束

车辆运动学模型中,实际的控制量为油门和转向,也就是速度v和车轮转角$\delta$。而汽车实际上是有三个自由度的,世界坐标系的位置x,y以及角度$\theta$,因此可以可以认为此运动中存在非完整约束,这其中的约束有两种表达形式:

1、前后车身速度约束,给定前后轮速度速度,约束量为沿着车身的速度大小相等,绕着车身的速度:后轴处为0,前轮处为角速度w

2、前后轮速度约束,给定前/后轮分别相对于x轴和y轴的速度,约束量为沿着车轮垂直方向的速度为0;

车身速度约束

首先我们来看第一种建模方式:

假设我们已知v_fv_r,分别表示前轮和后轮速度。那么根据前面描述的

针对前轮:

v_{fx} = v_f*cos(\delta)

v_{fy} = v_f*sin(\delta)

针对后轮:

v_{rx}=v

v_{ry}= 0

其中后轮方向和车身方向相同,因此毋庸置疑与车身垂直方向的速度为0;前轮速度并不是和车身速度方向一致,因此当把前轮速度分解到车身速度方向上,并不会出现0的情况。

同时,对于前轮,我们假设车身是刚体,因此有前轮分解在车身速度方向的速度和后轮车身方向的速度方向大小相同。

v_{fx} = v_{rx} = v

而对于前轮分解在垂直于车身方向的速度分量,根据角速度定义:$w=v/R$,其中$v$为选取点的切线方向,所以我们有:

w=v_{fy}/L

其中L为轴距。
因此,整合上面的公式,我们可以得到

w=\frac{v_f*sin(\delta)}{L}
=\frac{v_{fx}sin(\delta)}{Lcos(\delta)}=\frac{v*tan(\delta)}{L}

=\dot \theta

至此,我们就建立了针对于车身转向的约束,这里的约束的运动是角度的变化量,再加上另外两个自由度的运动:

\dot x = v*cos(\theta)

\dot y = v*sin(\theta)

上面三个公式解释起来,

就是状态是车辆的自由度,即姿态角和位置。

实际控制的自由度为方向盘转角和车速。

当然这里面没有使用加速度,是因为没有用到动力学模型。

结语

如有错误,请不吝指出!

May the force be with you!