百度Apollo5.0控制模块代码学习(一)横纵向控制

自己在学习自动驾驶的相关知识,经过同事的推荐,下载了百度Apollo的代码并进行了安装,运行成功之后更加激发了我对自动驾驶的兴趣。经过这几天对代码中控制模块的学习,对其中的一些知识有了认识,通过CSDN这个平台将这些认识记录下来,方便以后更加深入的学习。

一 百度Apollo控制模块简介

百度Apollo控制模块共包括三种控制方式:
1,横向控制;
2,纵向控制;
3,MPC控制;
这三种控制的区别及原理在CSDN相关博客中已经被剖析的相当深刻,可以通过以下的文章结合代码理解其中的原理:
https://blog.csdn.net/u013914471/article/details/82775091
https://blog.csdn.net/u013914471/article/details/82968608
https://blog.csdn.net/u013914471/article/details/83018664
https://blog.csdn.net/u013914471/article/details/83276607
https://blog.csdn.net/u013914471/article/details/83748571
https://blog.csdn.net/u013914471/article/details/83824490
https://blog.csdn.net/u013914471/article/details/84324754

二 控制模块的入口

由于本人上学时C++没有好好学,工作后也没有用过,所以边学习C++边看Apollo的代码,其中的理解肯定有很多问题。到目前为止,也才对C++了解皮毛而已。但是学习C++知识,我都是认为代码是从main函数开始看,但是找了好几天也没找到Apollo开始的main函数,更没找到代码从哪里开始调用的控制模块。

该文章中介绍了Apollo中各个模块的启动过程,等研究之后在写文章作记录:
https://blog.csdn.net/davidhopper/article/details/85248799

Github上介绍了关于“如何添加新的控制算法”的文章,看完之后自己做一些总结:
1 对于代码中部分文件的定义
控制器的配置信息:控制器配置和参数定义位于modules/control/proto/…中,例如文件夹中的 lat_controller_conf.proto就是横向控制器的配置参数。
对控制器中具体参数的配置: 控制器的配置文件在modules/control/conf/control_conf.pb.txt中,该文件中定义了控制器所用的参数信息。
2 新添加的控制器需要激活
在如下文件中的“modules/control/controller/controller_agent.cc中注册新控制器并激活。因此有理由相信控制器算法是在controller_agent.cc中开始的,因此我在`modules/control/conf/control_conf.pb.txt文件中发现了以下两句:
25 active_controllers: LAT_CONTROLLER
26 active_controllers: LON_CONTROLLER

根据这两句可以知道,我所下载运行的代码中,只有横向控制和纵向控制算法被激活,MPC算法由于没有激活,所以并未运行。

三 control_conf.pb.txt和lon_controller_conf.proto文件剖析

lon_controller_conf.proto采用python语言编写,文件中为纵向控制器的配置信息,包括纵向控制算法中用到的一些可选择的参数,该文件只给出了控制算法中需要的参数名称,对于参数设置的值并未在该文件中给出。
control_conf.pb.txt该文件中保存的同样为控制器的配置信息,该文件是Apollo的默认文件,如果没有特别说明,算法引用的为此文件中的配置信息,该文件给出了所采用的所有控制算法的所有信息。例如纵向控制算法中的参数信息从第108行开始,PID控制器中的参数也根据不同的条件给出了。在看算法的相关代码时,应对照该文件看。

四 总结

Apollo整个项目涉及的知识面特别多,学习它不可能一蹴而就,而是一个漫长的过程。感谢这个时代,能够让我们免费接触到很多知识。作为一个刚接触自动驾驶的小白,希望能够尽快成长,从而可以让自己的将来多一种选择。

你可能感兴趣的:(百度Apollo5.0控制模块代码学习(一)横纵向控制)