作者简介:申泽邦(Adam Shan),兰州大学在读硕士研究生,主攻无人驾驶,深度学习;文章来源:https://blog.csdn.net/adamshan/article/details/78696874

在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的。车辆运动模型就是一类能够描述我们的车辆的运动规律的模型。显然,越复杂的模型就越接近现实中的车辆运动规律,本节我们一起了解一下两个广泛使用的车辆模型——运动学自行车模型(Kinematic Bicycle Model) 和 动力学自行车模型(Dynamic Bicycle Model)

无人驾驶系统往往分成感知,决策和控制三个模块,其中无人车的路径规划和底层控制是工作在不同的层的,路径规划层往往会基于更加高层的(感知层,定位层)的信息和底层的(控制层)的实时信息指定行驶的路径,那么从路径规划层传来的就是车辆的参考路径,控制系统需要做的就是严格按照这个参考路径(以及速度等控制输入量)去驾驶我们的车辆,一般来说,我们会用多项式的行驶来描述这个路径曲线,如下所示的三次多项式就可以描述绝大多数的路径了:

y=ax3+bx2+cx+dy=ax^3+bx^2+cx+dy=ax3+bx2+cx+d

无人车的控制依赖于一项称为 模型预测控制(Model Predictive Control) 的简单技术,这种控制的方法是产生一系列的可行的(也就是说在实际上车辆能够做到的)控制输入,基于一定的算法(往往是带约束的非线性优化算法)来调整这一系列的控制输入,使得一个 损失函数(cost function) 最小化,这个损失函数的求解就要依赖于车辆的运动学或者动力学模型的输出和参考的路径的差值求得,这些模型正是本节介绍的内容。

自行车模型(Bicycle Model)

首先我们要简化汽车运动,其中自行车模型就是简单且有效的简化方式。自行车模型基于如下几个假设:

  • 车辆在垂直方向的运动被忽略掉了,也就是说我们描述的车辆是一个二维平面上的运动物体(可以等价与我们是站在天空中的俯视视角)

  • 我们假设车辆的结构就像自行车一样,也就是说车辆的前面两个轮胎拥有一直的角度和转速等,同样后面的两个轮胎也是如此,那么前后的轮胎就可以各用一个轮胎来描述

  • 我们假设车辆运动也和自行车一样,这意味着是前面的轮胎控制这车辆的转角

    首先我们简单的在一个二维平面上描述一个车辆:

其中 θ是其在Yaw方向的偏转角度,它是相对于x轴的逆时针方向的角度,v是θ方向的速度,L是车辆的轴距(前后轮胎的距离), (x,y)是车辆的坐标。

下图是该车辆的自行车模型:

运动学自行车模型

作为一种自行车模型,运动学自行车模型也假定车辆形如一辆自行车,整个的控制量可以简化为(a,δf)(a, δ_{f})(a,δf​),其中a是车辆的加速度,踩油门踏板意味着正的加速度,踩刹车踏板意味着负的加速度。δf)δ_{f})δf​)是我们的方向盘转角,我们假定这个方向盘转角就是前轮胎当前的转角。这样,我们使用两个量描述了车辆的控制输入(control input)。

然后我们定义我们模型中的状态量,运动学自行车模型使用四个状态量来描述车辆的当前状态:

x: 即车辆当前的坐标
y: 即车辆当前的坐标
ψ: 即车辆当前的偏航角(Yaw方向的偏角,往往用弧度来描述, 逆时针方向为正)
v: 即车辆的速度

一个简单的运动学自行车模型如图所示:

其中lfl_{f}lf​和lrl_{r}lr​为前轮和后轮到车辆重心的距离。那么更具运动学定理,运动学自行车模型中的各个状态量的更新公式如下:

其中β可以由如下公式计算求得:

由于绝大多数的汽车后轮都不能够偏转,所以我们的自行车模型就假定后轮的转角控制输入δr=0δ_{r}=0δr​=0,也就是说,方向盘上的控制输入,都反映到了前轮的转角上了。

动力学自行车模型

