ρ
(
x
)
=
{
x
2
,
x
≤
b
很多不同的形式
,
x
>
b
\rho(x) = {x2,x≤b很多不同的形式,x>b
作用对象是:
x
=
e
k
Ω
k
e
k
x = \sqrt{e_k \Omega_ke_k }
x=ekΩkek
其中
e
k
e_k
ek是误差,
Ω
k
\Omega_k
Ωk是信息矩阵。
最终作用是限制误差较大的edge对最终优化结果的影响.实现方法是设置第
e
k
e_k
ek误差的权重
w
k
=
ρ
(
e
k
Ω
k
e
k
)
∣
∣
e
k
Ω
k
e
k
∣
∣
w_k =\frac{\sqrt{\rho(e_k \Omega_ke_k) }}{||e_k \Omega_ke_k||}
wk=∣∣ekΩkek∣∣ρ(ekΩkek)
g2o中的class名称:
class RobustKernelHuber : public RobustKernel
公式:
{
ρ
(
x
)
=
x
2
,
x
≤
b
ρ
(
x
)
=
2
b
∣
x
∣
−
b
2
,
x
>
b
{ρ(x)=x2,x≤bρ(x)=2b|x|−b2,x>b
使用:
g2o::RobustKernelHuber *rk = new g2o::RobustKernelHuber;//定义核函数
rk->setDelta(thHuberMono);//设置核函数Delta e也就是公式中的b
e->setRobustKernel(rk);//将核函数添加到g2o的edge