车辆运动学自行车模型
在简要了解了PID控制以后,我们就要接触一些现代的控制算法。在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的。车辆运动模型就是一类能够描述我们的车辆的运动规律的模型。显然,越复杂的模型就越接近现实中的车辆运动规律,本节我们一起了解一下两个广泛使用的车辆模型——运动学自行车模型(Kinematic Bicycle Model)
无人驾驶系统往往分成感知,决策和控制三个模块,其中无人车的路径规划和底层控制是工作在不同的层的,路径规划层往往会基于更加高层的(感知层,定位层)的信息和底层的(控制层)的实时信息指定行驶的路径,那么从路径规划层传来的就是车辆的参考路径,控制系统需要做的就是严格按照这个参考路径(以及速度等控制输入量)去驾驶我们的车辆,一般来说,我们会用多项式的行驶来描述这个路径曲线,如下所示的三次多项式就可以描述绝大多数的路径了:
无人车的控制依赖于一项称为 模型预测控制(Model Predictive Control) 的简单技术,这种控制的方法是产生一系列的可行的(也就是说在实际上车辆能够做到的)控制输入,基于一定的算法(往往是带约束的非线性优化算法)来调整这一系列的控制输入,使得一个 损失函数(cost function) 最小化,这个损失函数的求解就要依赖于车辆的运动学或者动力学模型的输出和参考的路径的差值求得,这些模型正是本节介绍的内容。
自行车模型(Bicycle Model)
首先我们要简化汽车运动,其中自行车模型就是简单且有效的简化方式。自行车模型基于如下几个假设:
车辆在垂直方向的运动被忽略掉了,也就是说我们描述的车辆是一个二维平面上的运动物体(可以等价与我们是站在天空中的俯视视角)
我们假设车辆的结构就像自行车一样,也就是说车辆的前面两个轮胎拥有一直的角度和转速等,同样后面的两个轮胎也是如此,那么前后的轮胎就可以各用一个轮胎来描述
我们假设车辆运动也和自行车一样,这意味着是前面的轮胎控制这车辆的转角
首先我们简单的在一个二维平面上描述一个车辆:
其中 θ是其在 Yaw方向的偏转角度,它是相对于 x轴的逆时针方向的角度,v 是 θ 方向的速度,L 是车辆的轴距(前后轮胎的距离), (x,y) 是车辆的坐标。
下图是该车辆的自行车模型:
运动学自行车模型
作为一种自行车模型,运动学自行车模型也假定车辆形如一辆自行车,整个的控制量可以简化为 (a, δf)(a, δf),其中 aa 是车辆的加速度,踩油门踏板意味着正的加速度,踩刹车踏板意味着负的加速度。δfδf 是我们的方向盘转角,我们假定这个方向盘转角就是前轮胎当前的转角。这样,我们使用两个量描述了车辆的 控制输入(control input)。
然后我们定义我们模型中的状态量,运动学自行车模型使用四个状态量来描述车辆的当前状态:
一个简单的运动学自行车模型如图所示:
其中 lf和 lr为前轮和后轮到车辆重心的距离。那么更具运动学定理,运动学自行车模型中的各个状态量的更新公式如下:
其中 ββ 可以由如下公式计算求得:
由于绝大多数的汽车后轮都不能够偏转,所以我们的自行车模型就假定后轮的转角控制输入 δr=0,也就是说,方向盘上的控制输入,都反映到了前轮的转角上了。
那么基于这个简单的运动学自行车模型,在给定了一个时刻的控制输入以后,我们可以计算求得 dt 时间以后我们车辆的状态信息(坐标,偏航角以及速度),那么这个模型就可以作为我们模型预测控制下的基础车辆模型了。
运动学自行车模型的Python实现
我们使用Python代码简单实现一个运动学自行车模型类,作为后期我们使用模型预测控制的车辆模型。
from __future__ import print_function
import math
class KinematicModel(object):
def __init__(self, x, y, psi, v, f_len, r_len):
self.x = x
self.y = y
self.psi = psi
self.v = v
self.f_len = f_len
self.r_len = r_len
def get_state(self):
return self.x, self.y, self.psi, self.v
def 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) * dt
self.y = self.y + self.v * math.sin(self.psi * beta) * dt
self.psi = self.psi + (self.v / self.f_len) * math.sin(beta) * dt
self.v = self.v + a * dt
return self.x, self.y, self.psi, self.v
这个简易的车辆模型中,我们的控制量包含了一个前胎的转角和一个加速度a,由于受车辆机械的限制,车辆本身有很多动作是实现不了的,比如说加速度a的值不可能过大,轮胎的转角也会有极限,我们称这种性质叫做模型非完整性(model nonholonomic)
————————————————
版权声明:本文为CSDN博主「AdamShan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AdamShan/article/details/78696874
车辆运动学自行车模型相关推荐
- 4.2 运动学自行车模型(第四章 车辆的动态建模)
4.2 运动学自行车模型(The Kinematic Bicycle Model) 要控制车辆的运动,首先要对车辆的运动建立数字化模型,模型建立的越准确,对车辆运动的描述越准确,对车辆的跟踪控制的效果 ...
- 自动驾驶 4-2 运动学自行车模型 The Kinematic Bicycle Model
欢迎回来.在上一段视频中 我们讨论了运动学建模和 和束缚的基础知识,并介绍了ICR(瞬时旋转中心)的概念. 本课程中,我们将进行运动自行车模型, 这是一种经典模型, 在正常驾驶条件下捕捉车辆运动时表现 ...
- 无人驾驶汽车系统入门(五)——运动学自行车模型和动力学自行车模型
无人驾驶汽车系统入门(五)--运动学自行车模型和动力学自行车模型 在简要了解了PID控制以后,我们就要接触一些现代的控制算法.在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的.车辆运动模型 ...
- 运动学自行车模型和动力学自行车模型
作者简介:申泽邦(Adam Shan),兰州大学在读硕士研究生,主攻无人驾驶,深度学习:文章来源:https://blog.csdn.net/adamshan/article/details/7869 ...
- 无人驾驶-控制-自行车模型
无人驾驶-控制-自行车模型 一.综述 1.1 简介 在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的.车辆运动模型就 是一类能够描述我们的车辆的运动规律的模型.显然,越复杂的模型就越接近现 ...
- 4.5 自行车模型的横向动力学(第四章 车辆的动态建模)
4.5 自行车模型的横向动力学 (Lateral Dynamics of Bicycle Model) 在前面的视频中,我们覆盖了汽车纵向动力学.在本课中,我们将涵盖基于自行车建模方法的四轮汽车的动态 ...
- 自动驾驶汽车系统入门——运动科学自行车科学模型和动力学自行车模型简易解释
自动驾驶汽车系统入门--运动科学自行车模型和动力科学自行车模型 在简要了解了PID控制以后,我们就要接触一些现代的控制算法. 在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的. 车辆运动模 ...
- Apollo代码学习(二)—车辆运动学模型
Apollo代码学习-车辆运动学模型 前言 车辆模型 单车模型(Bicycle Model) 车辆运动学模型 阿克曼转向几何(Ackerman turning geometry) 小结 Apollo( ...
- 自动驾驶(五)---------车辆运动学模型
车辆运动学模型 我的定义:正常直线行驶,位置变化等于速度*时间,车辆不是直线行驶,已知速度和方向盘转角等,求新的位置. 1.单车模型(Bicycle Model) 其中将左/右前轮合并为一个点,位于A ...
- 自动驾驶控制算法——车辆运动学模型
车辆运动学模型 自行车模型(Bicycle Model) 自行车模型(Bicycle Model)的建立基于如下假设: 不考虑车辆在垂直方向(Z轴方向)的运动,即假设车辆的运动是一个二维平面上的运动; ...
最新文章
- [Linux] PHP程序员玩转Linux系列-Linux和Windows安装nginx
- 构建Flex数据服务程序
- Android中Intent和Intent过滤器详解
- 干货!一文解决产品经理对UML的全部疑问
- linux getopts学习笔记
- react dispatch_React纯Hooks状态管理探索
- react学习(44)----只更新它需要更新的部分
- python训练手势分类器_机器学习零基础?手把手教你用TensorFlow搭建图像分类器|干货...
- WINCE下I/O操作基础
- python jpg 压缩因子_IOS图像2之jpg、png图片保存、互转、设置有损压缩因子
- Introduction to Oracle9i: SQL------- left join 和 left outer join 的区别
- c语言prn文件,C语言prntf和scanf函数.doc
- 几种物流业务的凭证模板设置说明
- WMB ESQL报文函数截取新的XML方法
- 计算机组成原理实验报告一静态随机存储器
- matlab画图时如何将坐标设置为中文宋体,英文新罗马字体
- Access仿Excel的RoundUp函数向上取整的方法。
- Python使用正则表达式提取文本中ABAC和AABB形式的成语
- 板内盘中孔设计狂飙,细密间距线路中招
- swfobject.js 2.2 使用方法