系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
随着自动驾驶技术的不断发展,SLAM技术得到了更高程度的重视,研究人员力求构建一种稳定可靠的移动机器人定位算法。
多线激光雷达(3D LiDAR)作为一种重要的深度感知设备,在SLAM技术中得到了广泛的应用,合理使用则可极大地提升定位算法的精确性和鲁棒性。但是由于3D LiDAR 点云数据的非结构性和稀疏性,如何合理利用定位-建图过程中的一系列点云成为了室外自主感知系统的关键问题。
本文将简要介绍NDT算法在点云定位问题中的作用,及相比于其他方法的优势。
一、正态分布变换(NDT)是什么?
NDT的基本思想:
- 将参考点云(target scan)构建为多维变量的正态分布;
- 调整变换参数,计算当前点云(source scan)变换后,计算各变换点在参考数据构成的概率分布场中的似然概率之和;
- 通过非线性优化算法(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=n1∑j(pj−μi)(pj−μi)T,s.t.:pj∈regioni
二、PCL中NDT的使用步骤
1.引入库
2.读入数据
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。