公众号【调皮连续波】
【正文】
编辑 | 调皮哥的小助理 审核 | 调皮哥
1、引言
4D成像雷达开源数据集,其实好用的并不多,VOD数据集我个人感觉还可以。这其实也在之前分享过,但是为了更加清楚地展示这个数据集如何使用,本期文章就简单做个分享。
在MATLAB环境下可以得到以下的效果:
2、数据集介绍和格式
见链接:https://github.com/tudelft-iv/view-of-delft-dataset#annotation
以及文章:雷达开源数据集 | 代尔夫特数据集(VOD),4D雷达、激光雷达和相机数据。
3、数据集解析步骤
本数据集的内容有很多,本文仅作为抛砖引玉,剩余诸多内容留待读者自行探索,本文所涉及的脚本为调皮哥自己在工作之余编写,如有疑问,请在【雷达技术交流群】中交流,全职工作比较繁忙,尽量减少私信。
下面开始解析数据:
本次解析数据,主要就是Bin转mat,然后读取mat数据进行播放,没有什么特殊的地方。然后Python主要实现功能是Bin转mat,当然熟练Python的读者也完全可以用它进行其他的开发,而不需要再转为mat,比如目标识别、雷达或者激光点云处理、雷视融合等等。
MATLAB主要实现的功能是读取mat,然后播放,同理MATLAB也能完成Python能够完成的事情。
关于Python和MATLAB,我个人感觉MATLAB更加适合于工程开发和算法验证,但是缺点就是需要许可证,Python的好处就是开源,库比较多。我喜欢MATLAB,Python也可以上手,萝卜白菜,各有所爱。
(1)Python
Python脚本比较方便,同时可以基于原来数据集提供的脚本和库函数下,有的读者可能喜欢Matlab,因此我把数据集也转成了.mat。
Bin的文件名最大数字是"09930",但文件数量只有8682多个,因此我们需要for循环9930次,一次读取所有文件,如果遇到读不到的文件夹,则continue。
部分脚本如下:
读者需要修改文件路径,切不可上来就用。
软件版本:PyCharm Community Edition 2022.2.2
同时还需要下载代码:https://github.com/tudelft-iv/view-of-delft-dataset#annotation
数据转换脚本:
# 这个脚本的目的是讲VOD数据的Bin格式转为.mat格式
from vod.configuration import KittiLocations
from vod.frame import FrameDataLoader
from vod.visualization import Visualization2D
import os
import matplotlib.pyplot as plt
from scipy.io import savemat
from vod.frame import FrameTransformMatrix
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
kitti_locations = KittiLocations(
root_dir="E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/view_of_delft_PUBLIC",
output_dir="E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/view_of_delft_PUBLIC",
)
# 循环读取Bin文件
for frame in range(0, 1, 1):
frame_name = str(frame).zfill(5)
# 预先寻找
current_path = "E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/view_of_delft_PUBLIC/radar/training/velodyne/"
flag = os.path.exists(current_path + frame_name + '.bin')
if not flag:
continue
frame_data = FrameDataLoader(kitti_locations=kitti_locations, frame_number=frame_name)
transforms = FrameTransformMatrix(frame_data)
vis2d = Visualization2D(frame_data)
radar_data = frame_data.radar_data
lidar_data = frame_data.lidar_data
savemat('E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/matlab/radar/' + frame_name + '.mat',
{'score_of_tom': radar_data})
savemat('E:/BaiduSyncdisk/调皮连续波(公众号)/雷达数据集/VOD数据集/matlab/lidar/' + frame_name + '.mat',
{'score_of_tom': lidar_data})
需要等待20几分钟,然后全部数据就转好了,这个时候不要着急。如果无法确保自己的程序是否运行正确,可以再开始的时候选择2帧数据进行验证,正确了再执行所有。
完成之后是这个样子的:
好了,如果不出意外的话,现在要该MATLAB上场了。
(2)MATLAB
版本:MATLAB 2022b,可千万要注意,有的老版本不支持新函数。数据读取与绘图脚本如下所示:
clc;
close all;
clear all;
%%
addpath('E:\BaiduSyncdisk\调皮连续波(公众号)\雷达数据集\VOD数据集\view_of_delft_PUBLIC\lidar\training\image_2\');
addpath('E:\BaiduSyncdisk\调皮连续波(公众号)\雷达数据集\VOD数据集\view_of_delft_PUBLIC\lidar\training\calib\');
for index =1650:9930
tic
file_name = num2str(index,'%05d'); %字符扩展
%判断文件是否存在
flag = exist([file_name,'.mat'],'file');
if flag ==0
continue;
end
%读取传感器数据
radar_data = importdata(['E:\BaiduSyncdisk\调皮连续波(公众号)\雷达数据集\VOD数据集\matlab\radar\',file_name,'.mat']);
camera = imread([file_name,'.jpg']);
lidar_data = importdata(['E:\BaiduSyncdisk\调皮连续波(公众号)\雷达数据集\VOD数据集\matlab\lidar\',file_name,'.mat']);
%校准
%绘图显示
figure(1);
subplot(1,3,1);
set(gca,'Units','normalized','Position',[0.02,0.1,0.3,0.8]);
imshow(camera,[],'parent',gca);
title(['实时相机 帧数',file_name]);
subplot(1,3,2);
% set(gca,'Units','normalized','Position',[0.1,0.2,0.3,0.8]);
plot3(-lidar_data(:,2),lidar_data(:,1)-2.5,lidar_data(:,3)+1.18,'b.');
hold on
plot3(-radar_data(:,2),radar_data(:,1),radar_data(:,3),'r.');
xlim([-20,20])
ylim([-40,40])
grid on
view(2);
title('激光+毫米波雷达点云数据');
hold off
subplot(1,3,3);
% set(gca,'Units','normalized','Position',[0.02,0.1,0.3,0.8])
plot3(-radar_data(:,2),radar_data(:,1),radar_data(:,3),'b.');
xlim([-20,20])
ylim([0,60])
grid on
view(2);
title('4D成像雷达点云数据');
hold off
%%记得把横纵坐标加上,我忘记了,不想加了。
end
效果显示:
当然,这还需要数据集的支持,数据集的下载可以见官方的链接。
https://github.com/tudelft-iv/view-of-delft-dataset#annotation
5、剩余事项
好了,由于篇幅和时间有限,暂时就展示这些内容。剩余其实还有很多内容,需要读者自行丰富,比如聚类、跟踪、点云匹配、雷视融合、点云目标识别等。
上述代码和数据集是完全配合使用的,需要数据集、整套代码、实现辅导可以点这个链接联系调皮哥:雷达er入群指南,皮哥空闲之时可以交流。
【本期结束】
目前我的工作经验尚浅,还有很多内容需要学习,如果还有没有说到或者不全面的地方,还请指正,感谢大家。