正态分布变换(NDT)在SLAM问题中的应用

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

随着自动驾驶技术的不断发展,SLAM技术得到了更高程度的重视,研究人员力求构建一种稳定可靠的移动机器人定位算法。
多线激光雷达(3D LiDAR)作为一种重要的深度感知设备,在SLAM技术中得到了广泛的应用,合理使用则可极大地提升定位算法的精确性和鲁棒性。但是由于3D LiDAR 点云数据的非结构性和稀疏性,如何合理利用定位-建图过程中的一系列点云成为了室外自主感知系统的关键问题。
本文将简要介绍NDT算法在点云定位问题中的作用,及相比于其他方法的优势。


一、正态分布变换(NDT)是什么?

NDT的基本思想:

  1. 将参考点云(target scan)构建为多维变量的正态分布;
  2. 调整变换参数,计算当前点云(source scan)变换后,计算各变换点在参考数据构成的概率分布场中的似然概率之和;
  3. 通过非线性优化算法(Gauss-Newton、Levenberg–Marquardt等)计算最大似然下的变换参数。

其本质是通过预先构建场函数,将点-点对匹配问题,转换为降低交叉熵问题。当交叉熵越低,两幅激光点云数据在空间中的分布越接近,说明两者匹配得最好。

举个🌰 :
假设我们的参考点云(二维)是这样的: C l o u d r e f = [ p r 0 , p r 1 , . . . , p r n ] Cloud_{ref} = \left[p_{r0}, p_{r1}, ..., p_{rn}\right] Cloudref=[pr0,pr1,...,prn],当前点云是这样的: C l o u d s r c = [ p s 0 , p s 1 , . . . , p s m ] Cloud_{src} = \left[p_{s0}, p_{s1}, ..., p_{sm}\right] Cloudsrc=[ps0,ps1,...,psm]
在生成参考点云的多维正态分布之前,首先要做分区的工作,具体的:对于二维点云一般是切成一片网格,对于三维点云则一般切成一群体素(小方块)。然后各个参考点在自己的选区内部计算自己选区的正态分布:

均值:$\vec{\mu_i} =\frac{1}{n}\sum_{j} \vec{p_j}, s.t.:p_j \in region_i $

方差: Σ i = 1 n ∑ j ( p j ⃗ − μ i ⃗ ) ( p j ⃗ − μ i ⃗ ) T , s . t . : p j ∈ r e g i o n i \Sigma_i =\frac{1}{n} \sum_{j}( \vec{p_j} - \vec{\mu_i})( \vec{p_j} - \vec{\mu_i})^T, s.t.:p_j \in region_i Σi=n1j(pj μi )(pj μi )T,s.t.:pjregioni

二、PCL中NDT的使用步骤

1.引入库

2.读入数据


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值