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
在自己机器上测试,效果比较一般:
同一个数据测试集合,会有不同的结果:
除了第一次初始化稳定,后面每一次均出现定位求解不稳定。虽然后来都有检测出定位绑架。主要原因分析初始化的时候条件不够好。
用同样的数据,在不同时刻播放数据包的时候:
这段就能比较好的恢复三段独立的信息。
不同颜色代表了不同的坐标参考系,每一次检测到定位绑架后,会进行重新的初始化过程。