前面的车辆运动学自行车模型其实还隐含着一个重要的假设,那就是: 车前轮的方向即是车辆当前的速度方向,在实际车辆运动过程中,当车辆在以相对高的速度行驶时,车轮的方向并不一定车辆当前的速度方向,这个时候,我们引入车辆的动力学自行车模型。

车辆动力学模型通过对轮胎和路面之间的复杂相互作用来描述车辆的运动。在一个动力模型中,我们需要考虑各种各样的力的作用,他们可以大致分为两类: 纵向力(Longitudinal force) 和 侧向力(Lateral force), 纵向力就是使车辆前后移动的力量,而侧向力则促使车辆在横向移动,在力的相互作用过程中,轮胎起着决定性的作用(根据一定的物理常识,轮胎是车辆运动的一个重要的力的来源)。

我们仍然以上图为例,考虑一个简单的动力学模型,这个模型的各个状态量为(x˙,y˙,φ˙,X,Y)(\dot{x},\dot{y},\dot{\varphi},X,Y)(x˙,y˙​,φ˙​,X,Y),其中x˙\dot{x}x˙和y˙\dot{y}y˙​表示的是车身的纵向和侧向速度,φ˙\dot{\varphi}φ˙​表示的是偏航角速度,(X,Y)表示车车身的当前坐标,这些状态量在时间尺度上的微分方程如下:

其中,m和IzI_{z}Iz​分别表示车辆的质量和偏航惯性(yaw inertia), Fc,fF_{c,f}Fc,f​和Fc,rF_{c,r}Fc,r​分别表示的是前后轮胎受到的侧向力,他们可以通过具体的轮胎模型求得,在简单的线性轮胎模型中,Fc,i,(i=forr)F_{c,i}, (i=f or r)Fc,i​,(i=forr)表示为:

Fc,i=CαiαiF_{c,i}=C_{\alpha_{i}}\alpha_{i}Fc,i​=Cαi​​αi​

其中αi\alpha_{i}αi​是轮胎的偏转角,这个偏转角是指轮胎当前的朝向和当前的速度的夹角,CαiC_{\alpha_{i}}Cαi​​被称为轮胎偏滚刚度(tire cornering stiffness)。

运动学自行车模型的Python实现

我们使用Python代码简单实现一个运动学自行车模型类,作为后期我们使用模型预测控制的车辆模型。

from __future__ import print_functionimport mathclass KinematicModel(object):def __init__(self, x, y, psi, v, f_len, r_len):self.x = xself.y = yself.psi = psiself.v = vself.f_len = f_lenself.r_len = r_lendef get_state(self):return self.x, self.y, self.psi, self.vdef update_state(self, a, delta, dt):beta = math.atan((self.r_len / (self.r_len + self.f_len)) * math.tan(delta))self.x = self.x + self.v * math.cos(self.psi * beta) * dtself.y = self.y + self.v * math.sin(self.psi * beta) * dtself.psi = self.psi + (self.v / self.f_len) * math.sin(beta) * dtself.v = self.v + a * dtreturn self.x, self.y, self.psi, self.v

这个简易的车辆模型中,我们的控制量包含了一个前胎的转角和一个加速度a,由于受车辆机械的限制,车辆本身有很多动作是实现不了的,比如说加速度a的值不可能过大,轮胎的转角也会有极限,我们称这种性质叫做模型非完整性(model nonholonomic)

