本质矩阵的分解

这一节记录如何从本质矩阵$E=t^{\wedge}R$中恢复旋转$R$与平移$t$的,本质矩阵通常通过5点法或者8点法获取,如何求解不在本节的范畴。根据对极几何的约束,大家知道$p_{2}^{T}t^{\wedge}R_{1}^{2}p_{1}=p_{2}Ep_{1}=0$,本节推导如何从这个$E$中恢复出正确的$R$、$t$。

阅读全文 »

反对称矩阵的性质

因为这一部分的知识比较少,本来打算将这块的内容插入到其他博客文章中。后来想想反对称矩阵在SLAM中特别常用,还是单独写一篇博客,详细地推导一些反对称矩阵的性质。

阅读全文 »

VINS中的视觉残差

1、视觉残差定义

VINS中的重投影是在归一化相机平面中完成的,重投影误差是估计值与测量值的差,有如下的形式:
$$
r_c=
\left[
\begin{array}{c}
\frac{X_c}{Z_c}-u \\
\frac{Y_c}{Z_c}-v \\
\end{array}
\right]
\tag{1}
$$

阅读全文 »

1、张式相机标定法

相机标定是我们实际运行一个SLAM系统必不可少的一步,虽然我们可以通过Matlab的CameraCalibration工具包或者OpenCV等工具轻松获取参数,甚至无须知晓原理、细节。但是学习相机标定的算法可以帮助我们更好的理解SLAM问题,借助《计算机视觉测量与导航》的大作业,将张正友相机标定法的推导记录如下(以下PDF可供下载,chrom浏览器可能不会显示pdf插件的一些功能,换为火狐正常显示):

阅读全文 »

IMU预积分(四)——VINS-mono中的预积分

有了前三篇预积分文章的基础,理解VINS-mono中的预积分就水到渠成了。VINS-mono与2015年流行上的预积分的区别是:VINS-mono采用的参数化方式不同,离散化手段不同。除此之外,要实现的目的是一致的。

阅读全文 »

IMU预积分(三)——李代数上的预积分

在之前的两篇IMU预积分的文章中,我们推导了2012年首篇提出IMU预积分的文章中的公式。C Forster等在2015年将其进一步扩展到了李代数上,形成了一套优雅的理论体系。北航的邱笑晨博士对这套理论进行了详尽的推导,所谓前人种树后人乘凉,我这里白嫖一下邱博的成果,只在原资料的基础上加了一些微不足道的注释。

阅读全文 »

IMU预积分(二)——线性视觉惯导初始化

这篇文章紧跟IMU预积分(一),主要记录2012年那篇经典的预积分论文中的初始化部分。

阅读全文 »

IMU预积分技术(一)

IMU预积分技术最早由Todd Lupton和Salah Sukkarieh在2012年提出,C Forster等在2015年将其扩展到李代数上。IMU预积分的初衷,是将帧与帧之间的IMU相对测量信息转换为约束载体姿态的边加入到优化框架中来。为了对VIO有更清晰的认识,特将IMU预积分的经典文献做了整理。这篇文章的内容主要来自Visual-Inertial-Aided Navigation for High-Dynamic Motion in Built Environments Without Initial Conditions。

阅读全文 »

九(续)、std::async深入理解

本节接第九章《获取线程函数返回值》,主要记录了std::async函数模板与std::thread函数模板的差异。

1 、std::async的第一个参数

阅读全文 »

十、原子操作

本节主要记录原子操作std::atomic类模板的使用。

1、原子操作概念引出

有两个线程,对一个全局变量进行操作,一个线程读变量值,另一个线程向这个变量中写值。

阅读全文 »