七岁的那一年,抓住那只蝉,以为能抓住夏天。—如烟 五月天
🏰代码及环境配置:请参考0.2 环境配置和代码运行 | 自动驾驶小白说!
要进行轨迹规划算法,首先我们要建立运动学模型来描述车辆的运动.但是真实世界中车辆的运动是复杂的,为了描述和预测车辆在二维平面上的运动,需要对车辆的运动进行简化.运动学模型基于一系列假设,如车辆行驶速度变化缓慢、车身和悬架系统为刚性、车辆运动和转向由前轮驱动等,从而将复杂的车辆动态特性简化为更易于处理的形式.有这几种常见的运动学模型:
- 自行车模型(Bicycle Model)
- 阿克曼转向模型(Ackermann steering geometry)
我们将分两节介绍这两种模型,本节介绍自行车模型
在进行运动规划时,大部分情况为了减少计算量,我们常用自行车进行相关状态转移.自行车模型是一种简单且有效的简化方式,它基于几个基本假设:
- 车辆只有前、后两个车轮,且后轮为从动轮(即不转向)。
- 忽略车辆的垂直方向运动,只考虑二维平面内的运动。
- 车辆低速运动,此时滑移角可以忽略不计。
自行车模型将车辆的运动简化为一个两轮模型,即前转向轮和后从动轮,他们位于车辆的中轴线上.自行车模型可以基于不同的参考点(前轴中心,质心,后轴中心),规划算法一般采取后轴中心为参考点,所以我们主要介绍后轴中心的自行车模型.
1.1.1 以后轴中心为参考点的自行车模型
(1) 基本参数
- v : v: v:车辆速度。
- ( X , Y ) : (X,Y): (X,Y):车辆质心位置.
- O : O: O:车辆瞬时转向中心.
- R : R: R:车辆瞬时转向半径.
- θ : \theta: θ:航向角,车辆当前位置与横坐标的夹角,即车辆的行驶方向。
- ω : \omega: ω:车辆绕瞬时转向中心旋转的角速度。
- δ : \delta: δ:前轮转角,车辆前轮相对于车辆纵轴的转角。
- L : L: L:轴距,前后轮之间的距离。
- Δ t \Delta t Δt:时间步长
(2) 速度分解
首先,将速度v分解为横向和纵向分量:
- 横向速度分量: v x = v ∗ c o s ( θ ) v_x = v*cos(\theta) vx=v∗cos(θ)
- 纵向速度分量: v y = v ∗ s i n ( θ ) v_y = v*sin(\theta) vy=v∗sin(θ)
(3) 航向角变化率
航向角变化率 θ ˙ \dot{\theta} θ˙,可以近似认为是角速度,于是可以推导出它的表达:
θ ˙ ≈ ω = v R = v L tan ( δ ) \begin{align*} \dot{\theta}&\approx{\omega} \\ &=\frac{v}R \\ &= \frac{v}{L} \tan(\delta)\end{align*} θ˙≈ω=Rv=Lvtan(δ)
(4) 状态转移方程
这样就得到了完整的状态转移方程
x r i + 1 = x r i + v x i Δ t y r i + 1 = y r i + v y i Δ t θ i + 1 = θ i + θ ˙ Δ t ≈ θ + v L tan ( δ ) Δ t \begin{align*} x_{r_{i+1}} &= x_{r_i} + v_{x_i} \Delta t \\ y_{r_{i+1}} &= y_{r_i} + v_{y_i} \Delta t \\ \theta_{i+1} &= \theta_i + \dot{\theta} \Delta t \approx \theta + \frac{v}{L} \tan(\delta) \Delta t \end{align*} xri+1yri+1θi+1=xri+vxiΔt=yri+vyiΔt