由于整个工程较大,第一次托管在Github上的代码逻辑比较混乱,多种语言掺杂也不利于整合。因此,重新整理了一下逻辑,在Gitee上使用Cpp重构了此项目,python仅用于原始数据的解析,Gitee项目地址:AndyYang/setSail2由于整个工程较大,第一次托管在Github上的代码逻辑比较混乱,多种语言掺杂也不利于整合。因此,重新整理了一下逻辑,在Gitee上使用Cpp重构了此项目,python仅用于原始数据的解析,Gitee项目地址:
https://gitee.com/andyangj/set-sail2.gitgitee.com最新进展:
目前雷达Detections点和3D-Box真值向雷达坐标系的映射已经结束,结果如下所示,接下来开始做聚类。
知乎视频www.zhihu.com一、目标
完成一个基于多传器数据融合的目标跟踪Demo,也是为了将来论文中能够用到其中的部分数据,将其中的思路和部分提取到的数据内容开源,也能给一些想做多传感器数据融合的研究人员一些启发。
尽管我已经尽量的使整个项目流程简单,但是对于研究目标跟踪来说,牵涉到的内容太多。因此,非常期待有想加入本项目的学习、研究人员加入我们的Github仓库,一起交流。我相信完成这个项目之后对参与的每个人也是一种非常大的提升,之后我会在仓库的项目说明文件README.md写出每个参与人员的贡献。当然,需要参与者至少有一定的编码能力,至少熟悉Python和Cpp中的一种,Julia做为中间的结果测试和数据可视化,可不做要求。
二、代码相关内容
2.1 代码仓库
代码使用Git进行版本管理,更新在Github:
AndyYangjd/data_fuse_demogithub.com其中,main分支主要发布主要的版本,dev分支来同步最新的代码,其余分支为开发人员各自的分支。
如果本代码对你有帮助,请不要忘记Star一下,Thank-U。
2.2 进度
目前整个小项目还在更新之中,感兴趣的请持续关注,计划在未来的二三个月内完成。
写这篇文章的时候还在目标检测阶段。
2.3 语言
- Python3(3.8版本):主要完成数据的解析和提取
- Cpp(支持C++11):项目的最终主要工程代码,会大量依赖Eigen3中的矩阵相关操作
- Julia(1.5.1):主要对中间的计算过程进行测试验证,最后完成数据的可视化
三、数据集
采用nuScenes数据集,总共包含1000个场景,1个激光雷达、5个毫米波雷达和6个单目相机的数据,详细介绍请参考nuScenes主页:https://www.nuscenes.org/。
为了简单说明原理,本项目具体使用的融合数据内容如下:
- 数据集位置:nuScene中第1个场景中的数据,总共持续20s,采样频率是2Hz,即0.5s采样一次。
- 传感器通道:Front-Camera 和 Front-Radar,即前置相机和前置毫米波雷达
四、融合思路
1、目标检测
因为是异质传感器数据的融合,因此只能在Object层融合,即目标级融合。想要做融合,首先就在各个传感器的数据上提取出各自的目标物,然后进行融合。
不幸的是,nuScenes数据集中提供的都是原始数据,即相机提供每帧的图片,雷达提供pcd文件。将提供的二进制pcd文件转换为asci形式的pcd文件后可以看到里面每个点的相关信息,如图1所示。使用点云库PCL中的pcl_viewer工具可视化后,可以看到是一个平面点云,如图2所示。
仅目标检测提取每年就有很多论文在发表,如果想做跟踪,需要上游有目标物的信息,但是遗憾的是个人做研究只能把所有的流程都走一遍。
同样为了简单期间,本项目图像的目标物检测使用YOLO5,毫米波雷达的目标检测原理暂不公开,有想了解的将来可以去看代码。
关于雷达检测:已经开发一个看nuScenes雷达原始数据的可视化工具,每个点后面有一个尾巴表示点相对大地的绝对速度,未来还会继续增加其它功能,用手机录了一个这样的视频如下:
知乎视频www.zhihu.com2、目标融合
目标融合的主要任务是空间和目标对齐。
空间对齐:将两个传感器检测到的目标进行融合,主要涉及到FOV重叠区域的目标融合,还是每个传感器FOV之外目标物的真实性概率判断。
时间对齐:虽然相机和毫米波雷达的时间戳并不是完全一致,但是nuScenes已经将同一个采样点相机和雷达的两个时间戳标定的非常接近,因此时间对齐这块的误差可以忽略不计。
3、目标滤波
滤波算法和关联算法是目标跟踪的核心算法。
目标滤波只要是做针对当前时刻,对当前目标物的下一时刻的位置进行预测。常见的Kalman, EKF, UKF和PF等,本项目后续会选择一种或几种进行验证,本专栏之前写过这些算法的代码实例文章。
4、目标关联
目标关联主要是将不同时刻的目标物给串成不同的航迹,也可以理解为进行航迹管理。目前常用的算法有KNN, PDA, JPDA等算法,本专栏之前写过这些算法的代码实例文章。本项目计划验证KNN和JPDA算法,并对航迹的管理进行一定的测试。
从前面的整个开发流程可以看到,做多传感器的目标跟踪涉及到很多的算法,其中的某一个小环节都可以做很多的研究论文。对于高校学生来说,获取数据是非常难的一件事,因此在nuScenes数据集上做研究测试是一件比较幸运的事。不幸的是,为了最终的结果,中间的每一步都需要自己做。
因此,如果你是做跟本文相关的研究的,有Python或Cpp基本,有想加入进来的,那么不要犹豫,加入我们的Github吧。