VINS分析(上)
28 November, 2017
Ling Bao
1 VINS源码分析
-
1.1 配置文件
-
包括:共有参数(ROS相关)、相机矫正参数、 IMU和相机之间的外部参数、特征跟踪参数、 优化参数、IMU参数、回环控制参数。
-
1.2 VINS系统分析
-
[1] 港科VINS-Mono系统学习(1)
[2] 港科VINS-Mono系统学习(2) 预处理
[3] 港科VINS-Mono系统学习(3) 初始化
[4] 港科VINS-Mono系统学习(4) 里程计
[5] 港科VINS-Mono系统学习(5) 闭环检测
[6] VINS(一)简介与代码结构
[7] VINS(二)Feature Detection and Tracking
[8] imu标定 imu_tk
[9] VINS(三)IMU预积分
[10] VINS(四)初始化与相机IMU外参标定
[11] VINS(五)非线性优化与在线标定调整
[12] VINS(六)边缘化
[13] VINS(七)estimator_node 数据对齐 imu预积分 vision
[14] VINS(八)初始化
[15] VINS-Mono代码分析与总结(一) IMU预积分
[16] IMU误差模型和校准
2 论文分析
-
2.1 总体综述
-
第一部分 传感器测量数据处理: 实现每帧视频的Harris角点(特征点), 并利用KLT光流法实现特征点跟踪。
第二部分 初始化: 包括两个核心(纯视觉SFM、视惯对齐); 初始化的参数包括(Pose, Velocity, Gravity Vector, Gyroscope Bias, 3D Feature Position)。
第三部分 后端Local BA: MU误差+重投影误差+先验误差的多目标非线性优化调整, 关键概念(滑动窗口、关键帧、 ceres 非线性优化),重定位。
第四部分 回环检测与位姿图优化: fast特征提取+BRIEF描述子、利用BoW的闭环检测,基础矩阵+RANSAC的位姿估计、4自由度Psoe-Graph优化。
-
2.2 符号定义
-
(∗)w – word frame, gravity vector is along with z axis;
(∗)b – body frame is aligned with IMU frame;
(∗)c – camera frame.
R – 旋转矩阵, 用于与向量相乘
q – 四元数, 用于状态描述qbw – Rotation from body frame to world frame
pbw – Translation from body frame to world frame
PbK+1bk – Covariance Matrix corresponding to pbw
bk – body frame while taking the kth image.
ck – camera frame while taking the kth image.
⨂ – Two quaternion multiplication operation.
gw=[0,0,g]′ – Gravity vector in the world frame.
ŵ t,â t – body frame IMU原始测量值,角速度和加速度.
ba,bw – body frame受加速度偏差、陀螺仪偏差及噪音的影响值.
na,nw – body frame受加速度偏差、陀螺仪偏差及噪音的影响值.
-
2.3 测量处理
-
功能概要:新帧特Harris征点检测与连续帧间特征点KLT光流跟踪;IMU连续帧间预积分,同时预积分受bias与noise影响,因此在考虑bias条件下实现预积分并进行优化(对于低成本IMU)。
视觉处理前端:(1)每个视频帧的特征点最小保持在100~300个,同时通过设置特征点之间的最小距离使得特征点分布成为均匀分布;将特征点归一化,并利用RANSAC进行Outlier点去除。(2)关键帧选择,两个准则(平均视差–利用IMU传递结果对旋转矩阵进行补偿、跟踪质量–跟踪的特征点数量)。
IMU预积分:改进:增加了bias纠正以及动态连续时间内的noise传递;除此之外,IMU预积分的结果将被用于初始化程序的校正初始化状态。
考虑时间点 k,k+1 ,对应的body frame是 bk,bk+1 ,时间间隔为 Δtk ,那么有:
pwk+1=pwk+vwbkΔtk+∬t∈[k,k+1](Rwt(â t−bat))dt2(1)
vwbk+1=vwbk+∫t∈[k,k+1](Rwt(â t−bat))dt(2)
qbwk+1=qbwk⨂∫t∈[k,k+1]12Ω(ŵ t−bwt)qbktdt(3)
Ω(w)=[−[w]×−wTw0](4)
[w]×=⎡⎣⎢⎢⎢−0−wz−wy−wz0wxwy−wx0⎤⎦⎥⎥⎥(5)
从公式 (1)~(5) 可以看出IMU状态传递需要用到 bk 的 旋转矩阵、位置以及速度信息。
在IMU传递过程中,reference frame变为局部body frame,采用与线性加速度 â 和角速度 ŵ 相关的部分:
Rbkwpbwk+1=Rbkw(pwbk+vwbkΔtk−12gwΔt2k)+αbkbk+1(6)
Rbkwvwbk+1=Rbkw(vwbk−gwΔtk)+βbkbk+1(7)
qbkw⨂qwbk+1=γbkbk+1(8)
其中,
αbkbk+1=∬t∈[k,k+1]Rbkt(â t−bat)dt2(9)
βbkbk+1=∫t∈[k,k+1]Rbkt(â t−bat)dt(10)
γbkbk+1=∫t∈[k,k+1]12Ω(ŵ t−bwt)γbkbtdt(11)
γbkbk 是开始时单位四元数;从 (9)~(11) 可以由 bk 作为基准帧的IMU测量获得; αbkbk+1 , βbkbk+1 , γbkbk+1 仅与 bk 和 bk+1 间的偏差有关,假设初始时刻 ba,bw 为0;当所估计的偏差值改变比较小时,调整 (9)~(11) (有关偏差的一阶近似),否则进行重传递 (6)~(8) ;该方法可以节省大量时间。
针对离散情况,各种数值积分方法可以使用,如 Euler, Mid-point, RK4积分等;本论文中使用 Euler积分进行说明,而程序实现中使用 Mid-point积分。
开始时 αbkbk+1 , βbkbk+1 为 0, γbkbk+1 为单位四元数,代表单位旋转矩阵;此时的 α,β,γ 为:
α̂ bki+1=α̂ bki+β̂ bkiδt+12R(γ̂ bki)(â i−bai)δt2(12)
β̂ bki+1=β̂ bki+R(γ̂ bki)(â i−bai)δt(13)
γ̂ bki+1=γ̂ bki⨂⎡⎣⎢⎢112(ŵ i−bwi)δt⎤⎦⎥⎥(14)
其中, i,i+1 对应与 [k,k+1] 的两个IMU测量; δt 是 i,i+1 对应的时间间隔。
协方差传递处理,假设加速度计、陀螺仪的测量噪音满足 Gaussian white noise,即: na~(0,σ2a) , nw~(0,σ2w) ;加速度、陀螺仪偏差满足随机游走分布,该分布的相邻项的差满足 Gaussian white noise,即: nba~(0,σ2ba) , nbw~(0,σ2bw) ;
b˙at=nba,b˙wt=nbw(15)
γbkt 受扰动误差项影响,定义如下:
γbkt≈γ̂ bkt⨂⎡⎣⎢⎢112δθbkt⎤⎦⎥⎥(16)
从 (9)~(15) 可以推导出误差项的连续时间线性动态,如下:
⎡⎣⎢⎢⎢⎢⎢⎢⎢δα˙bktδβ˙bktδθ˙bktδb˙atδb˙wt⎤⎦⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢00000I00000−Rbkt[â t−bat]×−[ŵ t−bwt]×000−Rbkt00000−I00⎤⎦⎥⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢⎢δαbktδβbktδθbktδbatδbwt⎤⎦⎥⎥⎥⎥⎥⎥+
⎡⎣⎢⎢⎢⎢⎢⎢0−Rbkt00000−I00000I00000−I⎤⎦⎥⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢nanwnbanbw⎤⎦⎥⎥⎥⎥=Ftδzbkt+Gtnt(17)
[∗]× 代表反对称操作; Pbbkk+1 可以利用一阶离散时间协方差更新进行计算,初始 Pbbkk=0 ,如下所示:
Pbbkb+\delatt=(I+Ftδt)Pbkt(I+Ftδt)T+(Gtδt)Q(Gtδt)T,t∈[k,k+1](18)
其中 δt 是连续两帧IMU测量的时间间隔, Q 是噪音对角协方差矩阵(σ2a,σ2w,σ2ba,σ2bw) 。
与此同时, zbkk+1 的一阶Jacobian矩阵 Jbk+1 也可以迭代计算,初始Jacobian矩阵是 Jbk=I ,如下所示:
Jt+δt=(I+Ftδt)Jt,t∈[k,k+1](19)
那么 αbkbk+1 , βbkbk+1 , γbkbk+1 的偏差一阶近似如下:
αbkbk+1≈α̂ bkbk+1+Jαbaδbbak+Jαbwδbwk(20)
βbkbk+1≈β̂ bkbk+1+Jβbaδbbak+Jβbwδbwk(21)
γbkbk+1≈γ̂ bkbk+1⨂⎡⎣⎢⎢112Jβbwδbwk⎤⎦⎥⎥(22)
Jαba 是 Jbk+1 中对应于 δαbkbk+1δbak 的子块; Jαbw,Jβba,Jβbw,Jβbw与此相同;γbkbk+1 仅受 bwk 影响,当偏差估计发生轻微改变时,使用 (22) 进行预积分矫正来近似代替重传递。