欢迎访问我的个人博客: zengzeyu.com
前言
KITTI 点云数据集 bin 格式转 pcd 格式请参照本人博客文章: 《KITTI - 二进制点云数据集》。
KITTI下载点云数据集为 unorganised , 这为计算带来了麻烦,本文将无序点云进行排序生成有序点(organiesd)。
解决方案
KITTI 点云数据集是原始激光雷达点云经过了预处理之后的点云,预处理包括:
- 将高度为2米以上点过滤(2米为估计,没有考证)
- 噪点过滤
思路 1:
- 将垂直方向上的激光束按照64个水平高度格子进行分类
- 在每一个水平高度上,按照水平角度分辨率计算此排激光束排序
- 根据水平面上的 x、y 坐标值进行排序
预期问题:
- 每一束激光的角度对应格子,不一定能正好对上,也就是说,可能存在数据偏差,结果导致某一个格子没有点,某个格子有多个点情况。当然,这种情况在激光雷达生成原始数据中就存在。
重要问题:
1. 怎样判断哪一堆点云属于一束激光扫出来的?或者说,怎样判断在 *unorganised 点云中哪里是下一帧点云的分隔标识?通过哪些信息来定义这个标识,从而能保证分隔正确?*
思路:
KITTI数据集存储是按照一束激光的所有扫描数据存储完之后再存储下一束激光的数据,所以标识可以通过计算点在水平面上的转角值之差来得到。
解决方法:
因为每一束激光扫描起始点转角为0°附近值,结束点转角为360°附近值,所以在unorganised点云中,当相邻两个点转角值差大于100°(或者更大,值可任意取,但建议不要超过300°)时,可认定为两束激光扫描点云储存在unorganised点云中的分界标识。2. 如何确定每一排格子数目?怎样将每一束激光点云储存在对应的此排格子中?
思路:
a. 由官方提供水平角分辨率0.08°进行格子数确定
b. 统计每排最小转角 alpha ,以此作为水平角分辨率
解决方法:
根据方法b计算得出alpha值在0.08附近:
0: 0.0766167
1: 0.0766167
2: 0.0766167
3: 0.0791294
4: 0.0815647
5: 0.0740187
6: 0.0815647
7: 0.0766167
8: 0.0791294
9: 0.0766167
10: 0.0791294
11: 0.0815647
12: 0.0815647
13: 0.0815647
14: 0.0791294
15: 0.0766167
16: 0.0815647
17: 0.0791294
18: 0.0791294
19: 0.0791294
20: 0.0815647