首先是三维空间的刚体运动,关键在于物体的运动如何表述,其中包括欧拉角,旋转向量及其与旋转向量的转换,其中包括罗德里格斯公式等数学知识,但欧拉旋转往往面临万向节死锁问题(简单来说,就是转三次和转两次等价),所以可以使用四元数,而关于四元数的表示,我想可以用复数在数轴上的表现来说明,a+bi中用a表示x轴,b表示y轴,可以通过类比方法来说明四元数的情况。同样,也可以转化为旋转矩阵。
关于李群与李代数,事实上,李群中包括旋转矩阵与变换矩阵,因为它们是可以连续变化的。而李代数则是李群进行指数映射后对李群性质的一些体现。
而相机与模型的篇章中,我知道了相机内参与外参的定义,相机内部参数,如焦距等是内参。外参是相机的位姿,包括旋转与位移。以及像素坐标以及归一化坐标,而畸变可以根据不同情况套用公式清除。单目相机需要三角化测量估测深度,双目相机根据视差估算深度,而RGBD相机则可以得到深度图像。
关于非线性优化以及相关的图优化,可以看一些贝叶斯相关的理论,然后根据ceres以及g2o库对非线性优化进行设计以及实践。
而说到真正的视觉里程计,就有不同的情况了,首先是特征点的提取与匹配,这与OpenCV的API有关,往往会根据色差进行判断,然后使用暴力匹配或快速最近邻进行特征匹配。2D到2D可以根据多个匹配的特征点生成并分解相关矩阵得到相对位姿(对极几何),使用三角化测量估算深度。而2D与3D使用的则是pnp方法,P3P/EPnP以估算相机位姿,然后使用非线性优化进行优化。另外,3D与3D的ICP情况,可以通过SVD方法以及非线性优化。
补充一句,非线性优化中,ceres的option配置以及ceres的图优化都需要进行考虑。