VINS如果視覺結果和IMU檢測的結果不匹配,容易出現跑飛的現象。例如一個人在電梯裏面,或者在相機前面遮了一塊幕布忘了掀開。結果不匹配,導致優化過程中CERES極有可能求解出一些跳動值不穩定值,導致整個系統不穩定運行,甚至掛掉。
vins kidnap 用來對這種定位綁架的問題提出了開源的方案。
giththub地址:https://github.com/HKUST-Aerial-Robotics/VINS-kidnap
vins kidnap:
This is the cerebro module for VINS-Fusion. The aim of this project is better loop detection and recover from kidnap. The cerebro node connects to the vins_estimator nodes of VINS-Fusion (with ros interface).
從上面介紹來看,vins kidnap主要增加了cerebro 節點來實現更好的閉環檢測以及定位綁架的檢測和能夠從定位綁架中恢復。閉環檢測也從檢測到一幀變成兩幀才進行兩個世界座標系的轉移。
兩種安裝方法:
1.直接源碼安裝:
安裝依賴項
sudo apt-get install libjpeg-dev libtiff5-dev
sudo apt-get install libpng-dev
sudo apt-get install libopenimageio-dev
sudo apt-get install libopenexr-dev
sudo apt-get install librapidjson-dev
sudo apt-get rm librocksdb-dev
安裝這些包:
https://github.com/facebook/rocksdb
https://github.com/Tencent/rapidjson
https://github.com/sweeneychris/TheiaSfM
安裝tensorflow和keras
sudo pip install keras
pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.11.0-cp27-none-linux_x86_64.whl
一個個裝下來
git clone https://github.com/mpkuse/VINS-Fusion
git clone https://github.com/mpkuse/cerebro
git clone https://github.com/mpkuse/solve_keyframe_pose_graph
2.推薦用docker:
安裝docker,NVIDIA驅動,CUDA 9.0 ,docker NVIDIA:
https://blog.csdn.net/huanghaihui_123/article/details/87985403
安裝完後:
$(host) export ROS_HOSTNAME=`hostname`
$(host) roscore
# assume that host has the ip address 172.17.0.1 in docker-network aka docker0
$(host) docker run --runtime=nvidia -it \
--add-host `hostname`:172.17.0.1 \
--env ROS_MASTER_URI=http://`hostname`:11311/ \
--env CUDA_VISIBLE_DEVICES=0 \
--hostname happy_go \
--name happy_go \
mpkuse/kusevisionkit:vins-kidnap bash
$(host) rviz # inside rviz open config cerebro/config/good-viz.rviz. If you open rviz in a new tab you might need to do set ROS_HOSTNAME again.
$(docker) roslaunch cerebro mynteye_vinsfusion.launch
$(host) rosbag play 1.bag
git clone --branch pcl-1.8.0 https://github.com/PointCloudLibrary/pcl
在自己機器上測試,效果比較一般:
同一個數據測試集合,會有不同的結果:
除了第一次初始化穩定,後面每一次均出現定位求解不穩定。雖然後來都有檢測出定位綁架。主要原因分析初始化的時候條件不夠好。
用同樣的數據,在不同時刻播放數據包的時候:
這段就能比較好的恢復三段獨立的信息。
不同顏色代表了不同的座標參考系,每一次檢測到定位綁架後,會進行重新的初始化過程。