点云基础知识
- 一、激光雷达介绍
- 1. 机械旋转式雷达
- 2. 固态雷达
- 二、测量模型与点云
- 1. Range-Azimuth-Elevation(RAE)- XYZ
- 2. 点云的Packets表示
- 3. 点云的鸟瞰图表示
- 4.Range Image
- 5.TSDF
- 三、点云的近邻关系
- Brute-force KNN
- 栅格、体素
- KD-tree寻找近邻
- 四叉树与八叉树
一、激光雷达介绍
1. 机械旋转式雷达
特点:
- 获取360度视野
- 需要转动探头,通常10Hz下运行
- 机械结构复杂,价格昂贵,寿命相对较短(机械旋转的激光雷达的使用寿命一般在几千小时;固态激光雷达的使用寿命可高达10万小时)
- 常用厂商:Velodyne,hesai,速腾,雷神等,常用16线、36线、64线,机器人单线用的较多等
2. 固态雷达
特点:
- 不需要转动探头,通过转动镜片(通过控制反射镜控制探头打到的位置)、相控或者flash来实现
- 转镜(半固态),相控或者flash(全固态)
- 价格便宜,但视野有限,通常60-120°左右
- 点云精度厘米级
- 厂商:Livox花型扫描图案
二、测量模型与点云
1. Range-Azimuth-Elevation(RAE)- XYZ
可以很容易将极坐标系变换得到点在Lidar坐标系下的位置
反之:
除了点云信息,lidar还可以记录每个点的时刻、反射率、线数等信息,反射率可以用于提取标记物等。目标的反射率越高则测量的距离越远,目标的反射率越低则测量的距离越近。
使用时的一些注意事项,以Livox为例
- 近处存在盲区,77*70°FOV, 4m以内存在盲区
- Livox的规格为190m@10%
- 10%是指反射率(激光打到不同物体上,能反射回来的激光占发射出去激光的比例,白纸漫反射90%)
反射率的应用:Sparse-Direct Alignment based on Intensity Image中将原始点云的反射率信息投影生成2D图片,使用类似SVO的方案进行定位。
2. 点云的Packets表示
Packets有比价好的压缩比,是很多雷达硬件厂商提供的测量方式,用于通信和存储。
在RAE模型中,只有range是实际测量数据,A和E可以通过雷达参数得到,packets中,同一线的数据共享一个方位角或者同一时刻共享同一个俯仰角。和雷达参数有关,使用不同厂商需要做好对齐。
3. 点云的鸟瞰图表示
无人车场景,可以投影到俯视图(Bird-eye View, BEV)中处理,其实就是假设空中有一个相机,把3D点投影到2D图像上,丢弃了点云的高度信息。
I
x
,
I
y
I_x,I_y
Ix,Iy为图像中心,
c
x
,
c
y
c_x,c_y
cx,cy为点云中心,r对应每个像素多少m
4.Range Image
将点云转成图片,类似RGBD相机的D
- 横坐标为azi方位角,纵坐标为点云线数,读数为距离测量值
- 使用:在range image中可以进行聚类,快速分割柱子等,本质上用2D图像像素近邻关系代替空间近邻,计算量更小
5.TSDF
三、点云的近邻关系
这部分主要是为了找到点的最近邻匹配
Brute-force KNN
暴力搜索找最近的点,开销大,可以并行
- 将点云视为未排序的数据进行查找
- 如果点云数组已经排序或者分割成块,可以加速查找
栅格、体素
- 将空间均匀分成网格或体素
- 利用栅格的临近关系缩小搜索范围,近邻查找时,先查找所在栅格,在查找近邻ID
落在栅格边界的点很容易出现错误的最近邻,近邻栅格选的越多,错误概率越低。
体素和栅格的使用:通常使用哈希表表达栅格或者体素数据,空的不保存,并定义近邻关系
通过下面方式找到近邻栅格或者体素
这样就可以在近邻的体素中暴力搜索了。劣势也很明显,边界点很容易找错近邻关系。近邻越多,找到真正近邻点的概率就越大,但同时计算量也越大,需要注意的是,这部分操作很容易进行并行加速。
KD-tree寻找近邻
K-d 树的构建
K-d 树的查找
寻找最近邻的方法:注如果点落在左侧,现在左侧查找,左侧找不到,判断此时计算近邻d1是否小于右侧到分界面最小距离d,是就不需要查找右侧了,不是还需要继续查找右侧。
K近邻问题:
在极端情况下要遍历整个树。
四叉树与八叉树
K-d 树类方法使用二叉树作为基本数据结构,在四叉树中,一个节点有四个子节点,而八叉树则有八个。这正好对应到物理空间中,我们可以把一个矩形按中心切成四等分,或者把一个三维立方体按中心切成八等分。
可以像 K-d 树一样,对一个二维/三维点云建立四叉 树/八叉树模型,然后利用类似的手段来寻找它的最近邻。这种方式由于对空间的分割方法更加均匀,而且四叉树和八叉树也可用于描述像地图这样覆盖整个空间的数据信息。
3D/二维栅格方法表现最好,K-d 树其次,最差的 显然是暴力搜索方法。不过,如果点云中含有更多的点,那么一个栅格内部的点也会增多,其计算 量会随着栅格内点数而线性增长,所以栅格方法并不适合处理稠密的点云。而 K-d 树的计算量则 是对数增加的。可以认为,在点云增加到一定规模时,K-d 树、八叉树等方法将会更优。