icp和ndt点云配准效率对比

直接调用pcl库的icp和ndt算法,对比帧间匹配的效果: (数据帧采用kitti数据集,64线束velo,随便截取了一帧保存为pcd文件,需要pcd文件的,自取git@github.com:qqngwzlb/pcl_registration.git)

粗配准: 在两幅点云之间的变换完全未知的情况下进行配准,主要是为精配准提供较好的变换初值;

精配准: 给定一个初始变换,进一步优化得到更精确的变换。

实验1:目标点云和源点云完全相同

fd55ec9645cd4a31940c6d0dc75fbf45.png

点云效果: 左边ndt,右边icp

5aa998e0fc39483a8a73487e95ea892f.png

同帧匹配,icp精度高,而且快

 

实验2:源点云是在目标点云的基础上单方向移动0.5m

57ce213810184a4485243cbecc905796.png

点云效果:

f3d8531ea80147818b1aeba2ea8374c3.png

明显icp匹配的点云(右)已经配准不上了

icp:我就是快,准不准我不管!!!!

缩小icp的esp之后(0.05-->0.001),匹配效果好些:

7d37a8b0a0ab4e738f61e9d8468cfb17.png

实验3:源点云是在目标点云的基础上xy方向移动(0.5m ,0.5m)f34fb8962b87482184eec81309739813.png

实验4:源点云是在目标点云的基础上xy方向移动(0.5m ,0.3m),旋转

c746704eb5324665a899686111da8480.png

总结: (偶滴pc很拉胯的,所以时间对比相当明显),测试代码我放在github了。

icp速度很快,点云不是单方向变化(有旋转),匹配效果很拉胯,但它依旧很快,很快,很快(😁😁)。目前我觉得,单纯的icp适合拿来做做SLAM的回环匹配,因为他快啊!!!而且,回环集中在直线上效果也不会那么差。

icp匹配就是算对应点间的最小二乘误差,误差最小化输出最优的变换矩阵。icp算法鲁棒性不够,建议实际,还是使用icp变种算法: 如通常2D激光匹配用PL-ICP算法比较好,3D激光匹配推荐GICP算法等。

ndt较于icp会慢不少,目标点云如果庞大,运算效率更大大下降,稳定性方面是不错的。需要做点云稀疏化。

ndt匹配时,算法内部将目标点云化为很多个cell,计算每个方格的pdf,移动源点云落入每个cell,用之前的pdf计算概率,所有cell概率之和最大时,输出最优的变换矩阵。

参数调节:

1)icp的setMaxCorrespondenceDistance:点对之间的最大距离,只有对应点之间的距离小于该设置值的对应点才作为ICP计算的点对;越大计算的点对越多;icp收敛条件esp一定要设置苛刻一些,比1小于3个数量级;

2)ndt大数据量,匹配速度极其慢(比icp慢十几倍),对目标点云滤波轻一点,对源点云滤波重一点;若目标点云滤波太重,ndt算法无法进行匹配,但是目标点云滤波重一点,对速度提升显著;ndt的setResolution,网格设置大小很重要,体素设置完,设置setTransformationEpsilon,差异值设置越大,速度越快(精度down);

 

另外: 本次测试没有给初值,帧间匹配若是有良好的初值,匹配效果和效率应该是很好的!提供预测的目前一般是imu或者利用系统运动模型估计,后续应该涉及这方面。

 

 

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值