版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011178262/article/details/85016981
概述
SLAM,即 同时定位与建图,视觉SLAM的 定位 即 求取相机位姿(旋转和平移
[Rt]);在SLAM中,我们一般使用 李代数
ξ 来表示 旋转和平移。
- 记 相机内参矩阵
K,相机位姿
T=[Rt] (or
ξ)
- 记
I1 的图像坐标系下,一像素点
p(u,v);在
O1 相机坐标系下,其对应的 三维点
P(X,Y,Z)
- 记
I2 的图像坐标系下,一像素点
p′(u′,v′);在
O2 相机坐标系下,其对应的 三维点
P′(X′,Y′,Z′),归一化坐标为
p′norm
P′=R⋅P+t
p′~norm=(X′norm,Y′norm,1)=Z′P′=(Z′X′,Z′Y′,1)
p′~=K⋅p′~norm
在 优化位姿 时,其思想是构造一个关于位姿变化的误差函数,当这个误差函数最小时,认为此时估计的位姿最优。视觉SLAM主要分为 直接法 和 特征点法,但无论是直接法还是特征点法,位姿的迭代优化都是求解一个 最小二乘问题。
ξmin21∥r(ξ)∥2
- 直接法 最小化 光度误差,即 前后帧像素的灰度误差
r(ξ)=I2(p′)−I1(p)=I2(u′,v′)−I1(u,v)
- 特征点法 最小化 重投影误差,即地图点到当前图像投影点与匹配点的坐标误差
r(ξ)=p′−p=(u′,v′)−(u,v)
误差函数对于位姿的 雅可比矩阵(Jacobian Matrix),决定着下一步最优迭代估计时 位姿增量的方向。
J(ξ)=∂ξ∂r(ξ)
根据上面位姿变换的流程,我们可以用 链式法则 来表示
J
J(ξ)=∂ξ∂r(ξ)=∂p′∂r(ξ)⋅∂pnorm′∂p′⋅∂P′∂pnorm′⋅∂ξ∂P′=J0⋅J1⋅J2⋅J3
由此,直接法 与 特征点法 雅克比矩阵 只区别于
J0。
本文主要介绍 SLAM优化位姿时误差函数对位姿雅可比矩阵的推导。
雅克比矩阵 推导
Jacobian 0
J0=∂p′∂r(ξ)
直接法
我们已知, 在直接法中,单像素点的误差函数是关于像素值的函数,即 光度误差
r(ξ)=I2(u′,v′)−I1(u,v)
由于对于一个特定的像素点,
I1(p) 是关于
ξ 的常量,所以
J0=∂p′∂I2(p′)=[2I2(u′+1,v′)−I2(u′−1,v′),2I2(u′,v′+1)−I2(u′,v′−1)]
为 图像
I2 在
p′ 点处的 像素梯度
特征点法
我们已知, 在直接法中,单像素点的误差函数是关于像素坐标的函数
r(ξ)=p′−p
由于对于一个特定的像素点,
p 是关于
ξ 的常量,所以
J0=∂p′∂p′=1
Jacobian 1
J1=∂pnorm′∂p′=∂(Xnorm′,Ynorm′)∂(u,v)
由于
p′~=K⋅p′~norm
J1 的计算跟 相机投影模型 有关,本文以 针孔相机模型 (不考虑畸变)为例 对其进行计算。
针孔相机模型(不考虑畸变) 的 数学模型 为
K=⎣⎡fx000fy0cxcy1⎦⎤
所以
J1=[fx00fy]
Jacobian 2
J2=∂P′∂pnorm′=∂(X′,Y′,Z′)∂(Xnorm′,Ynorm′)
根据
p′~norm=Z′P′
计算得
J2=[Z′100Z′1−Z′2X′−Z′2Y′]=[1001−Z′X′−Z′Y′]⋅Z′1
Jacobian 3
J3=∂ξ∂P′=∂ξ∂(T⋅P)=∂ξ∂(exp(ξ∧)P)
其中
ξ=[ρϕ]∈R6
类似高数中,求取
f(x) 的导数
dxdf=Δx→0limΔxf(x+Δx)−f(x)
我们可以 根据李代数加法来对李代数进行求导,计算雅克比矩阵。
一般更使用的,利用李群来左乘或者右乘微小扰动,在对这个扰动的李代数进行求导,利用 扰动模型
δξ=[δρδϕ],计算如下
∂ξ∂P′~=∂ξ∂(T⋅P~)=∂δξ∂(exp(ξ∧)P~)(左扰动模型)=δξ→0limδξexp(δξ∧)exp(ξ∧)P~−exp(ξ∧)P~≈δξ→0limδξ(I+δξ∧)exp(ξ∧)P~−exp(ξ∧)P~=δξ→0limδξδξ∧exp(ξ∧)P~=δξ→0limδξ[δϕ∧0Tδρ0][R⋅P+t1]=δξ→0limδξ[δϕ∧(R⋅P+t)+δρ0]=[I0T−(R⋅P+t)∧0T]=[I0T−P′∧0T]
所以
J3=⎣⎡1000100010−Z′Y′Z′0−X′−Y′X′0⎦⎤
注意:
- 上面的
ξ 中 平移
ρ 在前, 旋转
ϕ 在后;如果 旋转在前,平移在后,则
J3 的前三列与后三列须对调。
- ch4 为什么能用左扰动模型来求导啊?[gaoxiang12/slambook Issues #183]
按照定义,左乘一个扰动,然后令扰动趋于零,求目标函数相对于扰动的变化率,作为导数来使用。同时,在优化过程中,用这种导数算出来的增量,以左乘形式更新在当前估计上,于是使估计值一直在SO(3)或SE(3)上。这种手段称为“流形上的优化”。
- 四元数矩阵与 so(3) 左右雅可比
总结
直接法
J(ξ)=J0⋅J1⋅J2⋅J3=∂p′∂I2(p′)⋅[fx00fy]⋅[1001−Z′X′−Z′Y′]⋅⎣⎡1000100010−Z′Y′Z′0−X′−Y′X′0⎦⎤⋅Z′1
特征点法
J(ξ)=J0⋅J1⋅J2⋅J3=[fx00fy]⋅[1001−Z′X′−Z′Y′]⋅⎣⎡1000100010−Z′Y′Z′0−X′−Y′X′0⎦⎤⋅Z′1
注意事项
-
J1 的计算是根据 针孔相机模型(不考虑畸变) 进行计算的
- 本文的
ξ 中 平移
ρ 在前, 旋转
ϕ 在后;如果 旋转在前,平移在后,则
J3 的前三列与后三列须对调
- 本文定义的 误差函数
r(ξ) 为 预测值减观测值;如果定义成 观测值减预测值,本文计算的结果
J 前须加 负号
参考文献