YeeKal
autopilot

自动驾驶-运动学模型

YeeKal
"#autopilot"
  • unicycle car model
  • length scale
  • time scale

normalize tf:

dx * dt -> dx

  • collision

自行车模型

bicycle_model.jpg

自行车模型中心点位于后车轮中心。$L$为前后轮距。

  • state:
    • x:
    • y
    • $\theta$: heading angle
    • v: velocity
    • $\kappa$: curvature
  • control:
    • $\phi$: steer angle
    • a: acceleration
    • $\delta$: steer angle rate
    • $\alpha$: sharpness, curvature rate
  • other parameters
    • s: path length

model1

推倒关系式:

linealize

You can get a discrete-time mode with Forward Euler Discretization with sampling time dt.

Using first degree Tayer expantion around zbar and ubar

where:

轨迹上的运动学模型(不包括速度)

对于任一变量 a:

因此上述运动学模型变为:

或者从曲线几何的角度也可一推倒出上述模型,其中注意到$\frac{tan(\phi)}{L}$实际就是由于方向盘转弯而导致的曲率,对于自行车模型.曲率和方向盘转角是一一对应的,因此运动学模型也可以写为:

曲率变化

曲率和方向盘转角是一一对应的,因此可以根据方向盘转角的范围求出曲率的范围,因此曲率的取值范围也是确定的. 但是考虑到舒适性以及可跟踪性,需要对曲率的变化率作出限制,在优化问题的求解上可以有多种处理办法.

第一种,把曲率$\kappa$本身作为控制量,限制曲率的取值范围.曲率的变化率的限制可以写入损失函数里面:

第二种,把曲率写成关于路径长度的函数表达式(表达式上保证连续变化),优化问题转变为求解表达式的参数. 比如把曲率写成关于路径长度多项式:

路径长度

在使用此模型通过优化的方法进行轨迹规划的问题上,这里的s的总长度是不确定的,因此如何对优化问题进行离散也是一个问题.

上述模型其实是一个非线性模型,需要对其进行线性化. 线性化的离散过程依赖路径的离散长度$ds = \eta$. 由于总路径长度不确定,因此我们可以固定离散个数,同时把$\eta$当作一个变量,并限定$\eta$的范围:$\eta \in [0, \eta_{max}]$,线性化后的模型:

控制量为${\eta_i, \kappa_i}$

另一种方法为把总长S当作一个变量,固定离散个数,每次迭代通过S/n得到离散的$\Delta s$