目录

1. 本文目的

2. 自动驾驶中控制原理

2.1 控制在自动驾驶中的位置

2.2 控制的数据流

3. 汽车控制模型

3.1 汽车运动学模型

3.2 汽车动力学模型

3.3 运动学模型和动力学模型的作用

4. 汽车控制方法

4.1 基于预瞄和PID的控制方法

4.3 基于MPC的控制方法


1. 本文目的

本文主要目的在于解析自动驾驶控制,以及几种典型的应用控制方法,部分方法小编并没有经过实战,若有笔误,请多指出。

2. 自动驾驶中控制原理

2.1 控制在自动驾驶中的位置

如图所示,为一种典型的自动驾驶控制系统,包括感知-定位-规划-控制以及车辆执行器,车辆控制则直接通过CAN与车辆通信,进行对车辆执行器的控制。

2.2 控制的数据流

以车辆在道路自动驾驶为例,说明车辆控制的数据流,首先用户输入起始点,通过导航,输出一条全局的规划路径,在行驶的过程中,通过感知系统,实时检测交通状态,道路的边界,以及道路中的障碍物(动态或静态),输入到规划系统,规划系统根据当前 状态,进行车辆行为决策,计算可行驶区域,构建和搜索可行驶的轨迹,同时结合当前车辆的状态和约束,输出一条平滑可行驶的轨迹给控制系统,【控制系统】则根据输入的目标轨迹,以及当前车辆状态,经过控制算法,计算出当前油门-刹车-转向等车辆执行器的目标值,并将目标数据通过CAN传递给车辆执行器ECU,执行器则根据目标值,来具体控制执行器的动作(如转向EPS,来控制方向盘转动的角度,刹车ABS来控制刹车泵的制动深度等),以上就简单说明了整个自动驾驶中经过控制数据流的部分。

那么控制在其中的作用可以总结为以下两点:

  1. 跟上规划给定的目标轨迹;
  2. 输出目标的控制值给车辆执行器。

3. 汽车控制模型

3.1 汽车运动学模型

所谓的运动学模式,是不考虑车身的受力情况,仅仅考虑车辆运动以及几何关系,以下以自行车模型为例进行说明。

  • β 为汽车侧偏角
  • ψ为汽车航向角
  • X为汽车纵向方向运动
  • Y为汽车横向方向运动
  • δf为前轮转向角

可以得到运动学模型如下:

X' = V cos(ψ+β)

Y' = V sin(ψ+β)

ψ' = V cos(β) (tanδf - tanδr)/(lf+lr)

β  = arctan((lf*tanδr + lr*tanδf ) / (lf + lr))

核心推导过程说明:

  1. 针对三角形OCA 和三角形OCB分别使用正弦定理,得到两等式;
  2. 利用 ψ' = ω = V/R,消除其中的R,以此得到 ψ' 的等式;
  3. X' 和 Y' 以肉眼即可看出;
  4. 其中β角度的计算推导,也是由三角函数中尽量转为tanβ方式即可计算出。

3.2 汽车动力学模型

