相关链接 | |
---|---|
上篇链接 | Apollo6.0融合帧分析(FuseFrame函数) |
下篇链接 | Apollo 6.0更新成功匹配的航迹_前景(UpdateAssignedTracks) |
KM匹配算法的C++实现 - Apollo 6.0前景匹配算法理解 |
hm_data_association文件夹中记录了与匹配相关的代码,参考文献。
1. 流程图
HMTrackersObjectsAssociation::Associate (主函数)
该文件在/fusion/lib/data_association/hm_data_association/hm_tracks_objects_match.cc
主public函数: HMTrackersObjectsAssociation::Associate
,运行步骤如下:
- IdAssign,首先直接匹配航迹中之前就关联过的观测 (后面详述)
- ComputeAssociationDistanceMat计算关联矩阵,关联值取的与历史多种传感器计算距离的最小值
- 2.1 TrackObjectDistance::Compute函数计算单个观测和单个轨迹的距离 (后面详述)
- MinimizeAssignment最小化匹配,先计算连通子图,再对连通子图计算匈牙利匹配 (后面详述)
- PostIdAssign,最后仍未匹配上的被相机看到且没被lidar看到的航迹 (后面详述)
- GenerateUnassignedData利用配对结果来生成最终的未匹配的航迹和未匹配的观测
- ComputeDistance保存航迹track和观测meas的关联值(最小距离)到
association_result->track2measurements_dist
(以航迹索引的距离最小值)和association_result->measurement2track_dist
(以测量索引的距离最小值)中,- 匹配成功的测量航迹对由
ComputeAssociationDistanceMat
的距离矩阵得到 - 对于匹配失败的测量,
- 当测量不是相机时,最小距离为距离矩阵中与所有航迹最近的距离
- 当测量是相机时,用三维投影到2d相片的相似度(范围0-1)来度量
- 对于匹配失败的航迹,其最小距离为距离矩阵中与所有测量最近的距离
- 匹配成功的测量航迹对由
- 打印诊断信息包括测量个数、航迹个数、成功匹配对数、匹配失败的航迹数和匹配失败的测量数