A. Formulation
在一个滑动窗口中,进行非线性优化,优化框架使用ceres。
状态量:关键帧的姿态、ba/bg. 特征点的深度。相机的外参。
误差函数:包含三个部分,先验、投影误差、imu预积分误差。
特征点没有采用x/y/z,而是使用了第一帧的观测,加上一个深度就解决了。这样的确减少了优化参数。
B. IMU 模型
imu的误差中,本质就是一个imu的预积分公式。
C. 视觉模型
P
ˉ
l
c
j
\bar{\mathcal{P}}^{c_j}_l
Pˉlcj表示在cj下的原始归一化观测。
公式22-3,ci坐标系-》bi坐标系-》world坐标系-》bj坐标系-》cj坐标系。与前面的观测对应上了。
这个里面有一个基向量的选择,得看一下。如何理解这个tangent space。好像就是一个优化最小向量的问题。可以在二维坐标系下来实验一下。
D. Marginalization
实验一
Eigen::Matrix<double, 2, 3> tangent_base;
residual = tangent_base * (pts_camera_j.normalized() - pts_j.normalized());
Eigen::Vector3d pts_camera_j = qic.inverse() * (pts_imu_j - tic);
因为相机坐标系下的3D坐标实际上是这个球上点,自由度为2.
以2D为例的,那这个自由度则为1。在圆上找一个tangent space.
从意思上看,这个tangent space跟每一次的变量还是有关系的,比如在一个圆上,就是求它的切向量。
$\mathcal{x} = [x, y]^T,
x
ˉ
=
[
0
,
1
]
\bar{x} = [0, 1]
xˉ=[0,1]
当直接使用这个变量优化的时候,就是两个自由度。当乘以一个切向量,就变成一个自由度。