刚刚开始学习做自动驾驶路径规划,前辈推荐我先去了解汽车的结构,最近看到《车辆动力学及其控制》这本书上对车辆的运动学和动力学模型讲解非常到位。打算分享一下其中的内容,并对它省略的一些过程进行补充推导。
最近越来越感觉到对初学者来说数学真是一切的基石,虽然现在已经有各种各样的库,不用自己搞清楚具体是怎么算的,但是对于一名算法工程师我觉得还是很有必要去了解底层的数学原理。
首先区分一下的运动学模型(Kinetic Model)和动力学模型(Dynamic Model),这两个模型在刚听到的时候一直不了解其中的区别是什么。
- 运动学模型使用几何方法研究物体运动,只考虑物体的形状和运动关节,不考虑物体的质量和相互作用力,主要研究点和刚体的运动。
- 动力学模型研究力与运动的关系,以牛顿第二定律 F = m a F=ma F=ma为核心,分析力、质量与加速度的关系。
直观地理解,运动学模型关注物体的位置和姿态,动力学模型关注物体的加速度、角速度。
单车模型
要控制车辆运动,首先需要对车辆建立数学模型,反映车辆的真实特性,并且模型尽可能的简单实用。自行车模型是一种常见的车辆运动学模型,如图1所示,单车模型主要是以下几个假设:
- 假设忽略车辆在垂直方向的运动,只考虑车辆在 X O Y XOY XOY平面下的运动,车辆是一个二维平面上的运动物体;
- 假设车辆的两个前轮有一样的转动角度和速度等,两个后轮同样如此,前后的轮胎可以各用一个轮胎来描述;
- 假设车辆运动和自行车一样,前轮控制转角,后轮提供运动速度;
- 车身及悬架系统是刚性的。
要重视假设部分,了解模型的研究范围,后续复杂的研究很多都是在强假设的基础下,一步步弱化假设条件。了解了模型的研究范围,至少能够知道在研究一个什么东西。
车辆侧向运动学模型和动力学模型的代码实现:车辆侧向运动学和动力学模型
车辆侧向运动学模型推导
研究运动学模型,首先需要对车辆模型进行一定的假设:
- 车辆满足单车模型的假设;
- 假设车辆在低速情况下运行,车轮没有侧偏,车轮的速度方向就是车轮的转向角方向。
运动学模型,主要是研究车辆在低速的情况下的运动状态。低速状态下的车辆有一个非常好的性质,车轮没有侧偏,即车轮的速度矢量方向车轮转动的方向一致,即车轮转向角 δ f \delta_f δf和 δ r \delta_r δr表示的方向。
车轮的侧偏(可参考图3),是在车辆高速运动的情况下,轮胎与地面接触的地方扭曲了,轮胎实际受力的方向跟车辆转向机构转动的角度不一致。可以参考这个视频(车轮侧偏现象)1分20秒开始的现象,这时车轮的速度矢量方向和车轮的转动方向不一致。
图1 车辆侧向运动的运动学模型(图片来源:《车辆动力学及其控制》)
图中, A A A、 B B B、 C C C分别表示车辆模型前轮、后轮和质心的位置;车辆质心到点 A A A和到点 B B B的距离分别为 l f l_f lf和 l r l_r lr,车辆的轴距 L = l f + l r L=l_f + l_r L=lf+lr; δ f \delta_f δf和 δ r \delta_r δr分别表示前轮转角和后轮转角(实际情况中后轮转角一般为 0 0 0,书里为了理论的完整性引入了后轮转角); R R R表示车辆的转弯半径; V V V表示车辆质心处的速度,表示车辆实际运动的速度; β \beta β表示车辆的侧偏角,是车辆质心速度与车辆纵轴,即 A B AB AB,之间的夹角; ψ \psi ψ为车辆的横摆角,是车辆纵轴与世界坐标系之间的夹角,世界坐标系可以理解为最大的、不变的坐标系;车辆方向角(航向角、偏航角)为 γ = β + ψ \gamma = \beta + \psi γ=β+ψ。图中有一些角度可以根据几何关系自行推导一下。
先给出最终需要求的车辆的侧向运动学模型(书中的模型是用质心来分析的,也可以用后轮中心来分析):
{ x ˙ = v cos ( β + ψ ) y ˙ = v sin ( β + ψ ) ψ ˙ = v L cos ( β ) ( tan ( δ f ) − tan ( δ r ) ) \begin{equation} \left\{ \begin{aligned} &\dot{x} = v\cos(\beta + \psi) \\ &\dot{y} = v\sin(\beta + \psi) \\ &\dot{\psi} = \frac{v}{L}\cos(\beta)\left(\tan(\delta_f) - \tan(\delta_r)\right) \\ \end{aligned} \right. \end{equation} ⎩
⎨
⎧x˙=vcos(β+ψ)y˙=vsin(β+ψ)ψ˙=Lvcos(β)(tan(δf)−tan(δr))
这是最终需要求解的模型,运动学模型是用 x ˙ , y ˙ , ψ ˙ \dot{x}, \dot{y}, \dot{\psi} x˙,y˙,ψ˙三个物理量来描述车辆模型的运动状态。主要分析点和刚体的运动,不涉及物体受力情况。其中 x ˙ , y ˙ \dot{x}, \dot{y} x˙,y˙就是速度在世界坐标系下 x , y x, y x,y方向上的分量, ψ ˙ \dot{\psi} ψ˙为车辆的横摆角速率。
其中的 x ˙ , y ˙ \dot{x}, \dot{y} x˙,y˙比较好求,就是速度的分量,不展开分析。主要分析角速率 ψ ˙ \dot{\psi} ψ˙的计算,用 v , L , δ f , δ r , β v, L, \delta_f, \delta_r, \beta v,L,δf,δr,β这几个已知或比较容易测量的量来描述。
角速率 ψ ˙ \dot{\psi} ψ˙的计算可以套用圆周运动角速度和线速度的公式 v = ψ ˙ R v = \dot{\psi} R v=ψ˙R。
ψ ˙ = v R \begin{equation} \dot{\psi} = \frac{v}{R} \end{equation} ψ˙=Rv
其中转弯半径 R R R可以用两次正弦定理来计算:
{ O B sin ( ∠ O A B ) = A B sin ( ∠ A O B ) O B sin ( ∠ O C B ) = O C sin ( ∠ O B C ) \begin{equation} \left\{ \begin{aligned} &\frac{OB}{\sin(\angle{OAB})} = \frac{AB}{\sin(\angle{AOB})} \\ &\frac{OB}{\sin(\angle{OCB})} = \frac{OC}{\sin(\angle{OBC})} \end{aligned} \right. \end{equation} ⎩ ⎨ ⎧sin(∠OAB)OB=sin(∠AOB)ABsin(∠OCB)OB=sin(∠OBC)OC
R = O C = A B sin ( ∠ O A B ) sin ( ∠ A O B ) sin ( ∠ O B C ) sin ( ∠ O C B ) = L cos ( δ f ) sin ( δ f − δ r ) cos ( δ r ) cos ( β ) \begin{equation} R = OC = AB\frac{\sin(\angle{OAB})}{\sin(\angle{AOB})}\frac{\sin(\angle{OBC})}{\sin(\angle{OCB})} = L \frac{\cos(\delta_f)}{\sin(\delta_f - \delta_r)}\frac{\cos(\delta_r)}{\cos(\beta)} \end{equation} R=OC=ABsin(∠AOB)sin(∠OAB)sin(∠OCB)sin(∠OBC)=Lsin(δf−δr)cos(δf)cos(β)cos(δr)
最后把式(4)代入式(2)就能得到车辆模型横摆角速度的表达式,至此完成车辆动力学模型的推导。
ψ ˙ = v R = v L cos ( β ) ( tan ( δ f ) − tan ( δ r ) ) \begin{equation} \dot{\psi} = \frac{v}{R} = \frac{v}{L} \cos(\beta) (\tan(\delta_f) - \tan(\delta_r)) \end{equation} ψ˙=Rv=Lvcos(β)(tan(δf)−tan(δr))
车辆侧向动力学模型推导
侧向动力学模型,是车轮没有侧偏的假设不成立的情况,车在高速行驶时车轮存在侧偏,但同样是基于单车模型。书里为了推导简单,在推导动力学模型时就没考虑后轮转角(我觉得前面考虑了后轮转向角,后面又没考虑,有点混乱,但还是跟着书来),只用 δ \delta δ表示前轮的转向角。
图2 车辆侧向动力学(图片来源:《车辆动力学及其控制》)
图3 轮胎侧偏角示意图(图片来源:《车辆动力学及其控制》)
如图2所示,考虑二自由度车辆,两自由度用车辆侧向位置 y y y和车辆方向角 ψ \psi ψ表示;车辆的侧向位置可沿车辆横向轴到车辆旋转中心点 O O O测量得到,车辆方向角 ψ \psi ψ由与系统 X X X轴的夹角测得;车辆在质心处纵向速度用 v x v_x vx表示。图3中 δ \delta δ表示前轮的转向角, θ V f \theta_{Vf} θ