【Apollo】百度Apollo 自动驾驶开源模块分析

【Apollo】百度Apollo 自动驾驶开源模块分析

打开github上的源码 github.com/ApolloAuto/a

一级目录结构重要文件夹内容:

  1. docker:docker有关的文件,如启动docker脚本,进入docker容器脚本。
  2. docs:文档模块,有完整英文文档和部分中文文档 。
  3. modules:apollo中各个模块的源代码,如感知,决策,规划等核心模块。
  4. scripts:启动脚本,如启动hmi的脚本。
  5. third_party:第三方的库。
  6. tools:编译相关配置文件。

> Apollo项目是用Bazel来做为代码编译工具,每个源码文件夹下都有一个 BUILD文件即bazel的编译配置文件。


modules目录内容:

所有核心模块的源码都集中在modules目录中,打开modules目录,有以下17个模块

  1. common:公共源码模块如日志,工厂模式的实现,日志系统,监控模块,数学算法等。
  2. drivers:GNSS设备驱动,包括NovAtel, Applanix, u-blox.激光雷达velodyne驱动,用来读取传感器内容并输出对应的消息。
  3. calibration: 传感器标定文件及标定数椐检测脚本,目前只看到激光雷达想着的标定文件
  4. control:控制模块,基于决策规划的输出路径及车身的状态使用不同的控制算法来输出控制命令,如转向刹车,控制等。
  5. canbus: 接收控制指令,同时给控制模块control发送车身状态信息。
  6. planning:决策规划模块,apollo1.0中决策各规划是分开的模块decision和planning模块,现在decision模块合并在planning里了。
  7. routing:全局导航模块,输入包括地图信息各起点终点地址,输出一个全局的导航信息。
  8. prediction:预测模块,输出感知的障碍物信息及自定位信息输出障碍物未来的轨迹。
  9. localization:定位模块,输入GPS和IMU信息输出自车定位信息。
  10. map:高精地图模块,输出结构化地图信息,如车道线,十字路口等。
  11. perception:感知模块,输入激光点云,高精地图,变换坐标,输出3D障碍物包括速度大小和方向。
  12. hmi:人机交互模块,http服务利用浏览器可查看及更改一些配置及启动某些节点。
  13. dreamview:可视化模块,查看规划的轨迹及实时的转向刹车油门信息。
  14. monitor:监控模块,监控硬件状态,同时把状态发给hmi
  15. tools:工具模块,包括一些可视化的工具,bag包录制及回放脚本
  16. e2e:端到端模块,Apollo1.5新增模块,完全独立的模块,运行在ubuntu16.04及ros kinetic上,用catkin_make编译。
  17. elo:利用高精地图的自定位模块,Apollo1.5新增模块,完全独立的模块,无源码只有.so文件,单独的运行环境,固定在运行在NVIDIA Drive PX2 (PDK 4.1.4.0)Ubuntu16上.利用训练好的caffe模型来检测车道线和有精确坐标的高精地图匹配从而实现定位,依赖一个粗精度低成本的gps及摄像头这两个传感器。

总结

总体来看开源进度推进迅速没有跳票的时候,代码结构也是很规范,包括日志,监控模块的设计,重要模块感知,规划,控制,目录结构也都类似,方便理解和扩展。

但也有不好的地方,如上面最后两个模块,其实各之前的apollo源码没有任何关系的,只是增加了两个模块,而且apollo本身有一个localization模块是做定位的,这里又加了一个elo也是做定位的,且这个elo给的是aarch64 platform下的.so和头文件,依赖caffe但是修改过了所以给的是libcaffe.so,config里还有一个高精地图的数椐文件,hdmap.db这个文件只是一个demo,也没有格式说明,可以说这个elo模块对一般开发者来说完全没有任何用处。e2e模块和整个其它的apollo系统也不兼容的,说明文件中指出是运行在ubuntu16上且依赖原生ros kinetic的,但其它的apollo模块都是运行在ubuntu14上且依赖apollo自己修改过的ros,ros-platform的。所以这两个模块开源的有点牵强啊。

感知模块也只是使用了激光雷达,没有和camera或者雷达做融合,也没有单独使用到camera和雷达。

所以直观感受Apollo要想量产商用还需要很长的路要走,fighting!!!。

编辑于 2018-10-27

文章被以下专栏收录