首先,明确在系统初始化阶段可以利用的已知量,以及待求解的未知量。
已知:1.各帧相对于第1帧的位姿 q c 1 c i , p c 1 c i q_{c_1c_i},p_{c_1c_i} qc1ci,pc1ci;(根据SfM求得)
2.各相邻帧之间的位姿变化 q b k b k + 1 , p b k b k + 1 q_{b_kb_{k+1}},p_{b_kb_{k+1}} qbkbk+1,pbkbk+1;(根据IMU的预积分求得)
待求解:1.相机和IMU之间的外参 q b c , p b c q_{bc},p_{bc} qbc,pbc;
2.传感器的偏置 b b b;
3.初始速度 v v v,尺度 s s s,重力矢量 g c 1 g^{c_1} gc1;
4.计算初始时刻IMU系相对于世界坐标系的位姿 q w b 1 q_{wb_1} qwb1,。
1.相机和IMU之间的外参
几何约束:
对于任意相邻两个时刻, t k + 1 t_{k+1} tk+1时刻的相机坐标系在 t k t_k tk时刻的IMU系下的表示,都有两种表示路径(如图蓝线和绿线)即:
q b k c k + 1 = q b k c k ⊗ q c k c k + 1 = q b k b k + 1 ⊗ q b k + 1 c k + 1 q_{b_kc_{k+1}}=q_{b_kc_{k}}\otimes q_{c_{k}c_{k+1}}=q_{b_kb_{k+1}}\otimes q_{b_{k+1}c_{k+1}} qbkck+1=qbkck⊗qckck+1=qbkbk+1⊗qbk+1ck+1
【注意】相机和IMU之间的外参 q b c q_{bc} qbc 可以认为是不变化的!有:
q b c ⊗ q c k c k + 1 = q b k b k + 1 ⊗ q b c [ q c k c k + 1 ] R q b c = [ q b k b k + 1 ] L q b c ( [ q c k c k + 1 ] R − [ q b k b k + 1 ] L ) q b c = 0 Q k + 1 k q b c = 0 \begin{aligned} q_{bc}\otimes q_{c_{k}c_{k+1}} &= q_{b_kb_{k+1}}\otimes q_{bc} \\ [ q_{c_{k}c_{k+1}}]_R q_{bc} &= [q_{b_kb_{k+1}}]_L q_{bc} \\ ([ q_{c_{k}c_{k+1}}]_R - [q_{b_kb_{k+1}}]_L) q_{bc} &= 0 \\ Q^k_{k+1} q_{bc} &= 0 \\ \end{aligned} qbc⊗qckck+1[qckck+1]Rqbc([qckck+1]R−[qbkbk+1]L)qbcQk+1kqbc=qbkbk+1⊗qbc=[qbkbk+1]Lqbc=0=0
q c k c k + 1 , q b k b k + 1 q_{c_{k}c_{k+1}}, q_{b_kb_{k+1}} qckck+1,qbkbk+1是已知量,则 Q k + 1 k Q^k_{k+1} Qk+1k可计算得到。
将多个时刻的线性方程累积起来,得到:
[ Q 1 0 Q 2 1 ⋮ Q N N − 1 ] q b c = Q N ⋅ q b c = 0 \begin{bmatrix} Q^0_1 \\ Q^1_2\\ \vdots \\Q^{N-1}_{N} \end{bmatrix} q_{bc} =Q_N\cdot q_{bc}= 0 ⎣⎢⎢⎢⎡Q10Q21⋮QNN−1⎦⎥⎥⎥⎤qbc=QN⋅qbc=0
如果加上鲁棒权重则有:
[ w 1 0 ⋅ Q 1 0 w 2 1 ⋅ Q 2 1 ⋮ w N N − 1 ⋅ Q N N − 1 ] q b c = Q N ⋅ q b c = 0 \begin{bmatrix} w^0_1\cdot Q^0_1 \\ w^1_2\cdot Q^1_2\\ \vdots \\ w^{N-1}_N\cdot Q^{N-1}_{N} \end{bmatrix} q_{bc} =Q_N\cdot q_{bc}= 0 ⎣⎢⎢⎢⎡w10⋅Q10w21⋅Q21</