车辆侧向运动学和动力学

刚刚开始学习做自动驾驶路径规划,前辈推荐我先去了解汽车的结构,最近看到《车辆动力学及其控制》这本书上对车辆的运动学和动力学模型讲解非常到位。打算分享一下其中的内容,并对它省略的一些过程进行补充推导。

最近越来越感觉到对初学者来说数学真是一切的基石,虽然现在已经有各种各样的库,不用自己搞清楚具体是怎么算的,但是对于一名算法工程师我觉得还是很有必要去了解底层的数学原理。

首先区分一下的运动学模型(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 车辆侧向运动的运动学模型图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 车辆侧向动力学(图片来源:《车辆动力学及其控制》)
图2 车辆侧向动力学(图片来源:《车辆动力学及其控制》)

 图3 轮胎侧偏角示意图(图片来源:《车辆动力学及其控制》)
图3 轮胎侧偏角示意图(图片来源:《车辆动力学及其控制》)

如图2所示,考虑二自由度车辆,两自由度用车辆侧向位置 y y y和车辆方向角 ψ \psi ψ表示;车辆的侧向位置可沿车辆横向轴到车辆旋转中心点 O O O测量得到,车辆方向角 ψ \psi ψ由与系统 X X X轴的夹角测得;车辆在质心处纵向速度用 v x v_x vx表示。图3中 δ \delta δ表示前轮的转向角, θ V f \theta_{Vf} θ

### 车辆动力学模型与运动学模型的区别及应用场景 #### 定义区别 车辆动力学模型关注的是车辆内部产生的力及其对外部环境的作用效果,特别是轮胎地面之间相互作用所产生的影响,比如侧偏现象等[^1]。而运动学模型主要描述物体位置随时间的变化规律而不涉及产生这些变化的原因或内在机制。 对于双轨模型(Bicycle Kinematics Model),这是一种典型的汽车运动学简化表示方法,它假设前轮可以独立于后轮进行转向操作,在不考虑任何驱动力的情况下模拟车辆行驶路径特性[^2]。 #### 应用场景差异 在自动驾驶领域内: - **动力学模型的应用** 为了设计有效的横向控制系统,工程师们通常会基于动力学原理来构建质心相对车道中心线的位置以及航向角度偏差的状态空间表达形式。这种建模方式能够更精确地反映实际行车状况下的动态响应特征,从而有助于提高自动导航系统的稳定性安全性性能表现[^3]。 ```python import numpy as np def dynamic_model(x, u, params): """ A simple implementation of a vehicle dynamics model. Parameters: x (numpy.ndarray): State vector [position_x, position_y, heading_angle]. u (numpy.ndarray): Input vector [steering_angle, velocity]. params (dict): Vehicle parameters including mass and tire properties. Returns: dxdt (numpy.ndarray): Derivative of state vector. """ # Extract states and inputs pos_x, pos_y, psi = x delta, v = u # Unpack parameters Lf = params['front_wheelbase'] Lr = params['rear_wheelbase'] # Compute derivatives based on bicycle dynamics equations beta = np.arctan((Lf * np.tan(delta)) / (Lf + Lr)) dpos_x_dt = v * np.cos(psi + beta) dpos_y_dt = v * np.sin(psi + beta) dpsi_dt = v * np.sin(beta) / Lr return np.array([dpos_x_dt, dpos_y_dt, dpsi_dt]) ``` - **运动学模型的应用** 当只需要预测未来一段时间内的大致轨迹走向而非具体加速度分布情况时,则可以选择采用较为简单的运动学近似方案来进行快速仿真计算或是初步规划路线任务处理工作。这类模型适用于低速条件下或者对精度要求不是特别高的场合下使用。 ```python from math import sin, cos class BicycleKinematicModel(object): def __init__(self, wheel_base=2.7): self.wheel_base = wheel_base def update(self, x, y, theta, steer_angle, speed, dt): """Update the kinematic state.""" # Update orientation angle first due to dependency new_theta = theta + ((speed * tan(steer_angle)) / self.wheel_base) * dt # Then calculate updated positions using trigonometry new_x = x + speed * cos(new_theta) * dt new_y = y + speed * sin(new_theta) * dt return new_x, new_y, new_theta ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值