1. 程式人生 > >安裝並執行VINS-Mono

安裝並執行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_estimator

rviz和播放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的位姿圖:
在這裡插入圖片描述

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