VINS_FUSION编译运行

一、ROS安装

见前文

二、ceres安装

GitHub地址:

GitHub - ceres-solver/ceres-solver: A large scale non-linear optimization library

#14.04
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libeigen3-dev libgtest-dev
#18.04
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libeigen3-dev libgtest-dev

git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver/
mkdir build
cd build
cmake ..
make
sudo make install

记得安装依赖项,记得最后的make install

18.04报错“无法定位软件包 libcxsparse3.1.2”改成: libcxsparse3
(参考https://blog.csdn.net/weixin_42744670/article/details/82797586)
 

三、VINS_FUSION安装

创建ros空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash

安装VINS_Fusion

cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git

 编译

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

catkin_make的时候遇到报错: c++ internal compiler error program cc1plus
之前报错查找catkin_make的原因找了好久,以为是各种相关项版本的问题,结果是因为虚拟机分配的内存不足,采用博文提到的https://blog.csdn.net/fenquegong2126/article/details/80988452的方法,报错前用的4G内存,改成8G内存,跑通了。

[XXX] is neither a launch file in package [XXX] nor is [XXX] a launch file name报错信息解决方法

catkin_make
source ~/catkin_ws/devel/setup.bash

 跑通实例:使用EuRoc数据集MH_01_easy.bag

下载EuRoC MAV数据集到YOUR_DATASET_FOLDER。以MH_01为例,可以使用三种传感器类型(单目相机+ IMU、立体声相机+ IMU和立体声相机)运行VINS-Fusion。打开四个终端,分别运行vins里程计、可视闭环(可选)、rviz和播放包文件。绿色路径为VIO里程计;红色路径为目视闭环下的里程计。下载EuRoC MAV数据集到YOUR_DATASET_FOLDER。以MH_01为例,可以使用三种传感器类型(单目相机+ IMU、立体声相机+ IMU和立体声相机)运行VINS-Fusion。打开四个终端,分别运行vins里程计、可视闭环(可选)、rviz和播放包文件。绿色路径为VIO里程计;红色路径为目视闭环下的里程计。

单目+IMU

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

VINS_FUSION编译运行_第1张图片

VINS_FUSION编译运行_第2张图片

 双目+IMU

    roslaunch vins vins_rviz.launch
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

VINS_FUSION编译运行_第3张图片

双目

    roslaunch vins vins_rviz.launch
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

 VINS_FUSION编译运行_第4张图片

报错opencv没有安装

报错缺少cv_bridge,补充安装包 sudo apt-get install ros-melodic-cv-bridge

报错 error: ‘CV_GRAY2BGR’ was not declared in this scope

1.查看自己的OPENCV版本

pkg-config --modversion opencv 

 2、修改报错代码目录上一层的CMakelist opencv包的版本

将这个:find_package( OpenCV REQUIRED )
替换为(自己的版本):find_package( OpenCV 3 REQUIRED )

四、KITTI数据集下载

http://www.cvlibs.net/datasets/kitti/raw_data.php
国外源打不开,感谢这个博主提供的国内源下载:https://blog.csdn.net/weixin_43599336/article/details/86533572

泡泡链接(百度网盘):https://www.sohu.com/a/219232053_715754

或者
https://www.dalipan.com/detail/40c8f99ba2120a493a148f8332094668
 

五、跑KITTI数据集

下载KITTI里程表数据集到YOUR_DATASET_FOLDER。以序列08为例,打开两个终端,分别运行vins和rviz。(我们在没有闭环功能的KITTI基准上评估了里程计)

KITTI Odometry (Stereo)

    roslaunch vins vins_rviz.launch
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml
    rosrun vins kitti_odom_test ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/08/ 

VINS_FUSION编译运行_第5张图片

 VINS_FUSION编译运行_第6张图片

ps:本人使用的是虚拟机,rviz有时会莫名其妙的退出,出现

[rvizvisualisation-2] process has died [pid 28370, exit code -11, cmd /opt/r

建议关掉虚拟机的加速3d图形(关机状态下操作)

VINS_FUSION编译运行_第7张图片

下载KITTI原始数据集到YOUR_DATASET_FOLDER。以2011_10_03_drive_0027_synced为例。打开三个终端,分别运行vins、global fusion和rviz。绿色路径为VIO里程计;蓝色路径为GPS全局融合下的里程计。

KITTI GPS Fusion (Stereo + GPS)

    roslaunch vins vins_rviz.launch
    rosrun vins kitti_gps_test ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml YOUR_DATASET_FOLDER/2011_10_03_drive_0027_sync/ 
    rosrun global_fusion global_fusion_node

VINS_FUSION编译运行_第8张图片 

VINS_FUSION编译运行_第9张图片 

 

汽车演示上的VINS-Fusion

下载汽车包到YOUR_DATASET_FOLDER。打开四个终端,分别运行vins里程计、可视闭环(可选)、rviz和播放包文件。绿色路径为VIO里程计;红色路径为目视闭环下的里程计。

    roslaunch vins vins_rviz.launch
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/vi_car/vi_car.yaml 
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/vi_car/vi_car.yaml 
    rosbag play YOUR_DATASET_FOLDER/car.bag

六、运行在设备上

VIO不仅是一种软件算法,它严重依赖于硬件质量。对于初学者,我们建议您使用专业设备运行VIO,其中包含全局快门相机和硬件同步。

6.1 配置文件

为你的设备写一个配置文件。可以以EuRoC和KITTI的配置文件为例。

6.2 相机校正

VINS-Fusion支持多种相机模型(针孔,mei,等距)。您可以使用相机模型校准您的相机。我们将一些示例数据放在/camera_models/calibrationdata下面,告诉您如何校准。

cd ~/catkin_ws/src/VINS-Fusion/camera_models/camera_calib_example/
rosrun camera_models Calibrations -w 12 -h 8 -s 80 -i calibrationdata --camera-model pinhole

七. Docker 支持

为了进一步简化构建过程,我们在代码中添加了docker。Docker环境就像一个沙盒,因此使我们的代码与环境无关。要运行docker,首先确保在您的机器上安装了ros和docker。然后通过sudo usermod -aG docker $YOUR_USER_NAME将您的帐户添加到docker组。如果出现权限拒绝错误,请重新启动终端或注销并重新登录,输入:

cd ~/catkin_ws/src/VINS-Fusion/docker
make build

注意,构建docker的过程可能需要一段时间,这取决于您的网络和机器。成功构建vins - fusion后,可以使用run.sh脚本运行vins估计器。脚本run.sh可以接受多个标志和参数。Flag -k表示KITTI, -l表示环路融合,-g表示全局融合。您可以通过./run.sh -h获取使用细节。以下是该脚本的一些示例:

# Euroc Monocualr camera + IMU
./run.sh ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# Euroc Stereo cameras + IMU with loop fusion
./run.sh -l ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# KITTI Odometry (Stereo)
./run.sh -k ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/00/

# KITTI Odometry (Stereo) with loop fusion
./run.sh -kl ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/00/

#  KITTI GPS Fusion (Stereo + GPS)
./run.sh -kg ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml YOUR_DATASET_FOLDER/2011_10_03_drive_0027_sync/

在Euroc的情况下,您需要打开另一个终端并播放您的包文件。如果您需要修改代码,只需在更改之后使用适当的参数重新运行./run.sh即可。

你可能感兴趣的:(SLAM,自动驾驶)