目录

1. 简介

2. 控制流程

3. PID控制

4. PID优劣对比


本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 9月26日

上周我们发布了无人驾驶技术的 规划篇,车辆基于高精地图,感知和预测模块的数据来进行这一规划。

本期我们将介绍和控制相关的知识,具体讲解最常用的控制算法--------- PID控制器。自动驾驶的入门课程已经接近尾声,开发者学习的热情依然高涨。希望开发者们在完成入门课程后,继续深入学习无人驾驶技术,在无人驾驶领域越走越远。


视频连接为:https://v.qq.com/x/page/u0719ta7ad7.html

1. 简介

控制是驱使车辆前行的策略。对于汽车而言,最基本的控制输入为转向、加速和制动。通常,控制器使用一系列路径点来接收轨迹。控制器的任务是使用控制输入让车辆通过这些路径点。

首先,控制器必须准确,这意味着它应避免偏离目标轨迹。这对于安全来说,尤为重要。即使路面潮湿或者道路比较陡峭,控制器仍需要准确地执行轨迹。其次,控制策略对汽车应该具备可行性。例如,如果你的汽车向北行驶,而你希望它立即向东转。你可以在游戏中做到这一点,但在现实中无法实现。最后,需要考虑的是平稳度。舒适的驾驶非常重要。如果车辆行驶得不规律,那乘客永远不会想再次乘坐它了。要使控制顺利进行,驱动必须是连续的。这意味着你应避免突然转向、加速或制动。

总之,我们的目标是使用可行的控制输入,最大限度地降低与目标轨迹的偏差、最大限度地提供乘客的舒适度。有三种可用于实现这些目标的控制策略:比例积分微分控制(或PID)线性二次调节器(或LQR)模型预测控制(或MPC)

2. 控制流程

控制器预计有两种输入:目标轨迹车辆状态。目标轨迹来自规划模块,在每个轨迹点,规划模块指定一个位置和参考速度。在每个时间戳都对轨迹进行更新。我们还需要了解车辆状态,车辆状态包括:通过本地模块来计算的车辆位置、从车辆内部传感器获取的数据(如速度、转向和加速度)。我们使用这两个输入来计算目标轨迹与实际行进轨迹之间的偏差。

控制器的输出是控制输入(转向、加速和制动)的值。当偏离目标轨迹时,我们希望采取行动来纠正这种偏差。对于普通汽车,我们使用方向盘控制行驶方向(即转向)、使用油门加速、使用刹车减速(即制动)。这也是无人驾驶汽车所做的。一旦将这三个值传递给车辆,汽车实际上已经开始无人驾驶了。之后将介绍不同的控制算法,如何计算这三个输出:转向、加速和制动。

3. PID控制

首先介绍的算法为PID控制,这个控制器的优点在于它非常简单,只需要知道与目标轨迹有多大的偏离。PID的第一组件为P代表“比例”(Proportional)。设想一辆车正试图遵循目标轨迹,P控制器在车辆开始偏离时立即将其拉回目标轨迹。比例控制意味着,车辆偏离越远,控制器越难将其拉回目标轨迹。

在实践中P控制器的一个问题在于,它很容易超出参考轨迹。当车辆越来越接近目标轨迹时,我们需要控制器更加稳定。PID控制器中的D项致力于使运动处于稳定状态,D代表“微分”(Derivative)。PD控制器类似于P控制器,它增加了一个阻尼项,可最大限度地减少控制器输出的变化速度。

PID控制器中的最后一项I代表积分(Integral),该项负责纠正车辆的任何系统性偏差。例如,转向可能失准,这可能造成恒定的转向偏移。在这种情况下,我们需要稍微向一侧转向以保持直行。为解决这一问题,控制器会对系统的累积误差进行惩罚。我们可以将P、I和D组件结合构成PID控制器。

4. PID优劣对比

PID控制器很简单,但它在很多情况下的效果很好。对于PID控制器,你只需要知道你的车辆与目标轨迹之间的偏差。但是PID控制器只是一种线性算法,对于非常复杂的系统而言,这是不够的。例如,为控制具有多个关节的四轴飞行器或机器人,我们需要建立机器人的物理模型。对无人驾驶而言,我们需要应用不同的PID控制器来控制转向和加速,这意味着很难将横向和纵向控制结合起来。另一个问题在于PID控制器依赖于实时误差测量,这意味着受到测量延迟限制时可能会失效。

更多详细课程内容,大家可以登陆官网继续学习!

也可以添加社区小助手(Apollodev)为好友,回复“课程学习”进群与其他开发者共同交流学习。

