Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

有关角点提取一致性的问题 #18

Open
wing0716 opened this issue May 19, 2023 · 9 comments
Open

有关角点提取一致性的问题 #18

wing0716 opened this issue May 19, 2023 · 9 comments

Comments

@wing0716
Copy link

袁博您好,你们的工作很棒!我想请教一下有关角点提取一致性的问题?

背景是我现在在使用您的代码做一件另外的事情:不同时间的场景识别。主要任务是想要实现:用第一个时间采集的一个场景中的全部点云帧的STD描述子加入到数据库中,然后用另一个时间采集的同一场景的帧去与之前的数据库对比,实现场景重识别。

但我在测试中出现了一个现象,表现为对某一帧点云增加小幅度偏置后提取到的角点出现较大差异,比如把点云帧沿x方向整体偏移一个0.05米再重新提取角点,和未加偏置的提取角点结果差异较大,但当我把偏置设为1.0米或者1.0米的整数倍时,角点提取和未加偏置是一致的,不知道是否与参数voxel_size设置为1.0米有关吗,想请教一下您觉得原因可能是什么呢?

非常感谢您的工作!

@ChongjianYUAN
Copy link
Member

袁博您好,你们的工作很棒!我想请教一下有关角点提取一致性的问题?

背景是我现在在使用您的代码做一件另外的事情:不同时间的场景识别。主要任务是想要实现:用第一个时间采集的一个场景中的全部点云帧的STD描述子加入到数据库中,然后用另一个时间采集的同一场景的帧去与之前的数据库对比,实现场景重识别。

但我在测试中出现了一个现象,表现为对某一帧点云增加小幅度偏置后提取到的角点出现较大差异,比如把点云帧沿x方向整体偏移一个0.05米再重新提取角点,和未加偏置的提取角点结果差异较大,但当我把偏置设为1.0米或者1.0米的整数倍时,角点提取和未加偏置是一致的,不知道是否与参数voxel_size设置为1.0米有关吗,想请教一下您觉得原因可能是什么呢?

非常感谢您的工作!

感谢您的关注,和voxelization过程有关系,这个版本的角点提取受voxel size影响,以及平移的影响,可以理解为voxel size变化或者平移发生变化,空间的划分也会发生变化,尽管代码中已经添加了一些trick来规避空间划分不一致的影响,但是由于角点提取是在voxel层面操作的,所以这种差异有时候是无法避免的;我们后续拓展工作的角点提取不是voxel层面上,会更加鲁棒和一致

@wing0716
Copy link
Author

感谢您的及时回复,请问后续版本更新会释放新的角点提取方式吗,非常期待!

另外还有一个细节问题想请教,当我尝试把voxel size减小,比如设置为0.5m时,会出现角点无法正常提取的现象(平面点是可以正常提取的),在您提供的livox数据集和我自采数据集上都会表现出来,打印的报文如下,想请教您可能是什么原因导致的呢?

[Description] planes size:610
[pcl::KdTreeFLANN::setInputCloud] Cannot create a KDTree with an empty input cloud!
[Description] corners size:0
[pcl::KdTreeFLANN::setInputCloud] Cannot create a KDTree with an empty input cloud!
[Description] stds size:0
[ERROR] [1684550812.784372003]: No STDescs!
[Time] descriptor extraction: 5.66138ms, query: 0.704703ms

@OliverShaoPT
Copy link

袁博您好,你们的工作很优秀, 特别在计算速度方面超越了其他方法不少. 我目前在做重定位的尝试, 发现了一些问题想与您探讨.
首先, 我采用两种方法来保存先验描述子地图, 一种是选取一段连续帧点云数据构建局部点云来提取特征. 另一种方式是读取全场景的点云大地图, 然后根据xy坐标分割成多个局部点云来提取特征. 前者在重定位的时候能够匹配得上, 但后者不行,想请教一下您觉得原因可能是什么呢? (是否与盲区有关, 采用的是livox雷达)
感谢大佬!

@OliverShaoPT
Copy link

袁博您好,你们的工作很优秀, 特别在计算速度方面超越了其他方法不少. 我目前在做重定位的尝试, 发现了一些问题想与您探讨. 首先, 我采用两种方法来保存先验描述子地图, 一种是选取一段连续帧点云数据构建局部点云来提取特征. 另一种方式是读取全场景的点云大地图, 然后根据xy坐标分割成多个局部点云来提取特征. 前者在重定位的时候能够匹配得上, 但后者不行,想请教一下您觉得原因可能是什么呢? (是否与盲区有关, 采用的是livox雷达) 感谢大佬!

问题解决, 只取最新几帧构建的局部地图, 因为传感器与环境之间存在遮挡, 尚未对目标区域完成建图, 接着往前走接近目标区域时, 遮挡会逐渐减少, 目标区域的点云信息会增加. 因此在实时定位时, 选取机器人身后的点云, 与pcd生成的先验STD地图匹配时, 才能够匹配得上.

