安装并运行VINS-Mono

0 A Robust and Versatile Monocular Visual-Inertial State Estimator

VINS-Mono是单目视觉惯性系统的实时SLAM框架。它使用基于优化的滑动窗口配方来提供高精度的视觉惯性里程计。它具有高效的IMU预积分,包括偏差校正,自动估算器初始化,在线外部校准,故障检测和恢复,回环检测,全局位姿图优化,地图合并,位姿图重用,在线时间校准,卷帘快门支持。VINS-Mono主要用于自主无人机的状态估计和反馈控制,但它也能够为AR应用提供精确的定位。此代码在Linux上运行,并与ROS完全集成。对于iOS移动设备实施,请访问VINS-Mobile。

1 依赖

1.1 Ubuntu and ROS
官方要求是Ubuntu 16.04,ROS Kinetic,我的环境是Ubuntu 14.04, ROS Indigo。经测试,可以正常运行。

sudo apt-get install ros-indigo-cv-bridge ros-indigo-tf ros-indigo-message-filters ros-indigo-image-transport

1.2 ceres-solver
这里我没有根据官网的文档安装,而是根据高翔博士的《视觉SLAM十四讲》中的方法:

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libeigen3-dev libgtest-dev
git clone https://github.com/ceres-solver/ceres-solver.git
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver/
mkdir build
cd build
cmake ..
make -j8
sudo mkae install

2 Build VINS-Mono on ROS

mkdir -p vins-mono-catkin_ws/src
cd vins-mono-catkin_ws/src/
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
cd ..
catkin_make
source devel/setup.bash

3 Visual-Inertial Odometry and Pose Graph Reuse on Public datasets

3.1 视觉-惯性里程计和回环
3.1.1 打开三个终端,分别启动vins_estimatorrviz和播放bag文件。以MH_01为例:

roslaunch vins_estimator euroc.launch 
roslaunch vins_estimator vins_rviz.launch
rosbag play YOUR_PATH_TO_DATASET/MH_01_easy.bag

3.1.2(可选)可视化ground truth
作者写了一个 naive benchmark publisher,以帮助可视化ground truth。它使用一种naive策略来将VINS与ground truth对齐。只是为了可视化,不适用于学术出版物的定量比较。

roslaunch benchmark_publisher publish.launch  sequence_name:=MH_05_difficult

(绿线是VINS结果,红线是ground truth)。
3.1.3(可选)您甚至可以在没有相机和IMU之间外部参数的情况下,运行EuRoC,我们将在线校准它们。
将第一个命令替换为:

roslaunch vins_estimator euroc_no_extrinsic_param.launch

该配置文件中没有外部参数。等待几秒钟进行初始校准。有时您不会感觉到任何差异,因为校准很快完成。
3.2 地图合成
播放MH_01 bag后,可以继续播放MH_02 bag,MH_03 bag… 系统将根据回环合并它们。
地图合成的前提条件是要有重合的公共部分。
3.3地图重用
3.3.1地图保存
YOUR_VINS_FOLEDER/config/euroc/euroc_config.yaml中设置pose_graph_save_path的路径。
播放MH_01 bag后,在vins_estimator终端输入s,然后按回车键,将保存当前位姿图。
注意:修改路径后,必须重新执行3.1.1中的操作,然后才能保存位姿图。
3.3.2地图加载
在执行3.1.1之前将YOUR_VINS_FOLEDER/config/euroc/euroc_config.yaml中的load_previous_pose_graph设置为1。系统将从pose_graph_save_path加载先前的位姿图。
然后可以播放MH_02 bag,新序列将与先前的位姿图对齐。

4 AR Demo

4.1 下载从香港科技大学机器人研究所收集的bag文件。对于中国大陆的朋友,请从bag文件下载。
4.2 打开三个终端,分别启动ar_demo,rviz和播放bag文件。

    roslaunch ar_demo 3dm_bag.launch
    roslaunch ar_demo ar_rviz.launch
    rosbag play YOUR_PATH_TO_DATASET/ar_box.bag

我们在您的视图前放置了一个0.8米 x 0.8米 x 0.8米的虚拟盒子。

5 使用您的设备运行

假设您熟悉ROS并且可以在ROS话题中获得具有原始度量测量值的camera和IMU,您可以按照以下步骤设置设备。对于初学者,如果你有iOS设备,我们强烈建议你先试用VINS-Mobile,因为你不需要设置任何东西。
5.1 在配置文件中更改话题名称
图像的频率应超过20Hz,IMU的频率应超过100Hz。
图像和IMU都应该具有准确的时间戳。IMU应包含绝对加速度值,包括重力。
5.2 摄像机校准
我们支持针孔模型和MEI模型。您可以使用您喜欢的任何工具校准相机。只需以正确的格式在配置文件中写入参数即可。如果您使用卷帘快门相机,请仔细校准您的相机,确保重投影误差小于0.5像素。
5.4 时间校准
大多数自制的视觉-惯性传感器组是不同步的。您可以将estimate_td设置为1以在线估计相机和IMU之间的时间偏移。
5.5 卷帘快门
对于卷帘快门相机(仔细校准,重新投影误差在0.5像素以下),将rolling_shutter设置为1.此外,您应设置滚动快门读数时间rolling_shutter_tr,它来自传感器数据表(通常为0-0.05秒,不是曝光时间)。不要尝试网络摄像头,网络摄像头太糟糕了。
5.6 其他参数设置
详细信息包含在配置文件中。
5.7 不同设备的性能
(全局快门摄像头+同步高端IMU,例如VI-Sensor)>(全局快门摄像头+同步低端IMU)>(全局摄像头+非同步高频IMU)>(全局摄像头+非同步低频IMU)>(卷帘摄像机+非同步低频IMU)。

6 测试

MH_01的位姿图:
安装并运行VINS-Mono_第1张图片

7 拓展资料

VINS-Mono代码注释以及公式推导:https://github.com/QingSimon/VINS-Mono-code-annotation
不依赖ROS的VINS:https://github.com/heguixiang/Remove_ROS_VINS
https://blog.csdn.net/wangshuailpp/article/details/78461171
https://blog.csdn.net/houlianfeng/article/details/79525854
https://blog.csdn.net/houlianfeng/article/details/79626657
https://blog.csdn.net/houlianfeng/article/details/79713333

你可能感兴趣的:(SLAM)