继上篇:Apollo 6.0的融合组件分析(fusion_component)和Apollo 6.0的融合模块入口分析(obstacle_multi_sensor_fusion),本文详述2. 主融合逻辑
部分(即BaseFusionSystem的Fuse函数)。
1. 流程图
ProbabilisticFusion::Fuse的流程图如下所示,
流程图说明:
-
1. 缓存帧数据
时会自动检测帧的SensorId是否在一个名叫sensors_的unordered_map中,如果不在则添加。然后把帧数据加入sensors_的值里。按传感器id缓存帧 -
2. 获取所有传感器的缓存帧
中对每个传感器都抽取从上一次请求获取帧的时间到这次的主传感器帧时间之间的最晚的那一帧。 -
3. 主融合逻辑(FuseFrame)
内容很多,后续文章详述。 -
4. 收集融合帧(CollectFusedFrames)
中允许发布的轨迹的逻辑如下所述- 如果lidar看不到,radar看不到,camera看到且给的不是3d目标且障碍物不是交通锥则不能发布
- 如果在深夜(11点后),以下三点同时为假则不能发布,此处条件来自pbf_keeper.cc。
- 配置中被lidar看到就发布的标志位为true且被lidar看到
- 配置中被radar看到就发布的标志位为true且被radar看到,与此同时,如果是前向radar直接为假,如果是后向radar,其观测距离大于最小置信距离且速度大于4,存在概率大于设定阈值。
- 配置中被camera看到就发布的标志位为true且被camera看到且相机输出3d目标且不是深夜且(是交通锥或者距离大于相机最小发布距离)且存在概率大于阈值
- 运用追踪次数过滤逻辑且追踪次数小于阈值