天天看点

百度Apollo(一):代码模块

百度Apollo:https://github.com/ApolloAuto/apollo/tree/master/modules

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

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

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

modules目录内容:

  1. calibration:校准模块,使用前必须对系统进行校准和标定,包括激光雷达与摄像头、毫米波雷达与摄像头等。所谓校准就是要对齐激光雷达、摄像头以及毫米波雷达获得的信息,我们知道激光雷达可以获得详细的3D信息,但是不能获得颜色信息,摄像头可以获得颜色信息,但是无法获得深度等3D信息,毫米波雷达不能获得颜色信息,但是可以获得3D信息,三者获得的信息对齐后,就可以同时获得实际环境中的3D信息和颜色信息。
  2. canbus:接收控制指令,同时给控制模块control发送车身状态信息。
  3. common:公共源码模块如日志,工厂模式的实现,日志系统,监控模块,数学算法等。
  4. control:控制模块,基于决策规划的输出路径及车身的状态使用不同的控制算法来输出控制命令,如转向刹车,控制等。
  5. data:收集、存储、处理收集到的各种数据。
  6. dreamview:可视化模块,查看规划的轨迹及实时的转向刹车油门信息。
  7. drivers:GNSS设备驱动,包括NovAtel, Applanix, u-blox.激光雷达velodyne驱动,用来读取传感器内容并输出对应的消息。
  8. e2e:end to end,端到端深度学习,所谓e2e指的是由传感器的输入,直接决定车的行为,例如油门,刹车,方向等。也就是机器学习的算法直接学习人类司机的驾驶行为。这部分在代码中需要另外下载,学习的数据主要来源于传感器的原始数据,包括图像、激光雷达、雷达等。end-to-end输入以图像为主。 输出是车辆的控制决策指令,如方向盘角度、加速、刹车。 连接输入输出的是深度神经网络,即通过神经网络直接生成车辆控制指令对车辆进行横向控制和纵向控制,中间没有人工参与的逻辑程序。横向控制,主要是指通过方向盘控制车身横向移动,即方向盘角度。纵向控制,是指通过油门和刹车控制车身纵向的移动,即加速、刹车等。横向模型的输出没有采用方向盘角度,而是使用要行驶的曲率(即拐弯半径的倒数)。
  9. elo:利用高精地图的自定位模块。这部分的代码也是另外下载。前向的摄像头会采集车道数据以实现更精确的定位,输出的位置信息包括车辆的x y z坐标,还有就是在百度高精度地图中的ID。
  10. localization:定位模块,输入GPS和IMU信息输出自车定位信息。
  11. map:高精地图模块,输出结构化地图信息,如车道线,十字路口等。
  12. monitor:监控模块,监控硬件状态,同时把状态发给hmi。
  13. perception:感知模块,输入激光点云,高精地图,变换坐标,输出3D障碍物包括速度大小和方向。
  14. planning:决策规划模块,apollo1.0中决策各规划是分开的模块decision和planning模块,现在decision模块合并在planning里了。
  15. prediction:预测模块,输出感知的障碍物信息及自定位信息输出障碍物未来的轨迹。
  16. routing:全局导航模块,输入包括地图信息各起点终点地址,输出一个全局的导航信息。
  17. third_party_perception:第三方感知。
  18. tools:工具模块。

首先,用户输入目的地,routing模块就可以根据终点位置计算出具体的导航信息。激光雷达、毫米波雷达和摄像头拍摄到的数据配合高精度地图由percepting模块计算出3D的障碍物信息并识别交通标志及交通信号,这些数据进入perdiction模块,计算出障碍物的可能轨迹,如此就可以结合以上信息并根据车辆定位模块localizationg提供的车辆位置由planning模块得到车辆应该走的具体车道。

得到车道后车辆control模块结合车辆的当前状态计算加速、刹车和方向的操作信号,此信号进入CAN卡后输出到车内,如此实现了车辆的自动驾驶。

继续阅读