百度Apollo解析——1.总介绍
1. 概括
Apollo源码主要是c++实现的,也有少量python,主要程序在apollo/modules目录中,共18个包,功能包17个:

其中每个模块的作用如下:
apollo/modules/calibration : 校准模块,使用前必须对系统进行校准和标定,包括激光雷达与摄像头、毫米波雷达与摄像头等。所谓校准就是要对齐激光雷达、摄像头以及毫米波雷达获得的信息,我们知道激光雷达可以获得详细的3D信息,但是不能获得颜色信息,摄像头可以获得颜色信息,但是无法获得深度等3D信息,毫米波雷达不能获得颜色信息,但是可以获得3D信息,三者获得的信息对齐后,就可以同时获得实际环境中的3D信息和颜色信息。
apollo/modules/canbus:汽车can总线控制模块。接收控制指令,同时给控制模块control发送车身状态信息。
apollo/modules/common:公共源码模块。包括如日志,工厂模式的实现,日志系统,监控模块,数学算法等。
apollo/modules/control:控制模块。基于决策规划的输出路径及车身的状态使用不同的控制算法来输出控制命令,如转向刹车,控制等。
apollo/modules/data:数据模块。收集、存储、处理收集到的各种数据的。
apollo/modules/dreamview:可视化模块。查看规划的轨迹及实时的转向刹车油门信息
apollo/modules/drivers:驱动模块。各种传感器驱动。
apollo/modules/e2e:end to end,端到端强化学习。
所谓e2e指的是由传感器的输入,直接决定车的行为,例如油门,刹车,方向等。也就是机器学习的算法直接学习人类司机的驾驶行为。这部分在代码中需要另外下载,学习的数据主要来源于传感器的原始数据,包括图像、激光雷达、雷达等。end-to-end输入以图像为主。 输出是车辆的控制决策指令,如方向盘角度、加速、刹车。 连接输入输出的是深度神经网络,即通过神经网络直接生成车辆控制指令对车辆进行横向控制和纵向控制,中间没有人工参与的逻辑程序。横向控制,主要是指通过方向盘控制车身横向移动,即方向盘角度。纵向控制,是指通过油门和刹车控制车身纵向的移动,即加速、刹车等。横向模型的输出没有采用方向盘角度,而是使用要行驶的曲率(即拐弯半径的倒数)。
apollo/modules/elo:利用高精地图的自定位模块。这部分的代码也是另外下载。前向的摄像头会采集车道数据以实现更精确的定位,输出的位置信息包括车辆的x y z坐标,还有就是在百度高精度地图中的ID。
apollo/modules/localization:定位模块。输入GPS和IMU信息输出自车定位信息
apollo/modules/map:高精地图模块。输出结构化地图信息,如车道线,十字路口等。
apollo/modules/monitor:监控模块。监控硬件状态,同时把状态发给交互界面。
apollo/modules/perception:感知模块。输入激光点云,高精地图,变换坐标,输出3D障碍物包括速度大小和方向。
apollo/modules/planning:局部决策规划模块。
apollo/modules/prediction:预测模块。输出感知的障碍物信息及自定位信息输出障碍物未来的轨迹。
apollo/modules/routing:全局规划模块。输入包括地图信息各起点终点地址,输出一个全局的导航信息。
apollo/modules/third_party_perception:第三方感知模块。
apollo/modules/tools:通用监控与可视化模块。
2. 分类
2.1 感知:
感知当前位置,速度,障碍物等等
– Apollo/modules/perception
三方感知器支持
– Apollo/modules/third_party_perception
2.2 预测:
对场景下一步的变化做出预测
– Apollo/modules/prediction
2.3 规划:
全局路径规划:通过起点终点计算行驶路径
– Apollo/modules/routing
规划当前轨道:通过感知,预测,路径规划等信息计算轨道
– Apollo/modules/planning
规划转换成命令:将轨道转换成控制汽车的命令(加速,制动,转向等)
– Apollo/modules/control
2.4 定位:
输入GPS和IMU信息输出自车定位位置信息
– Apollo/modules/localization
高精地图模块
– Apollo/modules/map
利用高精地图的自定位模块,利用前向的摄像头会采集车道数据以实现更精确的定位
– Apollo/modules/elo
2.5 交互:
可视化模块,用户交互信息
– Apollo/modules/dreamview
2.6 驱动
设备驱动
– Apollo/modules/drivers
监控模块
– Apollo/modules/monitor
汽车硬件交互
– Apollo/modules/canbus
2.7 工具程序
标注工具
–Apollo/modules/calibration
Apollo/modules/common
–通用公共工具
Apollo/modules/data
– 数据工具
Apollo/modules/tools
– Python工具
2.8 强化学习
Apollo/modules/e2e
3. 工作流程
自动驾驶系统先通过起点终点规划出全局路径(routing);然后在行驶过程中感知(perception)当前环境(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车.
流程图如下:

原文:https://blog.csdn.net/DinnerHowe/article/details/79936038
版权声明:本文为博主原创文章,转载请附上博文链接!
百度Apollo解析——1.总介绍的更多相关文章
- 百度Apollo解析——3.common
1.略读 该目录下主要提供了各个模块公用的函数和class以及一些数学API还有公共的宏定义. 在Apollo 1.0中,common是整个框架的基础.configs是配置文件加载.adapters是 ...
- 百度Apollo解析——2.log系统
Apollo中的glog 在Apollo中google glog 被广泛使用,glog 是 google 的一个 c++ 开源日志系统,轻巧灵活,入门简单,而且功能也比较完善. 1. 安装 以下是官方 ...
- 百度Apollo解析——0.使用VSCode编译Apollo项目
1.安装微软Visual Studio Code 1.1 方法一 开始之前,首先需要安装Ubuntu Make.虽然Ubuntu Make存在Ubuntu15.04官方库中,但是需要Ubuntu Ma ...
- 百度Apollo无人驾驶入门课程下载
本文提供 百度Apollo官网的无人驾驶入门课程下载,主要为视频文件. 视频数量:101个:文件格式:MP4:视频总时长:2小时40分钟:文件总大小:约1.13GB: 马上下载 关注公众号罗孚传说(R ...
- 三维重建:GitHub百度Apollo 2.0
GitHub:https://github.com/ApolloAuto/apollo 1. 关于Apollo的数据:Apollo的数据会如何开放? 自动驾驶数据将包括具有高分辨率图像和像素级别标注的 ...
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
- JSONP跨域的原理解析及其实现介绍
JSONP跨域的原理解析及其实现介绍 作者: 字体:[增加 减小] 类型:转载 时间:2014-03-22 JSONP跨域GET请求是一个常用的解决方案,下面我们来看一下JSONP跨域是如何实现的,并 ...
- 百度Apollo搭建步骤(待更新)
百度Apollo搭建步骤 ##一.安装ubuntu16.04 无需多说,安装完成打开命令行. ##二.下载Apollo镜像 git clone https://github.com/ApolloAut ...
- 百度url解析Joe.Smith整理大全
百度url解析Joe.Smith整理大全 百度url解析Joe.Smith整理大全...1 本文链接:http://blog.csdn.net/qq_26816591/article/details/ ...
随机推荐
- mysql 自增长 AUTO_INCREMENT
Mysql可以使用AUTO_INCREMENT来设定主键的值为自增长的,其默认值是1. 如果想把它的初始值设置为n,可执行:alter table table_name auto_increment= ...
- linux(ubuntu16.04)下安装和破解pycharm专业版
我用的linux 版本是ubuntu,查看版本命令是: lsb_release -a 因为学习Python爬虫,pycharm是Python很好用的IDE,但是专业版需要付费,所以开始安装: 首先在官 ...
- run as android application过程
1.打包 >> 把所有的class打包成为classes.dex >> AndroidManifest.xml 打包成二进制文件 >> res目录下面的文件打包到r ...
- 使用BackgroundWorker组件
BackgroundWorker 组件用来执行诸如数据库事务.文件下载等耗时的异步操作. 开始 在应用程序中添加一个BackgroundWorker实例,如果用的是VS,可以从工具上直接拖到应用程序: ...
- 【SQL查询】查询的列起别名_AS
方法一: 以as关键字指定字段别名,as在select的字段和别名之间. 方法二: 直接在字段名称后面加上别名,中间以空格隔开.
- Linux C 编程内存泄露检测工具(一):mtrace
前言 所有使用动态内存分配(dynamic memory allocation)的程序都有机会遇上内存泄露(memory leakage)问题,在Linux里有三种常用工具来检测内存泄露的情況,包括: ...
- MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数
在 开发过程中经常需要获得程序当前的运行目录,这时就可以使用GetCurrentDirectory()和GetModuleFileName()函 数,GetCurrentDirectory只是返回当前 ...
- HihoCoder1415后缀数组三·重复旋律3
重复旋律3 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi在练习过很多 ...
- Qt之事件处理机制
思维导读 一.事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下 ...
- lower_bound()函数与quicksort()函数的简单掌握
lower_bound 这个序列中可能会有很多重复的元素,也可能所有的元素都相同,为了充分考虑这种边界条件,STL中的lower_bound算法总体上是才用了二分查找的方法,但是由于是查找序列中的第一 ...