介绍

亮点:

  • 高效的数据编码方式。这种编码对点云的密度和法线具有不变性。
  • 保存点云的内部结构。
  • 有效的两相匹配算法。
  • 与其他最先进的空间描述符进行了彻底的验证。

图1

图2

Scan Context

把3D点云分为在传感器坐标中的方位角和径向分档,如图1。\(N_s\)代表扇形数,\(N_r\)带表环数。激光雷达的最大测量距离为\(L_{max}\),则每个环的间隙为\(\frac{L_{max}}{N_r}\),每个扇形的弧度为\(\frac{2\pi}{N_s}\)。论文中\(N_s=60\)\(N_r=20\)

对于所有的分区后的点云可以表示为:

\[ \mathcal{P} = \bigcup_{i\in[N_r],\space j\in[N_s]}P_{ij} \]

然后把每个区块用一个值表示

\[ \phi=\mathcal{P}_{ij}\rightarrow\mathbb{R} \]

取每个块中的z最大值。若是没有点则为0

\[ \phi(\mathcal{P_{ij}})=\max_{\mathbf{p}\in\mathcal{P}_{ij}}{z}(\mathbf{p}) \]

最终一次scan context表示为:

\[ I=(a_{ij})\in \mathbb{R}^{N_r\times N_s},a_{ij}=\phi(\mathcal{P_{ij}}) \]

Scan Contexts之间的相似分数

给定一个scan context对,我们就需要对两个地方的相似性进行距离测量。\(I^q\)\(I^c\)是分别从查询点云和候选点云获得的scan context。它们以纵列方式进行比较。

距离是同一索引的列之间的距离之和。余弦距离用于计算同一索引的两个列向量\(c^q_j\)\(c^c_j\)之间的距离。

按照扇区数使用\(N_s\)归一化,距离函数为:

\[ d(I^q, I^c)=\frac{1}{N_s}\sum^{N_s}_{j=1}\left(1-\frac{c^q_j\cdot c^c_j}{\left \| c^q_j \right \| \left \| c^c_j \right \| }\right) \]

即使在同一位置,会出现列漂移,算法改进为:

\[ \begin{align} D(I^q,I^c)&=\min_{n\in[N_s]}d(I^q,I^c_n), \\ n^*&=\text{argmin}_{n\in[N_s]}d(I^q,I^c_n) \end{align} \]

额外的漂移信息对于ICP匹配初值来说非常重要

两相搜索算法

利用ring key描述子代表每个环

从最近的环到最远的环,ring key向量为

\[ \mathbf{k}=(\psi(r_1),\dots,\psi(r_{N_r})), \space \text{where} \space \psi: r_i\rightarrow \mathbb{R} \]

使用的环形编码函数\(\psi\)是使用\(L_0\)范数(非零元素个数)的环形的占用率:

\[ \psi(r_i)=\frac{\|r_i\|_0}{N_s} \]

尽管比起scan context,ring key的信息量较小,但它能够快速搜索,找到可能的循环候选者。向量\(\mathbf{k}\)被用作构建KD树的关键。同时,查询的ring key被用来寻找类似的键和它们相应的扫描索引。将被检索的顶级相似键的数量由用户决定

这些恒定数量的候选的scan context通过使用距离与查询的scan context进行比较。满足接受阈值的、与查询最接近的候选被选为重访地点:

\[ c^*=\text{argmin}_{c_k\in C} D(I^q, I^{c_k}), \space \text{s.t} \space D < \tau \]

其中,C是一组从KD树中提取的候选的索引,\(\tau\)是一个给定的接受阈值。 \(c^*\)是被确定为循环的地方的索引