文章目录
论文提出了一种如何去除激光slam生成点云地图中动态物体的后处理方法。
1问题定义与核心思想
定义经过slam生成的最终点云
M
(
m
a
p
)
\mathcal{M}(map)
M(map)定义如下:
M
=
⋃
t
∈
[
T
]
Q
W
T
t
∗
P
t
Q
(1)
\mathcal{M}=\bigcup_{t \in[T]}{ }_Q^W \mathbf{T}_t * \mathcal{P}_t^Q\tag{1}
M=t∈[T]⋃QWTt∗PtQ(1)
W
W
W:world frame ,
Q
Q
Q:query frame,
t
:
t:
t:query frame time,
T
t
\mathbf{T}_t
Tt:query frame 到 world frame的变换矩阵。
假设 P t M \mathcal{P}_t^M PtM为 M ( m a p ) \mathcal{M}(map) M(map) 在 P t Q \mathcal{P}_t^Q PtQ坐标系的点云(即对 M ( m a p ) \mathcal{M}(map) M(map)乘以 Q W T t _Q^W \mathbf{T}_t QWTt的逆矩阵)
定义最终的静态点云地图为:
M
^
=
M
−
⋃
t
∈
[
T
]
M
^
d
y
n
,
t
(2)
\hat{\mathcal{M}}=\mathcal{M}-\bigcup_{t \in[T]} \hat{\mathcal{M}}_{d y n, t}\tag{2}
M^=M−t∈[T]⋃M^dyn,t(2)
M
^
d
y
n
,
t
\hat{\mathcal{M}}_{d y n, t}
M^dyn,t指由
P
t
M
\mathcal{P}_t^M
PtM和
P
t
Q
\mathcal{P}_t^Q
PtQ之间的差异确定的估计动态点云。
论文的方法将注意力集中在城市环境中大多数动态物体上,例如陆地车辆和行人,它们不可避免地与地面接触。基于这个假设,我们可以构建四种可能的情况:
-
在 P t M \mathcal{P}_t^M PtM中地面上有物体,而 P t Q \mathcal{P}_t^Q PtQ中相同位置的地面上没有物体
-
P t M \mathcal{P}_t^M PtM中地面没有物体,而 P t Q \mathcal{P}_t^Q PtQ中相同位置的地面上有物体
-
物体同时存在 P t M \mathcal{P}_t^M PtM和 P t Q \mathcal{P}_t^Q PtQ中的地面上
-
物体同时不存在 P t M \mathcal{P}_t^M PtM和 P t Q \mathcal{P}_t^Q PtQ中的地面上
在这些情况中,表示动态对象的点将被分类为第一种情况和第二种情况。然而,我们的目标是细化地图云,因此忽略第二种情况(目的是将map中的动态点云去掉,如果map没有物体就不用考虑了)。为了清楚起见,我们定义两个术语:第一种情况是潜在的动态情况,第三种和第四种情况是绝对静态的情况。
2具体方法
2.1生成感兴趣区域( Volume of Interest)
由于map范围很大,因此有必要在map中划定一块查询帧附近的小区域,再和查询帧进行比较,因此定义感兴趣区域为:
V
t
=
{
p
k
∣
p
k
∈
P
t
,
ρ
k
<
L
max
,
h
min
<
z
k
<
h
max
}
\mathcal{V}_t=\left\{\mathbf{p}_k \mid \mathbf{p}_k \in \mathcal{P}_t, \rho_k<L_{\max }, h_{\min }<z_k<h_{\max }\right\}
Vt={pk∣pk∈Pt,ρk<Lmax,hmin<zk<hmax}
ρ
k
=
x
k
2
+
y
k
2
\rho_k=\sqrt{x_k^2+y_k^2}
ρk=xk2+yk2,
L
m
a
x
,
h
m
i
n
,
h
m
a
x
L_{max},h_{min},h_{max}
Lmax,hmin,hmax为阈值。
请注意, V t \mathcal{V}_t Vt是通过kdtree从 M ( m a p ) \mathcal{M}(map) M(map) 中提取的,提取之后再变换到查询帧的坐标系,这样可以避免所有点云进行运算,节约时间。
2.2区域伪占用描述符(RPOD: Region-wise Pseudo Occupancy Descriptor)
RPOD 将
V
t
\mathcal{V}_t
Vt划分为方位和径向方向(即扇形和环)的规则间隔(bin)(即沿着径向和垂直于径向方向将Vt划分为二维栅格(bin),如果读过地面分割相关论文这个概念不难理解。)。令 Nr 和 Nθ 为环数和扇区数。则R-POD记为St,可表示为:
S
t
=
⋃
i
∈
[
N
r
]
,
j
∈
[
N
θ
]
S
(
i
,
j
)
,
t
(1)
\mathcal{S}_t=\bigcup_{i \in\left[N_r\right], j \in\left[N_\theta\right]} \mathcal{S}_{(i, j), t}\tag{1}
St=i∈[Nr],j∈[Nθ]⋃S(i,j),t(1)
S
(
i
,
j
)
,
t
\mathcal{S}_{(i, j), t}
S(i,j),t表示t时刻,第i-j个bin内的所有点云
S
(
i
,
j
)
,
t
\mathcal{S}_{(i, j), t}
S(i,j),t满足以下条件:
S
(
i
,
j
)
,
t
=
{
p
k
∣
p
k
∈
V
t
,
(
i
−
1
)
⋅
L
max
N
r
≤
ρ
k
<
i
⋅
L
max
N
r
(
j
−
1
)
⋅
2
π
N
θ
−
π
≤
θ
k
<
j
⋅
2
π
N
θ
−
π
}
(5)
\begin{array}{r}\mathcal{S}_{(i, j), t}=\left\{\mathbf{p}_k \mid \mathbf{p}_k \in \mathcal{V}_t, \frac{(i-1) \cdot L_{\max }}{N_r} \leq \rho_k<\frac{i \cdot L_{\max }}{N_r}\right. \\\left.\frac{(j-1) \cdot 2 \pi}{N_\theta}-\pi \leq \theta_k<\frac{j \cdot 2 \pi}{N_\theta}-\pi\right\}\end{array}\tag{5}
S(i,j),t={pk∣pk∈Vt,Nr(i−1)⋅Lmax≤ρk<Nri⋅LmaxNθ(j−1)⋅2π−π≤θk<Nθj⋅2π−π}(5)
Thereafter, the unit space, i.e. each bin, assigns a single real value to describe pseudo occupancy,
Δ
h
(
i
,
j
)
,
t
\Delta h_{(i, j), t}
Δh(i,j),t. Let
Z
(
i
,
j
)
,
t
=
Z_{(i, j), t}=
Z(i,j),t=
{
z
k
∈
p
k
∣
p
k
∈
S
(
i
,
j
)
,
t
}
\left\{z_k \in \mathbf{p}_k \mid \mathbf{p}_k \in \mathcal{S}_{(i, j), t}\right\}
{zk∈pk∣pk∈S(i,j),t}. Then, the pseudo occupancy of each bin is encoded as follows:
Δ
h
(
i
,
j
)
,
t
=
sup
{
Z
(
i
,
j
)
,
t
}
−
inf
{
Z
(
i
,
j
)
,
t
}
(6)
\Delta h_{(i, j), t}=\sup \left\{Z_{(i, j), t}\right\}-\inf \left\{Z_{(i, j), t}\right\}\tag{6}
Δh(i,j),t=sup{Z(i,j),t}−inf{Z(i,j),t}(6)
其中sup和inf表示上边界和下边界。
2.3扫描占比测试(Scan Ratio Test)
对比 P t M \mathcal{P}_t^M PtM和 P t Q \mathcal{P}_t^Q PtQ同一个bin(栅格)的 Δ h ( i , j ) , t M \Delta h_{(i, j), t}^M Δh(i,j),tM和 Δ h ( i , j ) , t Q \Delta h_{(i, j), t}^Q Δh(i,j),tQ的比值判断该bin内的点云是否存在动态物体,文中比例设置为0.2.
2.4区域地面平面拟合(Region-wise Ground Plane Fitting)
对2.3判断为存在动态物体的bin的点云,进行地面点和非地面点分割,非地面点即为动态物体点云。
由于每个bin相对于整个地图来说都很小,因此可以安全地假设bin内的地面是平坦的。
对于包含动态物体的bin
S
l
,
t
M
\mathcal{S}_{l, t}^M
Sl,tM而言,地面点位于最下方,因此初始地面点
0
I
l
,
t
{ }^0 \mathcal{I}_{l, t}
0Il,t估计为:
0
I
l
,
t
=
{
p
k
∣
p
k
∈
S
l
,
t
M
,
z
(
p
k
)
<
z
ˉ
+
τ
seed
}
{ }^0 \mathcal{I}_{l, t}=\left\{\mathbf{p}_k \mid \mathbf{p}_k \in \mathcal{S}_{l, t}^M, z\left(\mathbf{p}_k\right)<\bar{z}+\tau_{\text {seed }}\right\}
0Il,t={pk∣pk∈Sl,tM,z(pk)<zˉ+τseed }
z
ˉ
\bar{z}
zˉ为从
S
l
,
t
M
\mathcal{S}_{l, t}^M
Sl,tM选择几个最低点的z值的平均值,
τ
seed
\tau_{\text {seed }}
τseed 为高度阈值。
由于方法是迭代的,因此 假设第
i
i
i次迭代bin中的地面点( inliers) 为
i
I
l
,
t
{ }^i \mathcal{I}_{l, t}
iIl,t, 然后计算
i
I
l
,
t
{ }^i \mathcal{I}_{l, t}
iIl,t 的协方差阵
i
C
l
,
t
{ }^i C_{l, t}
iCl,t:
i
C
l
,
t
=
∑
j
=
1
:
∣
i
I
l
,
t
∣
(
p
j
−
i
p
‾
l
,
t
)
(
p
j
−
i
p
‾
l
,
t
)
T
{ }^i C_{l, t}=\sum_{j=1:\left|{ }^i \mathcal{I}_{l, t}\right|}\left(\mathbf{p}_j-{ }^i \overline{\mathbf{p}}_{l, t}\right)\left(\mathbf{p}_j-{ }^i \overline{\mathbf{p}}_{l, t}\right)^T
iCl,t=j=1:∣iIl,t∣∑(pj−ipl,t)(pj−ipl,t)T
where
∣
⋅
∣
|\cdot|
∣⋅∣ and
i
p
‾
l
,
t
{ }^i \overline{\mathbf{p}}_{l, t}
ipl,t denote the size of a set and mean position of
i
I
l
,
t
{ }^i \mathcal{I}_{l, t}
iIl,t, respectively.
然后利用PCA分解得到协方差阵的特征值与特征向量, i.e.
i
C
l
,
t
v
⃗
m
=
λ
m
v
⃗
m
{ }^i C_{l, t} \vec{v}_m=\lambda_m \vec{v}_m
iCl,tvm=λmvm where
m
=
1
,
2
,
3
m=1,2,3
m=1,2,3. 最小特征值对应的特征值向量则为地面点法线. 让特征向量为
i
n
l
,
t
=
[
i
a
l
,
t
i
b
l
,
t
i
c
l
,
t
]
T
{ }^i \mathbf{n}_{l, t}=\left[{ }^i a_{l, t}{ }^i b_{l, t}{ }^i c_{l, t}\right]^T
inl,t=[ial,tibl,ticl,t]T. 然后地面点的平面方程为:
i
d
l
,
t
=
−
i
n
l
,
t
T
i
p
‾
l
,
t
{ }^i d_{l, t}=-{ }^i \mathbf{n}_{l, t}^T{ }^i \overline{\mathbf{p}}_{l, t}
idl,t=−inl,tTipl,t, 展开后:
i
a
l
,
t
x
+
i
b
l
,
t
y
+
i
c
l
,
t
z
+
i
d
l
,
t
=
0
{ }^i a_{l, t} x+{ }^i b_{l, t} y+{ }^i c_{l, t} z+{ }^i d_{l, t}=0
ial,tx+ibl,ty+icl,tz+idl,t=0. 我们的目标是提取地面点,即位于该平面下方一定距离的点认为是地面点:
i
+
1
I
l
,
t
=
{
p
k
∣
p
k
∈
S
l
,
t
M
,
i
d
l
,
t
−
i
d
^
k
<
τ
g
}
{ }^{i+1} \mathcal{I}_{l, t}=\left\{\mathbf{p}_k \mid \mathbf{p}_k \in \mathcal{S}_{l, t}^M,{ }^i d_{l, t}-{ }^i \hat{d}_k<\tau_g\right\}
i+1Il,t={pk∣pk∈Sl,tM,idl,t−id^k<τg}
where
i
d
^
k
=
−
i
n
l
,
t
T
p
k
{ }^i \hat{d}_k=-{ }^i \mathbf{n}_{l, t}^T \mathbf{p}_k
id^k=−inl,tTpk and
τ
g
\tau_g
τg denotes the distance margin of the plane.
设置迭代3次就够了,得到每个bin最终的地面点
3
I
l
,
t
{ }^3 \mathcal{I}_{l, t}
3Il,t 。 因此非地面点即为动态点云:
M
^
d
y
n
,
t
=
⋃
l
∈
[
L
]
(
S
l
,
t
M
−
3
I
l
,
t
)
.
\hat{\mathcal{M}}_{d y n, t}=\bigcup_{l \in[L]}\left(\mathcal{S}_{l, t}^M-{ }^3 \mathcal{I}_{l, t}\right) .
M^dyn,t=l∈[L]⋃(Sl,tM−3Il,t).
对每一frame的每个bin进行同样的处理就得到了最终的动态物体点云和静态地图点云。
《ERASOR: Egocentric Ratio of Pseudo Occupancy-based Dynamic Object Removal for Static 3D Point Cloud Map Building》
[1](动态环境SLAM专题(一) | ICRA2021:ERASOR — 解决动态环境下SLAM建图"鬼影"问题 - 知乎 (zhihu.com))