笔者在闲暇之余学习了SLAM相关的内容,深感机器人状态估计领域的博大精深。今天,笔者就抛砖引玉,谈谈SLAM领域中的VIO(视觉惯性里程计)。
初始SLAM
SLAM(Simultaneous Localization and Mapping),是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。SLAM可以解决自主运动的两大基本问题:
我在什么地方?——定位
周围环境是什么样子?——建图
定位与建图=内外兼修,定位侧重对自身的了解,建图侧重对外在的了解。
为什么用VIO?
单目视觉SLAM无法解决尺度问题,而将IMU估计的位姿序列与相机估计的位姿序列进行对齐可以恢复出相机轨迹的真实尺度;
视觉SLAM一般取第一帧作为世界坐标系,而IMU中的加速度计测量值包括重力向量,可以根据其将估计的位姿转换到垂直于地面的世界坐标系中;
IMU帧间积分得到的位姿可以预测出图像帧在下一时刻的位姿以及特征点在下一帧图像上的位置,并将其作为初值带入非线性优化中,减少优化迭代次数;
IMU测量可以提高视觉SLAM在某些复杂场景的鲁棒性,在于相机快速运动、动态障碍物、光线明暗变化明显、环境中纹理缺失等导致图像信息质量较差的情况下,利用IMU信息仍能得到有效的定位结果。
紧耦合的VIO
根据状态向量中是否加入图像特征信息来判断是否为松紧耦合,如图所示,在VIO中将图像特征以及IMU的位置、方向、速度作为状态,构建非线性优化问题进行求解,采用梯度下降的方法同时对图像特征以及位置、方向、速度进行优化,从而得到对机器人状态的最优估计。
VIO的框架
VIO过程可以用上图进行表示,其中,为路标点,,,为三个时刻相机的位置点,,,为三个时刻IMU的位置点。由于IMU存在着高斯白噪声以及导数服从高斯分布的偏置,相机也存在着光学畸变误差、机械误差等,因此无论是相机观测到的数据还是IMU测量的数据都不可靠。因为相机观测的数据以及IMU测量的数据具有一定的关联性,基于此构建优化问题,便可以得到对真实路标点的最优估计,同时也可以得到对IMU或者相机(机器人本体)的最优估计。
基于以上原理,VIO的优化问题可以表示为:
以上三项分别为边缘化的先验信息、IMU的测量残差、视觉的重投影误差。其中,视觉的重投影误差是指像素坐标(观测到的投影位置)与3D点按照当前估计的位姿进行第二次投影得到的位置相比较得到的误差。边缘化的先验信息是指边缘化后的剩余变量更新后的残差,具体的会在边缘化一节进行分析。
边缘化
要讲边缘化,首先大家要知道实际使用中SLAM的优化方法,它并不是对所有的观测进行优化,而是会构建一个窗口,只对窗口内观测到的状态值进行优化,这样可以大大的减少计算量以及优化的时间。但是由于在移动过程中,会不断的观测到新的状态,因此需要让构建的窗口滑动起来,从而能够包换最新观测到的状态,并且扔掉最早观测到的状态,这种优化方法叫做基于滑动窗口的优化方法。
但是,由于在连续的一些时刻中,相机可能会观测到用一个路标点,所以不能简单的扔掉之前观测到的状态值,需要其信息全部传递到之后的状态中。简单的说,这是一个求边际概率的问题,形如:
b可以指代为需要扔掉的最早观测到的状态。通过求解边际概率,最早观测到状态量信息便传递到了该滑动窗口剩余的状态量中。此后,我们通过讲最新观测到的状态量加入到滑动窗口中,便可以进行新一轮的非线性优化。
讲到了这里,我想大家已经能够理解边缘化的先验误差是什么了吧,没错,他就是通过上述求解边际概率方式更新后的误差,该误差加上最新观测到的状态量的误差,也就是IMU的测量误差以及相机的观测误差即可构建出上一节等式的优化问题。
写到最后
VIO不仅包含上述的非线性优化问题,还有其他的一些问题:
首先是VIO的初始化,初始化的目的是为了恢复单目相机的尺度信息,求解IMU的偏置,IMU与相机之间的转换关系,并将优化的坐标系转换到世界坐标系下(可根据重力加速度为g得到z轴)。
除了初始化,还有回环检测问题,基于优化的方法依旧会有误差,尤其是长时间运转后,因此可以通过检测观测到路标点是否之前已经观测到,构建回环,从而增强优化问题的约束,避免陷入局部极小值点,保证结果的最优性。
最后,就是建图模块了,根据优化后的状态量(机器人本体的位姿以及路标点的位置)可以构建出地图,从而用于机器人的导航。
-
SLAM
+关注
关注
23文章
419浏览量
31782 -
VIO
+关注
关注
0文章
11浏览量
10124 -
IMU
+关注
关注
6文章
298浏览量
45667
原文标题:VIO从入门到精通(放弃)
文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论