/****************Apollo源码分析****************************
Copyright 2018 The File Authors & zouyu. All Rights Reserved.
Contact with: 1746430162@qq.com 181663309504
源码主要是c++实现的,也有少量python,git下载几百兆,其实代码不太多,主要是地图和数据了大量空间,主要程序
在apollo/modules目录中,
在apollo/modules目录中,
我们把它分成以下几部分(具体说明见各目录下的modules):
感知:感知当前位置,速度,障碍物等等
Apollo/modules/perception
预测:对场景下一步的变化做出预测
Apollo/modules/prediction
规划:
(1) 全局路径规划:通过起点终点计算行驶路径
Apollo/modules/routing
(2) 规划当前轨道:通过感知,预测,路径规划等信息计算轨道
Apollo/modules/planning
(3) 规划转换成命令:将轨道转换成控制汽车的命令(加速,制动,转向等)
Apollo/modules/control
其它
(1) 输入输出
i. Apollo/modules/drivers 设备驱动
ii. Apollo/modules/localization 位置信息
iii. Apollo/modules/monitor 监控模块
iv. Apollo/modules/canbus 与汽车硬件交互
v. Apollo/modules/map 地图数据
vi. Apollo/modules/third_party_perception 三方感知器支持
(2) 交互
i. Apollo/modules/dreamview 可视化模块
ii. Apollo/modules/hmi 把汽车当前状态显示给用户
(3) 工具
i. Apollo/modules/calibration 标注工具
ii. Apollo/modules/common 支持其它模块的公共工具
iii. Apollo/modules/data 数据工具
iv. Apollo/modules/tools 一些Python工具
(4) 其它
i. Apollo/modules/elo 高精度定位系统,无源码,但有文档
ii. Apollo/modules/e2e 收集传感器数据给PX2,ROS
自动驾驶系统先通过起点终点规划出整体路径(routing);然后在行驶过程中感知(perception)当前环境
(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;
控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车.
(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;
控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车.
我觉得这里面算法技术含量最高的是感知perception和规划planning,具体请见本博客中各模块的分析代码。
/****************************************************************************************
#如何运行离线感知展示台
尽管Dreamviewer工具可以直观地模拟感知模块,但它缺乏可视化点云和ROI区域的能力,这对调试和测试感知算法很有帮助。为此,我们提供了一个基于OpenGL和PCL库的离线可视化工具来显示点云的障碍感知结果。请在Apollo官方网站上查看[演示视频](http://apollo.auto/platform/perception.html),了解这款离线感知可视化工具。我们介绍在Docker中构建和运行离线可视化器的详细步骤,如下所示:
### 1.准备PCD和姿势数据
在运行可视化器之前,我们需要准备必要的PCD和姿态数据,这些数据可以从记录点云数据的ROS包中提取。为了便于数据提取,我们提供一个ROS启动文件来转储PCD帧文件和一个python脚本来为每个帧生成Pose文件。1.1启动PCD导出器(详见[Velodyne驱动程序文档](https://github.com/ApolloAuto/apollo/tree/master/modules/drivers/velodyne))
```
roslaunch velodyne export_pcd.launch
```
1.2玩ROS包
ROS包的默认目录是`/ apollo / data / bag`。假设ROS包的文件名是`example.bag`。
```
cd / apollo / data / bag
rosbag play --clock example.bag
```
播放包时,PCD文件将被转储到导出目录(defalut:`/ apollo / data / pcd`)。提取的PCD文件根据它们的帧号命名,该帧号对应于从点云ROS主题(例如,`/ apollo / sensor / velodyne64 / compensator / PointCloud2`)播放记录的消息的顺序。另外,还有两个其他文件(`stamp.txt`和`pose.txt`)在导出目录中生成。它们将用于为每个帧生成Pose文件。
1.3生成姿势文件
我们提供了一个Python脚本`gen_pose_file.py`来从`pose.txt`生成Pose文件。
```
cd / apollo / modules / perception / tool
python gen_pose_file.py / apollo / data / pcd
```
生成的Pose文件的名称与PCD文件的帧号相对应。这意味着帧的PCD和Pose文件的名称是相同的,但具有不同的扩展名(即,分别为.pcd和.pose)。
### 2.构建离线感知展示台
我们使用Bazel来构建离线感知可视化器。```
cd / apollo
bazel build -c opt // modules / perception / tool / offline_visualizer_tool:offline_lidar_visualizer_tool
```
选项`-c opt`用于构建具有优化性能的程序,这对于实时感知模块的离线模拟和可视化非常重要。
如果您想用GPU运行感知模块,请使用以下命令:
```
bazel build -c opt --cxxopt = -DUSE_CAFFE_GPU // modules / perception / tool / offline_visualizer_tool:offline_lidar_visualizer_tool
```
### 3.使用离线感知模拟运行Visualizer
在运行可视化器之前,可以在配置文件`/ apollo / modules / perception / tool / offline_visualizer_tool / conf / offline_lidar_perception_test.flag`中设置数据目录和算法模块设置。每个算法模块的详细参数设置可以根据`/ apollo / modules / perception / tool / offline_visualizer_tool / conf / config_manager.config`中的相应配置文件进行设置。然后您可以使用以下命令通过离线感知仿真运行可视化器:```
/阿波罗/巴泽勒滨/模块/感知/工具/ offline_visualizer_tool / offline_lidar_visualizer_tool
```
现在您将看到一个弹出式窗口,逐帧显示点云的感知结果。用紫色矩形边界框显示障碍物。有/无ROI区域的点云显示有三种模式:(1)以灰色显示所有点云; (2)仅以绿色显示ROI区域的点云; (3)显示绿色ROI区域的点云和其他灰色区域的点云。您可以按下键盘上的`S`键,依次切换模式。