@wing0716
Copy link
Author

wing0716 commented Jul 2, 2023

@OliverShaoPT 您好,看起来我们似乎在做同样的任务,想请问您目前地点重识别的准确率高吗(建立先验数据库用一个路线,重识别用另一个不同时间的相似路线),因为我在测试时出现了重识别准确率不高的问题,想跟您深入交流下,感谢

@dustier
Copy link
Contributor

dustier commented Aug 15, 2023

@OliverShaoPT 您好,看起来我们似乎在做同样的任务,想请问您目前地点重识别的准确率高吗(建立先验数据库用一个路线,重识别用另一个不同时间的相似路线),因为我在测试时出现了重识别准确率不高的问题,想跟您深入交流下,感谢

我做了些实验:
首先播放完整的bag数据建了一张全局地图,把std_desc和提取的平面点云保存成离线数据库。

  1. 再次播放完整的bag数据,可以从离线的数据库中找到回环位置,从而实现重定位;
  2. 从bag数据某个中间位置开始播放建图,完全无法在离线数据库中找到回环位置,但可以找到在线的回环。原因应该如你之前所说,在线和离线地图两个坐标系不一致,角点一致性无法保证;
  3. 从bag数据中间位置播放建图,但和全局地图做了粗略地配准,voxel_size设置为2。目的在线、离线地图的坐标系不要相差太大,voxel格子大一些减小坐标系不一致的影响。但也没法在离线数据库中找到回环。

看起来voxel划分的不同对算法的影响比较大,目前我想实现无需人工指定初值的全局重定位,但我看到的大多数lidar重定位算法都需要人工给定初始位姿,有啥推荐的方法吗

@TongxingJin
Copy link

@OliverShaoPT 您好,看起来我们似乎在做同样的任务,想请问您目前地点重识别的准确率高吗(建立先验数据库用一个路线,重识别用另一个不同时间的相似路线),因为我在测试时出现了重识别准确率不高的问题,想跟您深入交流下,感谢

我做了些实验: 首先播放完整的bag数据建了一张全局地图,把std_desc和提取的平面点云保存成离线数据库。

  1. 再次播放完整的bag数据,可以从离线的数据库中找到回环位置,从而实现重定位;
  2. 从bag数据某个中间位置开始播放建图,完全无法在离线数据库中找到回环位置,但可以找到在线的回环。原因应该如你之前所说,在线和离线地图两个坐标系不一致,角点一致性无法保证;
  3. 从bag数据中间位置播放建图,但和全局地图做了粗略地配准,voxel_size设置为2。目的在线、离线地图的坐标系不要相差太大,voxel格子大一些减小坐标系不一致的影响。但也没法在离线数据库中找到回环。

看起来voxel划分的不同对算法的影响比较大,目前我想实现无需人工指定初值的全局重定位,但我看到的大多数lidar重定位算法都需要人工给定初始位姿,有啥推荐的方法吗

意思是说,两个坐标系之间,如果不能保证只是在xyz方向差voxel size的整数倍,导致同一帧点云提取出来不一样的特征,所以匹配不上了

@OliverShaoPT
Copy link

@OliverShaoPT 您好,看起来我们似乎在做同样的任务,想请问您目前地点重识别的准确率高吗(建立先验数据库用一个路线,重识别用另一个不同时间的相似路线),因为我在测试时出现了重识别准确率不高的问题,想跟您深入交流下,感谢

使用累积一段时间的点云地图来做匹配, 最好用身后的点云, 建图比较完全, 盲区较小.

@OliverShaoPT
Copy link

@OliverShaoPT 您好,看起来我们似乎在做同样的任务,想请问您目前地点重识别的准确率高吗(建立先验数据库用一个路线,重识别用另一个不同时间的相似路线),因为我在测试时出现了重识别准确率不高的问题,想跟您深入交流下,感谢

我做了些实验: 首先播放完整的bag数据建了一张全局地图,把std_desc和提取的平面点云保存成离线数据库。

  1. 再次播放完整的bag数据,可以从离线的数据库中找到回环位置,从而实现重定位;
  2. 从bag数据某个中间位置开始播放建图,完全无法在离线数据库中找到回环位置,但可以找到在线的回环。原因应该如你之前所说,在线和离线地图两个坐标系不一致,角点一致性无法保证;
  3. 从bag数据中间位置播放建图,但和全局地图做了粗略地配准,voxel_size设置为2。目的在线、离线地图的坐标系不要相差太大,voxel格子大一些减小坐标系不一致的影响。但也没法在离线数据库中找到回环。

看起来voxel划分的不同对算法的影响比较大,目前我想实现无需人工指定初值的全局重定位,但我看到的大多数lidar重定位算法都需要人工给定初始位姿,有啥推荐的方法吗

可以使用耗时较高的算法来做全局搜索, 如NDT. 初始化完成后再用STD来提升运行过程中的匹配速度.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants