在做图像配准时就听闻过一些点云的方法,却没对其有太多的认识,只是知道点云point cloud顾名思义就是一些离散点的集合。现在在无人驾驶中一些激光雷达的作用其实就是生成点云数据,接下来介绍一下点云数据的含义和基础的使用方法。
虽然特斯拉是坚定的纯视觉自动驾驶路线的支持者,但其实更多的无人驾驶公司同时还会使用激光雷达LiDAR。经常见到无人驾驶的车顶会有一个旋转的圆柱体,其实就是机械式激光雷达,通过旋转镜面将激光反射到不同角度,得到360度的数据:
雷达有很多种,激光雷达只是其实一种,它的全称是light detection and ranging,就是使用激光进行探测和测距。
先来讲测距的原理。
因为同时有发射器和接收器,而光速是已知的,所以很明显可以利用波束传播的时间来得到距离。那么怎么得到传播时间呢?一个方法就大名鼎鼎的TOF,time of fly,又叫做光束法。这种方法依靠物体的漫反射,对脉冲宽度和接收器时间分辨率要求高,所以总体效果一般。第二种方法是相位法phase difference,这是一种相对的方法:不是发射一束而是成周期地发射,所以回波会产生相位差,从而可以估计传播时间。
除了基于时间段测距,还有基于几何的测距。三角测量法triangulation principle利用了三角形相似原理。
探测是基于测距的,目的是得到物体的三维坐标。以什么坐标系?
得到三维坐标及每个点对应的反射强度就构成了点云数据。接下来看一下真实的点云数据是什么样子。从阿波罗项目页可以下载到一些点云数据。这里百度提供了两种数据格式:一种是.pcd,一种是.bin文件。.pcd是PCL库官方指定的格式,每一个.pcd文件都会有一个文件头,就和Opencv中的Mat一样,会有一个数据头去描述这个点云图的一些基础信息:
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7 #指定PCD文件版本
FIELDS x y z intensity timestamp #指定一个点可以有的每一个维度和字段的名字
SIZE 4 4 4 1 8 #用字节数指定每一个维度的大小
TYPE F F F U F #一个字符指定每一个维度的类型,F是浮点
COUNT 1 1 1 1 1 #每一个维度包含的元素数目,一般都是1,但是描述子可能是128
WIDTH 101045 #无序点云的数目或者有序点云一行的数目
HEIGHT 1 #无序点云时设置为1,有序时表示一列的数目
VIEWPOINT 0 0 0 1 0 0 0 #视点信息被指定为三维平移+ 四元数,默认值为0001000
POINTS 101045 #指定点云中点的总数
DATA binary_compressed #指定存储点云数据的数据类型:ASCII或者Bin,bin更快速
按道理它就是一个文本,但是直接以文本打开的话除了刚才讲到的文件头,其余数据都是乱码,python中使用utf-8和ISO-8859-1和rb都无法看到正常的点坐标。所以兜兜转转半天,还是通过安装第三方库轻松解决。
import open3d as o3d
print("Load a ply point cloud, print it, and render it")
pcd = o3d.io.read_point_cloud("20期.pcd")
print(pcd)
print(o3d.np.asarray(pcd.points))
o3d.visualization.draw_geometries([pcd])
可以得到坐标及可视化结果:
[[ -8.39819813 -5.66665173 -0.9710691 ]
[ -8.13930702 -5.81639719 -0.9073652 ]
[-22.42602539 -21.35739517 0.32076412]
...
[ -6.15335035 -5.64766216 -1.15699255]
[ -6.67443991 -5.32205296 -1.74743378]
[ -6.31309557 -5.57189178 -1.63395274]]
也可以安装PCL,似乎需要自己编译,暂未实现。
Reference:
1.https://www.zhihu.com/question/418827194/answer/1451606698
2.旋转https://baijiahao.baidu.com/s?id=1695602953340739196&wfr=spider&for=pc
3.readhttps://www.cnblogs.com/zyber/p/9578240.html
4.格式https://blog.csdn.net/weixin_46098577/article/details/111594733
5安装pclhttps://blog.csdn.net/McEason/article/details/105195285