前言

VINS-Fusion 是一种基于优化的多传感器状态估计器,可为自主应用(无人机、汽车和 AR/VR)实现精确的自定位。它常用于无人机的自主导航和飞行控制,通过融合视觉和惯性数据实现高精度定位和导航。VINS-Fusion 是 VINS-Mono 的扩展,它支持多种视觉惯性传感器类型(单目摄像头 + IMU、双目摄像头 + IMU,只有双目摄像头)。

我的配置如下:
虚拟机 Ubuntu 20.04 (运行内存 4G、硬盘内存 60G) 、ROS noetic 、ceres-solver 2.0

对于Ubuntu 18.04 可参考 👉 Ubuntu安装Vins-Fusion(1) —— Ubuntu18.04安装vins-CSDN博客

1、准备

1.1 安装ROS

安装 VINS-Fusion 之前必须要安装好ROS,ROS安装教程可以参考这篇文章👇

ubuntu安装ROS melodic(最新、超详细图文教程,包含配置rosdep)-CSDN博客

注:没有创建工作空间,可以执行下列代码,如果创建了可以跳过(catkin_make 与 catkin build 是编译功能包的两种工具,任选其一即可)

sudo apt install python3-catkin-tools python3-rosinstall-generator python3-osrf-pycommon -y
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin init
catkin build
# catkin_make 
# mkdir -p ~/catkin_ws/src
# cd catkin_ws/src && catkin_init_workspace
# cd .. && catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc 

1.2 安装 Ceres Solver

Ceres Solver 是一个开源的 C++ 库,用于解决非线性最小二乘问题。它的自动微分、鲁棒优化算法以及高效的并行计算能力,使其成为解决复杂非线性优化问题的理想选择。它被广泛应用于计算机视觉、机器人和图像处理领域中的优化问题。

Ceres Solver 官方文档

GitHub 仓库

  • 安装依赖:
# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev libgflags-dev
# Use ATLAS for BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse (可以安装,也可以不安装)
sudo apt-get install libsuitesparse-dev
  • 下载 Ceres Solver 源码:
wget ceres-solver.org/ceres-solver-2.0.0.tar.gz

在这里插入图片描述

  • 编译 Ceres Solver
tar zxf ceres-solver-2.0.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-2.0.0

在这里插入图片描述

make -j3  # 大概几分钟

在这里插入图片描述

make test
# 这一步必须每个 test 都通过

在这里插入图片描述

  • 安装 Ceres Solver
# 可选择 make isntall 安装 Ceres,也可使用 CMake 导出,CMake 可以无需安装即可使用 Ceres
# 更多信息请参阅 EXPORT_BUILD_DIR 选项的文档,有关 EXPORT_BUILD_DIR 选项的更多信息。
sudo make install

在这里插入图片描述

  • 测试:
./bin/simple_bundle_adjuster ../ceres-solver-2.0.0/data/problem-16-22106-pre.txt

测试结果:

iter      cost      cost_change  |gradient|   |step|    tr_ratio  tr_radius  ls_iter  iter_time  total_time
   0  4.185660e+06    0.00e+00    1.09e+08   0.00e+00   0.00e+00  1.00e+04        0    5.16e-02    1.53e-01
   1  1.062590e+05    4.08e+06    8.99e+06   5.36e+02   9.82e-01  3.00e+04        1    1.03e-01    2.57e-01
   2  4.992817e+04    5.63e+04    8.32e+06   3.19e+02   6.52e-01  3.09e+04        1    9.75e-02    3.54e-01
   3  1.899774e+04    3.09e+04    1.60e+06   1.24e+02   9.77e-01  9.26e+04        1    9.73e-02    4.51e-01
   4  1.808729e+04    9.10e+02    3.97e+05   6.39e+01   9.51e-01  2.78e+05        1    9.80e-02    5.50e-01
   5  1.803399e+04    5.33e+01    1.48e+04   1.23e+01   9.99e-01  8.33e+05        1    9.75e-02    6.47e-01
   6  1.803390e+04    9.02e-02    6.35e+01   8.00e-01   1.00e+00  2.50e+06        1    9.65e-02    7.44e-01

