关于Vins-Mono学习的过程中问题记录与参数理解

196 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


1.关于参数 max_solver_time 最大求解时间 在VINS中默认为0.04,迭代次数最多为8次,在实际使用中该参数需要根据性能调试,确保迭代次数足够,否则很难有一个很好的优化结果!

2.在IMU参数中,噪声和随机游走会直接影响到IMU的协方差矩阵,关于IMU的噪声,在标定的情况下是静止的,但是在运动时使用,因此一般将此扩大10~15倍去使用。

3.关于IMU和Cam的时间戳同步,理想的情况下是实现时间戳的硬同步。

4.在IMU、图像、后端三个线程中,后端需要处理IMU和图像,找到合适的图像和图像之间的IMU数据。因此该三个线程共用一个 m_buf 线程互斥锁。在后端process()中通过调用wait()自动调用m_buf.lock()来加锁,然后去寻找数据。如果未得到则线程被阻塞,自动调用m_buf.unlock()释放锁,使得IMU和图像的线程可以继续向BUF中添加数据,每当添加数据后都会调用con.notify_one唤醒process()线程。

5.在readImage对图像处理中,关于直方图均衡化,可增强图像的对比度。

cv::Ptr<cv::CLAHE> clahe = cv::createCLAHE(3.0, cv::Size(8, 8));

在VINS中默认为3.0,如果将其增大,对比度会增加,同时噪声点也会增加。 在这里插入图片描述 6.在VINS中的光流跟踪也是直接调用opencv中的函数,其中两个关键参数,一个为maxLevel为金字塔层数,还有一个则为flags,设置下一帧特征点的初始位置,如果为空则表示与上一帧相同。

cv::calcOpticalFlowPyrLK(cur_img, forw_img, cur_pts, forw_pts, status, err, cv::Size(21, 21), 3);

在VINS-MONO中设置为空。

7.协方差矩阵即不确定性,随着IMU帧数的增加,噪声的不确定性也增加。在IMU和视觉之间,通过对比协方差矩阵来判断更相信谁,其两者为一个相对的关系。


8.对于每一帧得到的图像,将当前帧看到的特征点image放到特征点管理器f_manager中,然后进行滑窗优化。image表示当前帧跟踪到上一帧的特征点集合。放入特征点管理器中,将当前帧与地图中的其他帧建立数据关联,若为已知点,则加到共视关系中,若为新点,则新建立一个特征点。

9.在SLAM后端中,首先确定所有的约束关系,然后针对每个约束确定三个要素:误差项、优化变量、协方差。然后计算Jacobian,调用GN、LM等求解BA。

10.在更新滑动窗口的过程中,要不去掉最老帧,要不去掉次新帧。在去掉最老帧的时候,该帧所看到的路标点需要更新该路标点的第一帧,IMU预积分信息舍弃掉。而在去掉次新帧时,次新帧上一帧到下一帧的两段预积分合并。