ERASOR:基于栅格占用差异的动态物体去除方法
文章目录
论文提出了一种如何去除激光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]??QW?Tt??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 QW?Tt?的逆矩阵)
定义最终的静态点云地图为:
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?<Nr?i?Lmax??Nθ?(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??ip?l,t?)(pj??ip?l,t?)T
where
∣
?
∣
|\cdot|
∣?∣ and
i
p
 ̄
l
,
t
{ }^i \overline{\mathbf{p}}_{l, t}
ip?l,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,t?vm?=λm?vm? 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,t?ibl,t?icl,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,tT?ip?l,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,t?x+ibl,t?y+icl,t?z+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,tT?pk? 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))
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!