本帖最后由 INDEMIND 于 2019-1-7 17:12 编辑
一.VINS 系统
1. VINS简介
VINS是香港科技大学开源的一个单目视觉惯导SLAM方案,2017年发表于《IEEETransactions on Robotics》。该方案是基于优化和滑动窗口的VIO系统,使用IMU预积分构建紧耦合框架,并且具备自动初始化,在线外参标定,重定位,闭环检测,以及全局位姿图优化功能。
2. 系统架构
系统主要分为五个部分:
1) Measurement Preprocessing:
观测值数据预处理,包含图像数据跟踪IMU数据预积分
2) Initialization 初始化:
包含单纯的视觉初始化和视觉惯性联合初始化
3) Local Visual-Inertia BA and Relocalization:
局部BA联合优化和重定位,包含一个基于滑动窗口的BA优化模型
4) Global Pose Graph Optimization:
全局图优化,只对全局的位姿进行优化
5) Loop detection回环检测
具体系统框架如下:
3. 特性分析
VINS的精髓在于视觉与IMU的融合,规避了单一传感器的局限性,拓展了方案的场景适用性,并且视觉+IMU传感器优势互补,可以提供更好的定位惯导效果,其定位精度可以媲美OKVIS,并支持LINUX、ROS等平台。
VINS代码十分清晰,主要包含在两个文件中,分别是feature_tracker和vins_estimate,feature_tracker就像文件的名字一样,总体的作用是接收图像,使用KLT光流算法跟踪;vins_estimate包含相机和IMU数据的前端预处理(也就是预积分过程)、单目惯性联合初始化(在线的标定过程)、基于滑动窗口的BA联合优化、全局的图优化和回环检测等。
4. 依赖库
主要依赖的库只有OpenCV、Eigen、Ceres Solver、boost、Pangolin。
二.安装及调用
本次实例依然选用INDEMIND双目视觉惯性模组,该模组采用视觉+IMU的多传感器融合架构,可获取精准的图像及IMU数据,并依赖于微秒级时间同步机制与高精度的传感器标定方法,可为多种开源算法提供精准稳定的前端数据获取能力。
说明:本次Demo是基于INDEMIND双目视觉惯性模组采集的数据,离线运行而来。安装及调试教程基于Ubuntu 16,各位老兵可略过。
1. 下载VINS
说明:由于是离线运行在Ubuntu系统中,因此我们选用的是去除ROS平台支持的VINS系统,小伙伴们可按需下载。
2. 下载INDEMIND双目视觉惯性模组SDK
INDEMIND双目视觉惯性模组的SDK为开发者提供了丰富的开发工具与辅助,省去了开发者对相机的标定、数据同步等开发工作,加速开发进程。因此,我们直接根据自身操作系统直接下载INDEMIND双目视觉惯性模组的SDK即可,下载地址请浏览INDEMIND官方网站。
3. 使用SDK
创建SDK对象 - CIMRSDK* pSDK = new
- CIMRSDK();
复制代码设置使用的 SLAM - <blockquote>MRCONFIG config = { 0 };
复制代码//获取模组标定信息 - CameraCalibrationParameter
- param;
复制代码获取模组图像数据 - pSDK->RegistModuleCameraCallback(SdkCameraCallBack,NULL);
复制代码获取 SLAM 结果 - pSDK->RegistModulePoseCallback(sdkSLAMResult,NULL);
复制代码将param的参数写入文件中 - <blockquote>ofstream out("./datafile.txt");
复制代码如上,写入相机内外参
释放资源 - pSDK->Release();delete pSDK;
复制代码
编译
安装 cmake - sudo apt-get install cmake
复制代码安装 google-glog +gflags - sudo apt-get install libgoogle-glog-dev
复制代码安装 BLAS & LAPACK - sudo apt-get install libatlas-base-dev
复制代码安装 SuiteSparse andCXSparse - sudo apt-get install libsuitesparse-dev
复制代码 编译器 使用 Ubuntu 16.04 编译demo 程序需要使用 GCC5.4 版本,否则可能链接失败。 使用 Ubuntu 18.04 编译 demo 程序需要使用 GCC7.3 版本,否则可能链接失败。
编译 - <p class="MsoNormal" style="text-indent:21.0pt;mso-char-indent-count:2.0"><span lang="EN-US">cd build<o:p></o:p></span></p>
- <p class="MsoNormal" style="text-indent:21.0pt;mso-char-indent-count:2.0"><span lang="EN-US">cmake ..<o:p></o:p></span></p>
- <p class="MsoNormal" style="text-indent:21.0pt;mso-char-indent-count:2.0"><span lang="EN-US">make<o:p></o:p></span></p>
复制代码
执行
把刚才编译的可执行文件TestIndem 拷贝到刚才解压 SDK 的 lib 目录下的 1604 目录下,在 lib/1604 目录下使用 sudo ./TestIndem.sh 命令启动程序。
TestIndem和 TestIndem.sh 需要可执行权限。 使用命令chmod 777 TestIndem 和 chmod777 TestIndem.sh 进行修改。
为了提高系统稳定性,请运行时使用超级用户(root 权限)运行,或者使用 “sudo ./程序名” 运行,例如 DEMO 运行“sudo./TestIndem.sh”。
*注意:在 Ubuntu 18.04 上使用 GCC7.3 编译 demo 的时候,需要把 demo 里的 CMakeLists.txt 的1604 改成 1804 才能编译成功,编译成功后把 TestIndem 拷贝到 lib/1804 下运行。
|