运动学自行车模型和动力学自行车模型相关推荐

  1. 无人驾驶汽车系统入门(五)——运动学自行车模型和动力学自行车模型

    无人驾驶汽车系统入门(五)--运动学自行车模型和动力学自行车模型 在简要了解了PID控制以后,我们就要接触一些现代的控制算法.在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的.车辆运动模型 ...

  2. 自动驾驶汽车系统入门——运动科学自行车科学模型和动力学自行车模型简易解释

    自动驾驶汽车系统入门--运动科学自行车模型和动力科学自行车模型 在简要了解了PID控制以后,我们就要接触一些现代的控制算法. 在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的. 车辆运动模 ...

  3. 代码解析之自行车模型在Apollo规划中的应用

    大家好,我已经把CSDN上的博客迁移到了知乎上,欢迎大家在知乎关注我的专栏慢慢悠悠小马车(https://zhuanlan.zhihu.com/duangduangduang).希望大家可以多多交流, ...

  4. 无人驾驶-控制-自行车模型

    无人驾驶-控制-自行车模型 一.综述 1.1 简介 在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的.车辆运动模型就 是一类能够描述我们的车辆的运动规律的模型.显然,越复杂的模型就越接近现 ...

  5. 自动驾驶 4-2 运动学自行车模型 The Kinematic Bicycle Model

    欢迎回来.在上一段视频中 我们讨论了运动学建模和 和束缚的基础知识,并介绍了ICR(瞬时旋转中心)的概念. 本课程中,我们将进行运动自行车模型, 这是一种经典模型, 在正常驾驶条件下捕捉车辆运动时表现 ...

  6. 4.5 自行车模型的横向动力学(第四章 车辆的动态建模)

    4.5 自行车模型的横向动力学 (Lateral Dynamics of Bicycle Model) 在前面的视频中,我们覆盖了汽车纵向动力学.在本课中,我们将涵盖基于自行车建模方法的四轮汽车的动态 ...

  7. 4.2 运动学自行车模型(第四章 车辆的动态建模)

    4.2 运动学自行车模型(The Kinematic Bicycle Model) 要控制车辆的运动,首先要对车辆的运动建立数字化模型,模型建立的越准确,对车辆运动的描述越准确,对车辆的跟踪控制的效果 ...

  8. 路径规划与避障算法(六)---DWA算法流程之二---自行车模型与路径采样空间

    版权声明:本文为博主原创文章,原创不易, 转载请联系博主. 本篇博客主要介绍如何生成速度采样空间以及利用车辆运动学模型生成对应的轨迹空间 1.运动学模型 车辆运动学模型与动力学模型的建立是出于车辆运动 ...

  9. 并发模型和I/O模型介绍

    并发模型 常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见.由于go语言的兴起,CSP模型也越来越受关注.基于锁的共享内存模型 ...

最新文章

  1. unix环境高级编程 pdf_UNIX系统编程宝典,每一本都值得程序员珍藏
  2. python操作redis--------------数据库增删改查
  3. java线程暂停与恢复suspend和resume
  4. C++(STL):36---关联式容器multiset、multimap源码剖析
  5. GPT-3诞生,Finetune也不再必要了!NLP领域又一核弹!
  6. 图谱实战 | 安全领域知识图谱建设与典型应用场景总结
  7. 计算机模拟专业,2017年数值模拟专业知识题库
  8. php mysql占位符代码,php – 使用命名占位符设置PDO / MySQL LIMIT
  9. 非极大值抑制(Non-Maximum Suppression,NMS)(转)
  10. 智能客服搭建(4) - 语音流的分贝计算
  11. baidu经纬度坐标与google经纬度坐标转换
  12. 我的第一个大创项目——智能药箱(1)前期准备
  13. python人脸识别毕业设计-毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计文章...
  14. 程序设计课程设计——学生学籍管理系统
  15. IT行业都有哪些职位,初学者(0基础,新人)该如何选择,才能够快速进入这个行业?... 1
  16. 高德地图接口申请 地图接口集成 高德地图API文档
  17. Unity TouchScript大屏
  18. linux还原防火墙设置,Linux防火墙设置
  19. linux - linux查看磁盘空间/查看文件分区(挂载点)/查看文件大小
  20. SpringBoot 高级部分笔记4

热门文章

  1. 基于fuse文件系统的android sdcard存储方案:之二
  2. 明基BenQ激光商务投影机“蓝朋友” 开启预售
  3. 计算机系统结构2 8编码,计算机系统结构(第2版(课后习题答案.doc
  4. PCB设计铜铂厚度、线宽和电流关系
  5. 煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤
  6. 关于GetDC与GetWindowDC
  7. 怎么把html背景换白色,美图秀秀怎么将图片背景替换成白色?
  8. SAP 批次管理(批次层级--异常处理)
  9. java文件处理(一)--文本文件转二进制文件
  10. Thread starvation or clock leap detected