Solver Summary (v 2.0.0-eigen-(3.3.7)-lapack-suitesparse-(5.7.1)-cxsparse-(3.2.0)-eigensparse-no_openmp)

                                     Original                  Reduced
Parameter blocks                        22122                    22122
Parameters                              66462                    66462
Residual blocks                         83718                    83718
Residuals                              167436                   167436

Minimizer                        TRUST_REGION

Dense linear algebra library            EIGEN
Trust region strategy     LEVENBERG_MARQUARDT

                                        Given                     Used
Linear solver                     DENSE_SCHUR              DENSE_SCHUR
Threads                                     1                        1
Linear solver ordering              AUTOMATIC                 22106,16
Schur structure                         2,3,9                    2,3,9

Cost:
Initial                          4.185660e+06
Final                            1.803390e+04
Change                           4.167626e+06

Minimizer iterations                        7
Successful steps                            7
Unsuccessful steps                          0

Time (in seconds):
Preprocessor                         0.101465

  Residual only evaluation           0.077729 (7)
  Jacobian & residual evaluation     0.283038 (7)
  Linear solver                      0.253209 (7)
Minimizer                            0.697487

Postprocessor                        0.003571
Total                                0.802523

Termination:                      CONVERGENCE (Function tolerance reached. |cost_change|/cost: 1.769764e-09 <= 1.000000e-06)

2、安装 VINS-Fusion

对于原版 VINS-Fusion 用的是 opencv3 ,而在 Ubuntu 20.04 ROS noetic 中用的是 opencv4,如果不适配直接编译会报错,所以需要适配 opencv4。在 https://github.com/HKUST-Aerial-Robotics/VINS-Fusion/pull/187 中提到,有大佬做了适配,我们只需要下载他的代码即可,而且作者本人也说了仅仅是做了适配,并没有改动功能。
在这里插入图片描述

执行下列命令:

cd ~/catkin_ws/src
git clone https://github.com/stevenf7/VINS-Fusion.git
cd ../
catkin build  # 大概要10几分钟

在这里插入图片描述

注:如果出现上图错误,是因为是虚拟机内存不足造成的,可以通过增加SWAP交换空间解决

# /home/swap是放置swap的空间,这里分配空间的时候需要一点时间,等待执行完毕。
# bs=64M是块大小,count=32是块数量,所以swap空间大小是bs*count=2048MB=2GB
sudo dd if=/dev/zero of=/home/swap bs=64M count=32
# 设置该目录权限
sudo chmod 0600 /home/swap
# 把刚才空间格式化成swap格式
sudo mkswap /home/swap 
# 可能会提示warning: don't erase bootbits sectorson whole disk. Use -f to force,不用理会
# 使用刚才创建的swap空间
sudo swapon /home/swap
# 如果还是不行,可以重新执行,并继续增加swap空间

在这里插入图片描述

# 再次编译
catkin build # 大概要10几分钟

在这里插入图片描述

source ~/.bashrc

3、测试(EuRoC MAV 数据集)

3.1、下载数据集

点击下载地址 ,下载 MH_01_easy.bag,浏览器默认下载到 Downloads 目录。
在这里插入图片描述

3.2 Monocualr camera + IMU

执行下面命令:

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

在这里插入图片描述

3.3 Stereo cameras + IMU

执行下面命令:

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

在这里插入图片描述

3.4 Stereo cameras

执行下面命令:

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

在这里插入图片描述

参考

VINS-Fusion 论文

GitHub - HKUST-Aerial-Robotics/VINS-Fusion: An optimization-based multi-sensor state estimator

VINS Fusion support for Ubuntu 20.04 with Ceres Solver 2.0.0 by stevenf7 · Pull Request #187 · HKUST-Aerial-Robotics/VINS-Fusion · GitHub

GitHub - stevenf7/VINS-Fusion: An optimization-based multi-sensor state estimator

Installation — Ceres Solver (ceres-solver.org)

vins-fusion环境配置、安装与测试-CSDN博客

Ubuntu20.04运行Vins-fusion_ubuntu20.04 vins-fussion-CSDN博客

如有其他问题,或者发现文章有错误,请在评论区留言
Keep learning!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