自课程上线以来,浏览量已超10万,已帮助全球97个国家约 7000 名学员入门自动驾驶与 Apollo 开源平台,其中37%为海外学员,本门课程已成为优达学城 (Udacity) 近期获得关注度最高的免费课程之一。

Apollo自动驾驶入门课程第⑨讲 — 控制(上)相关推荐

  1. Apollo自动驾驶入门课程第⑩讲 — 控制(下)

    目录 1. 线性二次调节器 2. 模型控制预测 3. 总结 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 昨天 Apollo自动驾驶课程马上进入尾声,在无人驾驶技 ...

  2. Apollo自动驾驶入门课程第①讲—无人驾驶概览

    目录 1. 全面了解自动驾驶主要模块 2. 了解无人车的运作方式 3. 开放式软件栈 4. 本节其他重点 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 8月1日 ...

  3. Apollo自动驾驶入门课程第⑤讲 — 感知(下)

    目录 1. 卷积神经网络 2. 检测与分类 3. 跟踪 4. 分割 5. Apollo感知 6. 传感器数据比较 7. 感知融合策略 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apo ...

  4. Apollo自动驾驶入门课程第④讲 — 感知(上)

    目录 1. 感知的概述 2. 计算机视觉 3. 摄像头图像 4. LiDAR图像 5. 机器学习 6. 神经网络 7. 反向滤波法 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apol ...

  5. Apollo自动驾驶入门课程第⑧讲 — 规划(下)

    目录 1. 路径-速度解耦规划 2. 路径生成与选择 3. ST图 4. 速度规划 5. 优化 6. 路径-速度规划的轨迹生成 7. Lattice规划 8. ST轨迹的终止状态 9. SL轨迹的终止 ...

  6. Apollo自动驾驶入门课程第⑦讲 — 规划(上)

    目录 1. 规划简介 2. 将地图转为图形 3. 路径查找算法:A* 4. 轨迹生成 5. Fernet坐标系 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 9月 ...

  7. Apollo自动驾驶入门课程第⑥讲 — 预测

    目录 1. 简介 2. 不同的预测方式 3. 基于车道序列的预测 4. 障碍物状态 5. 预测目标车道 6. 递归神经网络 7. 递归神经网络在目标车道预测的应用 8. 轨迹生成 本文转自微信公众号: ...

  8. Apollo自动驾驶入门课程第②讲 — 高精地图

    目录 1. 高精地图与传统地图 2. 高精地图与定位.感知规划的关系 2.1 高精地图用于定位 2.2 高精地图用于感知 2.3 高精地图用于规划 3. Apollo高精度地图与构建 3.1 Apol ...

  9. Apollo自动驾驶入门课程第③讲 — 定位

    目录 1. 定位的概述 2. 定位方法介绍 2.1 GNSS RTK 2.2 惯性导航 2.3 激光雷达定位 2.4 视觉定位 2.5 Apollo定位 本文转自微信公众号:Apollo开发者社区  ...

最新文章

  1. 零基础参加java培训主要学什么
  2. TOMCAT为什么打破双亲委派的类加载模型
  3. 专属自己的二维游戏引擎【二】
  4. 洛谷 P1663 山
  5. 143. Reorder List
  6. 在html中三个图片切换,轻松搞定网页中的图片切换
  7. go分析和kegg分析_干货预警:3分钟搞定GO/KEGG功能富集分析(2)
  8. (二)再议MII、RMII、GMII接口
  9. Android8.0、9.0、10.0、11.0的新特性兼容适配代码修改
  10. 【转】sql server 订阅发布、快照发布(一)
  11. java docx4j 使用教程_docx4j深入学习整理
  12. light动名词_英语语法大全之动名词
  13. 谷歌中国四年去本地化接近尾声
  14. 大学四年的最后一篇日志,致敬2012-2016那些似水流年
  15. PS:给图片添加方格
  16. redis集群模式详解
  17. python 生成payload_msf生成payload
  18. 新解决方案销售之一:原则与流程
  19. 音乐独奏,心情忧伤。
  20. iOS开发之SDK开发

热门文章

  1. trc20地址监听php,Tron/USDT-TRC20对接PHP开发包 - 人人都是架构师
  2. gdal 压缩tif_Python | GDAL处理影像
  3. 什么是ie浏览器_?IE 浏览器为什么不招人待见?
  4. 服务器u8系统数据库不存在,用友u8服务器端数据库不装
  5. 7-1 模拟EXCEL排序 (25 分)
  6. python股票交易模型_如何用Python建模GGM模型并对股票估值?
  7. java 自定义注解_Java注解
  8. error C4668: 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用“0”替换“#if/#elif”
  9. 蓝图中实现人物移动1
  10. __attribute__ 之weak,alias属性