整个视觉前端pipeline回顾:
IMU的加速度要和世界系的重力进行对齐
世界系重力假设(0,0,-9.81),IMU第一帧估计出一个
c
g
=
c
R
c
b
g
b
^{c}g=^{c}R_{cb}g_b
cg=cRcbgb,就可以求出第一帧camera在world下的pose(带头大哥)
视觉的尺度和IMU尺度要进行对齐
VIO系统速度,传感器bias需要估计
IMU和相机的外参Tic
知道了z轴的法向量就能估计roll和pitch(tilt),但是yaw不可观。
以下所有思想基本都来源于VINS-MONO
式(3)第一行是旋转约束,第二行是平移约束。
更新式(3)的推导方式
IMU积分是米制单位,但是camera不是,camera存在一个缩放因子,标定出外参
[
R
b
c
,
t
b
c
]
[R_{bc},t_{bc}]
[Rbc,tbc]之后,可以求得尺度因子s,先对坐标系,R,t的数学表示做一下说明:
旋转脚标相连时相消,刚性连接在不同时刻的的观测相同,平移左上角是观测系,右下角从左到右;平移乘旋转后平移向量不变,但观测系改变。
式(4)第一行这样理解:
c
0
p
‾
c
0
b
k
=
c
0
p
‾
c
0
c
k
−
1
s
c
0
R
c
0
b
k
b
p
b
c
(
2.1
)
{^{c_0}\overline p_{c_0b_k}}={^{c_0}\overline p_{c_0c_k}}-\frac{1}{s}{^{c_0} R_{c_0b_k}} {^{b}p_{bc}} (2.1)
c0pc0bk=c0pc0ck−s1c0Rc0bkbpbc(2.1)
左上角都是观测系,即在什么系下看这个量,由于刚性连接在不同观测系,不同时间下相同,且平移乘旋转后旋转向量不变,但观测系改变,所以
b
p
b
c
=
b
k
p
b
k
c
k
(
2.2
)
{^{b}p_{bc}}={^{b_k}p_{b_kc_k}}(2.2)
bpbc=bkpbkck(2.2)
所以将(2.2)带入式(2.1)可得:
c
0
p
‾
c
0
b
k
=
c
0
p
‾
c
0
c
k
−
c
0
p
‾
b
k
c
k
=
c
0
p
‾
c
0
c
k
+
c
0
p
‾
c
k
b
k
(
2.3
)
{^{c_0}\overline p_{c_0b_k}}={^{c_0}\overline p_{c_0c_k}}-{^{c_0}\overline p_{b_kc_k}}={^{c_0}\overline p_{c_0c_k}}+{^{c_0}\overline p_{c_kb_k}}(2.3)
c0pc0bk=c0pc0ck−c0pbkck=c0pc0ck+c0pckbk(2.3)
即在
c
0
c_0
c0系下进行将
c
0
p
‾
c
0
c
k
+
c
0
p
‾
c
k
b
k
{^{c_0}\overline p_{c_0c_k}}+{^{c_0}\overline p_{c_kb_k}}
c0pc0ck+c0pckbk向量相加,物理意义:在
c
0
c_0
c0系下看
b
k
b_k
bk,等于
c
0
,
c
k
c_0,c_k
c0,ck的外参+camera和IMU外参转到
c
0
c_0
c0系下,去掉尺度。
标定出Camera和IMU外参之后,利用式(2.1)就可以求出尺度因子。
下面以VINS-MONO为例进行讨论:
Tbc外参的Rotation很重要,而Translation由于可能离得比较近,所以相对来说没有Rotation重要
旋转约束:两种路径求取的 q c k b k + 1 q_{c_kb_{k+1}} qckbk+1应该相同。
这里的未知量只有外参
q
b
c
q_{bc}
qbc,也可以简单地理解为一段时间内,camera出一段pose(trajectory),imu积分出一段pose(trajectory),这两段pose理想情况下只有外参的差异,(不考虑
t
b
c
t_{bc}
tbc的情况下)可以将这两段pose align起来,残差是两段pose align的残差,待估计量就是外参,做LSP的结果就是外参。
VINS论文中将多个时刻的数据累计起来,并使用了鲁棒核函数对每一项进行了加权,权值计算方法:有
t
r
(
R
)
=
1
+
2
c
o
s
θ
tr(R)=1+2cos\theta
tr(R)=1+2cosθ(可以看wiki),式(9)目的就是为了计算鲁棒核函数的权值,用角度误差和阈值来计算每个观测在整个问题中的权值,中的那一大块矩阵就是式(5)把左边移到右边而得,因为求的是相同的量(如
q
b
k
c
k
+
1
q_{b_kc_{k+1}}
qbkck+1),所以理想情况下连乘应该是Identity,但实际上,如果外参估的不准,这个角度会较大(>threshold),所以式(8)将大于threshold的部分的权值设的较小,进行了抑制。
最终对 q b c q_{bc} qbc的求解还是对式(7)使用SVD分解,取 V T V^T VT最后一列作为解。
(参考这篇博客参考这篇博客中使用Lanrange算子证明取 V T V^T VT最后一列是我们所求的解。)
论文中还对SVD分解的倒数第二小奇异值进行了判断,如果小于阈值则认为该次估计无效,重新采集数据进行估计。(这和增多数据或者降低数据噪声来提升数据信噪比是一样的目的,都是为了提高数值稳定性)
进行gyro bias估计的原因是如果不估计,那么gyro进行积分会有误差,导致预积分误差大,影响系统工作。
思路:将bias作为待估参数,构建残差转化为LSP求解。而LSP残差的构建一般是用对同一量物理量的预测和观测相减,带着这个思想看下面的讨论会更易理解。
误差构建图示,即通过能算出来的 q c 0 b k q_{c_0b_{k}} qc0bk和 q c 0 b k + 1 q_{c_0b_{k+1}} qc0bk+1算出 q b k b k + 1 q_{b_kb_{k+1}} qbkbk+1的预测,然后与测量作差即得residual:
式(10)就是将
b
k
b_k
bk到
b
k
+
1
b_{k+1}
bk+1时刻之间imu的rotation都转到
c
0
c_0
c0系下进行align:
这跟前面估计外参的是一样的,都是使用的旋转约束。
至此,已经能够估计出
预积分量的公式回顾3.1节
与world有关的量都是不可观的,所以我们就令与world有关的量都锚定在
c
0
c_0
c0帧,而IMU使得roll和pitch可观,所以
q
b
i
w
q_{b_iw}
qbiw是可观的,我们要进行估计。
式(15)带入推导
式(16)矩阵侧都是测量量,包括IMU积分和外参,右侧是待估计变量加一些高斯白噪声
式(17)(18)推导补充
假设z的噪声服从高斯分布,则其观测也服从高斯分布,(16)即为对z的预测,结合观测即可构建最小二乘问题LSP,使用L-M等方法进行求解(LSP问题就是如此构建的,有观测,想办法构建出这个观测的预测量,并从中抽离出待估计变量,就转化为LSP问题)。
小结一下:
讨论:上述优化过程中没有加入对于重力向量模长的约束,可能导致优化之后的重力向量模长不为9.81左右,所以需要加入。
课上提到李代数那边好像也有种重力向量参数化的方法,可能叫TSE(3)之类的。
上面的优化问题没有加入重力模长为9.81的这个约束,为了加入这个约束,引入一种对重力向量参数化的方式,分别构造出与重力向量垂直的两个基向量
b
1
,
b
2
b_1,b_2
b1,b2,通过最小化这两个基向量的参数
ω
1
,
ω
2
\omega_1,\omega_2
ω1,ω2来使得重力向量的估计
g
^
c
0
\hat g^{c_0}
g^c0更准确。
优化后的重力向量结果当做初始值,与 [ 1 , 0 , 0 ] [1,0,0] [1,0,0]或者 [ 0 , 0 , 1 ] [0,0,1] [0,0,1]叉乘得一个基向量 b 1 b_1 b1,再和 b 1 b_1 b1叉乘得 b 2 b_2 b2,用这两个基向量和优化结果来参数化重力向量,参数为 ω 1 , ω 2 \omega_1,\omega_2 ω1,ω2。
将约束加入到优化问题中,这个到时候看代码吧。
估计出在
c
0
c_0
c0系下的重力向量之后,结合重力向量的GT,使用式(23)可求出第1帧
c
0
c_0
c0到world系下的rotation,包括一个旋转轴和一个旋转角。
2. 没估计加计bias:加计bias非常小,可能是1e-4这种量级的,相对于重力9.81,就淹没了,可能估计不出来,且影响也不大,在qintong的论文中有说明。
3. 没估平移外参p_{bc},因为可能只有几厘米,很小,且相对于Rotation来说,Translation是一个线性的变换,不会使得系统变得非常复杂。
静止初始化,静止时初速度为0,加计测出来的直接就是重力,gyro的bias可以取一段时间的数据平均,作为bias。
这里给出的两篇参考文献里面有自己的初始化方法,
a. 是camera出的pose插值计算出来角速度和imu测量的应该相同,二者构建出来残差进行优化
b. 使用了紧耦合的方法,IMU和camera各出一段pose,然后align,进行init
看过论文之后,再来刷一遍视频吧。
整个VINS系统的cost function,分为3大部分,关系图模型也如下所示:
作业代码主要基于VINS-MONO开发,如果不关注系统的初始化的话,整个后端的求解还是较简单的,把之前3456的串起来就差不多了。开作业。
1Zhenfei Yang and Shaojie Shen. “Monocular visual–inertial state estimation with online initialization and camera–IMU extrinsic calibration”. In: IEEE Transactions on Automation Science and Engineering 14.1 (2016), pp. 39–51.
Tong Qin and Shaojie Shen. “Robust initialization of monocular visual-inertial estimation on aerial robots”. In: 2017 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE. 2017, pp. 4225–4232.
Janne Mustaniemi et al. “Inertial-based scale estimation for structure from motion on mobile devices”. In: 2017 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE. 2017, pp. 4394–4401.
Javier Domínguez-Conti et al. “Visual-Inertial SLAM Initialization: A General Linear Formulation and a Gravity-Observing Non-Linear Optimization”. In: 2018 IEEE International Symposium on Mixed and Augmented Reality (ISMAR). IEEE. 2018, pp. 37–45.