在自动驾驶中控制车辆是指使用方向盘,刹车,油门将车开到目的地。控制车辆的算法一般称为控制器,PID控制器是最常见,最基础的控制器之一,PID控制器是Proportion Integration Differentiation 的缩写,由英文名可以看出,PID控制器分别代表比例,积分,差分。本章介绍PID控制器每一项的物理意义和代码实现。

前边的卡尔曼滤波和粒子滤波的章节分别介绍了识别其他车辆和定位自身的方法,另外控制器可以从地图得到道路轨迹,控制器就需要根据这些输入计算控制器的输出,使车辆能够平稳的沿着道路行驶。车辆的控制器应该满足以下要求:

  1. 控制器必须准确, 避免车辆偏离目标轨迹;
  2. 控制器具有可行性;
  3. 控制器操作平稳;以免造成乘客的不适;

我们将根据地图计算出的车辆运行轨迹称为参考线,车辆与参考线的偏差称为CTE(cross track error), PID控制器的P代表比例,其表示车辆的航向角反比与CTE,即当CTE减小时,航向角也会相应减小,但是如下图所示,车辆实际行驶的路线会沿着参考轨迹周围摆动,所以P控制器并不稳定。


D控制器表示差分,差分项相当于给控制器增加了阻尼,使航向角改变的速度减慢,提达到平稳的效果,如下图所示,增加差分项以后,车辆的摆幅变小。

PID控制器的I代表积分项,负责纠正系统的系统性偏差,例如如果转向角失准,就要将方向盘偏移才能是车保持直线, 积分项会对系统的累积误差进行惩罚,以达到纠正系统误差的效果。

以下就是PID控制器的C++ 代码实现。

#include "PID.h"using namespace std;/*
* TODO: Complete the PID class.
*/PID::PID() {}PID::~PID() {}void PID::Init(double Kp, double Ki, double Kd) {p_error = 0.0;i_error = 0.0;d_error = 0.0;Kp_ = Kp;Ki_ = Ki;Kd_ = Kd;
}void PID::UpdateError(double cte) {d_error = cte - p_error;i_error +=cte;p_error = cte;
}double PID::TotalError() {return -Kp_*p_error-Ki_*i_error-Kd_*d_error;
}

完整的项目代码请戳这里。

自动驾驶-PID控制器相关推荐

  1. 汽车域控制器分类(下):自动驾驶域控制器、车身域控制器

    上一篇讲了汽车域控制器中的动力域控制器.底盘域控制器.智能座舱域控制器,接下来讲自动计时域控制器.车身域控制器. 4.自动驾驶域控制器 随着自动驾驶的来临,其所涉及的感知控制.决策系统复杂性更高,与车 ...

  2. 争夺细分新赛道,哪十家企业「领跑」L4级自动驾驶域控制器?

    高级驾驶辅助系统(ADAS)和特定场景自动驾驶的加速落地,推动了域控制器市场进入一个快速增长的新周期.其中,除了用于乘用车前装量产,包括Robotaxi.无人小车.接驳小巴.环卫.港口.矿山等特定场景 ...

  3. 车载测试自动驾驶域控制器开发和量产的挑战

    什么是域控制器 过去十多年的汽车智能化和信息化发展产生了一个显著结果就是ECU芯片使用量越来越多.从传统的引擎控制系统.安全气囊.防抱死系统.电动助力转向.车身电子稳定系统:再到智能仪表.娱乐影音系统 ...

  4. 自动驾驶域控制器话题下的软件系统设计和研发管理

    一. 了解智驾域控制器软件系统 智驾域控制器部署在整车电子架构中, 通过复杂的传感器来感知实时路况 通过高精地图等辅助导航 通过底盘对车辆进行运动控制 通过冗余降级架构保证行驶安全 通过信息安全架构来 ...

  5. 自动驾驶域控制器研究开发要用c语言吗,深入浅出,什么是域控制器?

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?注册 x 近几年,随着奥迪的zFAS横空出世,车载电子领域大家谈论的比较多的就是域控制器.有的叫DC ...

  6. 【自动驾驶】ADAS域控制器介绍

    最近接触了辅助驾驶,被其中的一些名词搞蒙了. 今天先来了解下所谓的ADAS域控制器. 所谓的ADAS域控制器,即承担了自动驾驶所需要的数据处理运算力,包括但不限于毫米波雷达.摄像头.激光雷达.GPS. ...

  7. 巡检机器人的自动驾驶「域控制器」究竟是什么?

    上一期向大家介绍了算丰征途巡检机器人硬件方面的定制化业务,针对各行各业不同企业的不同巡检需求,算丰征途可以对巡检机器人的行驶底盘和传感器进行定制,(详情点击:巡逻机器人的模块化定制业务,「算丰征途」为 ...

  8. 抢跑前装量产赛道,这家自动驾驶公司为何要自研域控制器?

    自动驾驶公司正在快速涌入前装量产赛道. 从2021年开始,包括小马智行.文远知行.元戎启行.轻舟智航等多家L4自动驾驶公司开始纷纷推出面向前装量产的自动驾驶解决方案,部分企业还推出了L2++/L3级的 ...

  9. 面向2022届毕业生-自动驾驶/SLAM/DL/C++ 岗位收集整理

    收集整理 Created by leijobs876@gmail.com 目标方向: C/C++ 开发 Andorid 开发 深度学习部署 自动驾驶感知与定位 ROS机器人开发 文章目录 收集整理 * ...

最新文章

  1. 计算机硬件技术 教案,教案07-计算机硬件技术基础.doc
  2. JS的表单序列化,数组去重,判断数组是否重复等方法
  3. 关于Mysql java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)的问题...
  4. java heroku_Neo4j Java Rest绑定入门(Heroku部署)
  5. 【[POI2012]PRE-Prefixuffix】
  6. VMware Converter迁移linux系统虚拟机
  7. 我与OTC的诸位大神
  8. Python 实现自动刷抖音,解放双手了
  9. 编程入门书籍:大学学习计算机基础必读 5 本经典入门书籍,收藏
  10. springboot+ssm+vue前后端分离项目-宠物之家
  11. 阿里巴巴社招笔试题——多线程打印(2)
  12. 教你做一个微信添加好友收付款的个性二维码
  13. AVFrame结构体中变量解释
  14. SSL证书的加密算法有哪些?
  15. 换行符不换行的原因与解决方法
  16. 与电容有关的几个经典电路--微分、积分、采样与电荷泵
  17. matlab计算不同时间步长,Matlab ODE求解器中的时间步长计算
  18. 更换IPHONE备份路径
  19. 【ZZULIOJ】1001: 整数a+b
  20. C语言设计一个简单的计算器,完成两个数的加、减、乘、除、取余。(根据输入的运算符,选择相应的运算,用switch语句实现。

热门文章

  1. 跨服务器移动文件,跨服务器复制文件(示例代码)
  2. 我用两天时间搭了一个领外卖红包的小程序
  3. c语言模拟随机投点计算概率,我写的蒲丰投针的程序(用概率学计算π),有问题求教...
  4. 浪漫表白编程丨程序员的520表白代码 _ 程序员专属情人节表白网站
  5. HIT CSAPP 程序人生-Hello’s P2P
  6. 编写代码时鼠标光标变成选择单个字符,而不是竖线,如何切换?
  7. nginx 301跳转到带www域名方法(不带www访问时重定向到带www域名)
  8. springcloud框架下采用Grpc实现远程过程调用
  9. react i18n 实现国际化
  10. c语言结构体的定义和使用