如上图所示,车辆的y方向受到前后轮胎的摩擦力,同时绕着中心轴做旋转运动,以此根据y方向上的力平衡,以及绕中心轴的力矩平衡,可以得到

  1. m*ay = Fyf + Fyr   (其中ay = y'' + Vx *ψ')
  2. Ix * ψ'' = lf*Fyf - lr*Fy  (注意力的方向)

Fyr和Fyf 与轮胎侧偏角相关,根据如下图可以得到轮胎侧偏角

  1. Fyr = 2 Car (θr) (Car 后轮侧偏刚度 θr 后轮侧偏角)
  2. Fyf = 2 Caf (δ - θvf)

根据以上几个受力关系,可以推导得到如下的动力学模型:

3.3 运动学模型和动力学模型的作用

利用运动学模型,可以快速的计算出当前车速-航向以及输入的方向盘转角之间的关系;

利用动力学模型,可以进一步获得误差模型或跟踪误差的状态方程,以此计算稳态转向问题。

4. 汽车控制方法

4.1 基于预瞄和PID的控制方法

首先根据规划,会输出一条控制需要的参考运行轨迹。基于预瞄的方法,就是模拟驾驶员,进行横向的预瞄,同时根据当前车辆位置,进行纵向预瞄(若纵向需要位置控制)。

根据横向预瞄结果,获得横向的位置误差以及航向的偏差,进而根据前文提到的车辆模型,基于PID调节控制方向盘或前轮转角;

根据纵向预瞄结果,获得纵向的位置误差,或速度误差,进一步获得加速度控制误差,根据油门刹车与加速度的映射关系,控制油门刹车的量来完成纵向的控制。

4.3 基于MPC的控制方法

MPC典型的控制流

【参考轨迹】:一般规划的轨迹为x y 方向的位置-速度-加速度 甚至jerk

【预测模型】:根据运动学模型,得到如下:

【滚动优化】典型的损失项包括 横向跟踪误差 + 纵向跟踪误差 + 转向误差 +速度误差 + 转角大小损失 + 加速度大小损失 + yawrate 大小损失 + jerk 大小损失 (一般损失的系数是标定量,根据标定量来进行实车调试)

【控制对象】即为油门+刹车+转向

MPC控制的过程为,根据输入轨迹和当前控制状态,预测一段时间内的控制走向,并根据损失函数,计算最优的输出。

4.3 基于Pure Pursuit 轨迹跟踪

纯轨迹跟踪法的思路是,也是把车简化为自行车模型,以后轴为切点,根据规划好的轨迹上的一个点为目标点,车按照一定的圆弧运动,可以让后轴点,经过该目标点。如图所示,以下进行详细的推导。

根据上述的运动学模型 可以得到:

                      (1)

其中L为车轴距,R为车辆转动半径。

根据正弦定理,可以得到:

            (2)

进而可以得到:

                                    (3)

将该(3) 带入 (1)综合以上可以得到:

                        (4)

引入横向误差   则有

                                             (5)

可以得到

                                                   (6)

通过该式,可以得到横向控制偏差,与选择的前视距离以及转弯半径相关。

Ld为前视距离,一般选择与车速正相关,如 Ld = k * Vx ,因此有:

关于自动驾驶车辆控制相关推荐

  1. 自动驾驶车辆控制测评标准

    自动驾驶中,车辆控制是基础,以什么指标来测评就显的很关键,以下是Apollo 车辆控制评测分析指标,可以在此基础上做裁剪,来满足自己自动驾驶车辆控制的需求. 序号 参数 名称 说明 平均控制性能相关参 ...

  2. 自动驾驶车辆控制(车辆运动学模型)

    本文应配合b站up主"忠厚老实的老王"的自动驾驶控制算法系列视频食用. 文章目录 1. 两个车辆运动学模型 1.1 三个坐标系 1.2符号定义 1.3车辆运动学模型 1.4车辆动力 ...

  3. 自动驾驶车辆控制(坐标转换与横向积分误差)

    文章目录 前言 一. Frenet坐标变换与横向误差微分方程 1.1问题描述 1.2 公式推导 前言 本文应配合b站up主"忠厚老实的老王"的自动驾驶控制算法系列视频食用.. 一. ...

  4. 自动驾驶车辆转向控制(通过扭矩控制实现方向盘转角控制)

    本文介绍通过增量式PID控制器实现通过对自动驾驶车辆的EPS进行扭矩响应控制从而实现对期望方向盘转角的控制. 控制器采用增量式PID 对连续PID控制以一定离散化方法离散后就可以得到数字PID控制,离 ...

  5. 自动驾驶车辆运动控制过程中,对PID控制参数的优化和整定。 传统PID控制算法

    自动驾驶车辆运动控制过程中,对PID控制参数的优化和整定. 传统PID控制算法,由于参数固定,在道路曲率较大和车速变化情况下难以满足控制需求,采用RL强化学习算法(DDPG算法,Actor-Criti ...

  6. 用发型、妆容和面部形态解释人脸识别准确性的性别差异;在CARLA实施的基于交叉口情况覆盖的自动驾驶车辆验证和确认框架;迈向医学同行影响的Shapley价值图框架;确定运动想象脑机接口中各种用户状态和特

    中文标题:用发型.妆容和面部形态解释人脸识别准确性的性别差异 英文标题:Gendered Differences in Face Recognition Accuracy Explained by H ...

  7. 千寻位置 开发demo_专攻高精定位解决方案,「千寻位置」要解决自动驾驶车辆“我在哪儿”的问题...

    对于自动驾驶车辆来说,在解决"去哪儿"和"怎么去"问题之前,首先要知道的是"我在哪儿".而判断"我在哪儿",就需要高精度 ...

  8. 全新 ADAS 和自动驾驶车辆系统的处理器性能和安全要求

    简介 当今汽车行业的创新正在加速,因为各公司正在竞相成为安全和自动驾驶车辆领域的市场领导者.随着车辆控制正在从人类转变为车辆的主动安全系统,更多传感器 – 摄像头.雷达.激光雷达等 – 正被添加到汽车 ...

  9. 城市场景中自动驾驶车辆基于高精度地图的视觉语义定位

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨自动驾驶专栏 论文链接:https://ieeexplore.ieee.org/document ...

最新文章

  1. LeetCode Coin Change(动态规划)
  2. VC++ 坐标问题总结,控件大小随窗口变化
  3. 机房收费--操作员注册
  4. [转]JS脚本抢腾讯云学生1元代金券
  5. 【配置】成本组件结构定义(OKTZ)
  6. matlab高级图形设计实训上机答案,Matlab实验第一次实验答案[共8页]
  7. 重启大法好!线上常见问题排查手册
  8. python如何判断是否有弹出框_Selenium2+python自动化47-判断弹出框存在(alert_is_present)【转载】...
  9. linux mysql帮助文档,在 Linux 上安装 MySQL
  10. 新的开始 和一些总结
  11. JSON学习资料整理
  12. mysql模糊查询占位符python_python中的mysql数据库like模糊查询
  13. Redis之key的淘汰策略
  14. 自然语言21_Wordnet
  15. Android 第二课——命令行基本操作
  16. java中的时间片概念_java中常用的时间处理类TimeUtil
  17. 单片机c语言fft函数,单片机ADC采样FFT计算试验
  18. conda和pip卸载包的注意事项
  19. AI 人工智能学习之泰勒公式与拉格朗日乘数法
  20. R语言ggplot2可视化:loess回归曲线可视化、填充两条 loess回归曲线之间的区域实战(Fill region between two loess-smoothed lines)

热门文章

  1. OpenSSL C++简单应用
  2. kinetis晶体谐振器到底要不要加电容和电阻
  3. 洛谷P2161 [SHOI2009]会场预约【Treap】
  4. 耦合性(耦合度) -- Coupling
  5. 七、C/C++指针(易懂易学习,附代码案例)
  6. 如何关闭surface外置键盘触摸板
  7. 第十天文件包含漏洞 php伪协议
  8. php gtk中文介绍,学习php-gtk2之hello world
  9. 用C#开发带农历的日历
  10. 字符串字母大小写转换 --C语言