SLAM 前端 - 后端
前端:程序框架、数据结构、类
后端:优化
前端
程序框架:组织管理代码
Linux:
-
代码结构:
1、bin:二进制文件
2、include:头文件
3、lib:编译好的库文件
4、src:源代码文件
5、config:配置文件
6、test:测试用文件
-
基本数据结构:
1、帧:视觉SLAM中是关键帧,包含图像,特征点、位姿、内参等信息
2、路标:图像中的特征点
3、配置文件:如相机内参、特征点数量、匹配时选择的比例等
——文件读取:OpenCV提供的FileStorage类,它可以读取YAML文件,且可以访问其中任意一个字段
4、坐标变换:定义一个类把坐标变换相关操作都放在一起
(注意事项:上述几个概念都以类表示,尽量保证一个类有单独的头文件和源文件,避免把多个类放在同一文件中。)
-
讨论:
在普通VO(视觉里程计)的框架中,特征提取和匹配算法的速度对整体速度影响最大。
局部地图&全局地图
局部地图:描述附近的特征点信息,只保留离相机较近的特征点,其他的丢掉。这些特征点用于和当前帧匹配来求位置,追求速度
全局地图:记录所有特征点,表达整个环境,主要用于回环检测和地图表达
——维护局部地图规模很重要
VO是局部的短时间内的运动,和完整的SLAM有一些区别
后端
-
扩展卡尔曼滤波EKF
假设马尔可夫性,简单的一阶马氏:k时刻状态只与k-1时刻有关,而与之前的无关。EKF和KF区别在于对运动方程和观测方程进行线性化
-
主流:非线性优化
依然考虑k时刻状态与之前所有的状态有关,使用BA的思想通过图优化的方法进行优化,常用的框架有g2o,ceres