0.写在前面
因为工作中的项目使用到ros,因此本次对于apollo的分析是基于apollo 3.0
代码阅读工具为understand
1.目录结构
1.1 根目录
docker:容器相关
docs:帮助文档,写得很详细
modules:涉及到的各个模块,包括感知模块,规划模块,控制模块等
1.2 mudules目录
- calibration: 标定模块,根据不同车型的传感器方案提供包含车身、摄像头、激光雷达、GNSS、感知、雷达、初始化等参数,该文件夹只有标定好的参数,并没有标定的工具和方法。
- canbus: can总线模块,该模块接受并执行控制模块发出的指令,并收集底盘的状态作为反馈。
- common: 公共源码模块。包括如日志,工厂模式的实现,日志系统,监控模块,数学算法等。
- control: 控制模块。基于决策规划的输出路径及车身的状态使用不同的控制算法来输出控制命令,如转向刹车,控制等。
- data: 数据模块。收集、存储、处理收集到的各种数据的。
- dreamview: 可视化模块,查看规划的轨迹及实时的转向刹车油门信息
- driver: 驱动模块,包含摄像头、CAN总线、GNSS、激光雷达、麦克风
- e2e: end to end,端到端的强化学习
- elo: 利用高精度地图的自定位模块
- guardian: 系统检测保护模块
- localization: 定位模块,输入GPS和IMU信息输出自车定位信息
- map: 地图模块,输出结构化地图信息,如车道线,十字路口等。
- monitor: 监视器模块,监控硬件状态,同时把状态发给交互界面。
- perception: 感知模块,输入激光点云,高精地图,变换坐标,输出3D障碍物包括速度大小和方向。
- planning: 轨迹规划模块
- prediction: 预测模块,输出感知的障碍物信息及自定位信息输出障碍物未来的轨迹。
- routing: 路由模块,输入包括地图信息各起点终点地址,输出一个全局的导航信息。
- third_party_perception: 第三方感知模块
- tools: 通用监控与可视化模块。
3.Apollo框架
在apollo 3.0里,Runtime Framework应该就是ros了,rtos实时操作系统,ros通过can总线与之通信,从而控制各个硬件模块
4.软件结构
整体的逻辑结构和人开车的过程是一致的,(感知模块)眼睛去观察周围的情况,前面后面有没有人、车,距离多远,自己在哪条车道,前面的标识牌是什么,这条道限速多少。(预测模块)前面的车应该不会刹车吧,两边的那个人有没有可能突然串出来,能不能换车道。(规划模块)周围情况都知道了,那该转就转,该换道换道,该加速加速,该刹车刹车。(控制模块)脑子想好一切了,手打方向盘,踩离合挂挡,油门踩到底,逮虾户