Ubuntu20.04安装VINS_Mono 和 VINS_Fusion

文章目录

  • 一、问题描述
  • 二、依赖环境
    • [1. Eigen 安装](#1. Eigen 安装)
    • [2. glog 安装](#2. glog 安装)
    • [3. gflags 安装](#3. gflags 安装)
    • [4. ceres 安装](#4. ceres 安装)
  • [三、VINS-Mono 安装](#三、VINS-Mono 安装)
    • [1. git 下载并安装](#1. git 下载并安装)
    • [2. OpenCV 版本冲突](#2. OpenCV 版本冲突)
    • [3. 运行](#3. 运行)
  • [四、VINS---Fusion 安装](#四、VINS—Fusion 安装)
    • [1. git 下载并安装](#1. git 下载并安装)
    • [2. OpenCV 版本冲突](#2. OpenCV 版本冲突)
    • [3. 运行](#3. 运行)
  • 五、日常bug
    • [1. 动静态库链接冲突](#1. 动静态库链接冲突)

一、问题描述

vins 系列vslam是基于ubuntu18.04系统搭建配置的,自己使用的Ubuntu20.04OpenCV 4.2.0 在环境配置方面多少有一些冲突,在此记录一下填坑的过程 。。。填完坑的相应安装包见 网盘链接 提取码: gene,按需取用(自动安装的脚本目前仅根据安装记录整理的,用于以后安装参考,目前没自动化安装过)。

二、依赖环境

1. Eigen 安装

自己使用的是 eigen-3.3.7 版本 官网链接 ,安装命令如下:

bash 复制代码
tar -zxvf eigen-3.3.7.tar.gz
mkdir eigen-3.3.7/build && cd eigen-3.3.7/build
sudo cmake ..
sudo make install
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
pkg-config --modversion eigen3   # 查看安装 eigen 版本

2. glog 安装

自己使用的是 glog-0.4.0 版本 git 链接 ,安装命令如下:

bash 复制代码
tar -zxvf glog-0.4.0.tar.gz
cd glog-0.4.0/ && mkdir build
cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_SHARED_LIBS=ON ..
make -j4
sudo make install

3. gflags 安装

自己使用的是 gflags-2.2.2 版本 git 链接 ,安装命令如下:

bash 复制代码
tar -zxvf gflags.tar.gz
mkdir gflags/build && cd gflags/build
# 编译静态库
cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC ..
# 编译动态库
# cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_SHARED_LIBS=1 -DINSTALL_SHARED_LIBS=1 ..
make -j4
sudo make install
pkg-config --modversion gflags

4. ceres 安装

自己使用的是 ceres-solver-1.14.0 版本 ,安装命令如下:

bash 复制代码
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar -zxvf ceres-solver-1.14.0.tar.gz 
mkdir ceres-solver-1.14.0/build && cd ceres-solver-1.14.0/build
cmake ..
make -j4
sudo make install
cat /usr/local/include/ceres/version.h # 查看安装版本

三、VINS-Mono 安装

1. git 下载并安装

bash 复制代码
mkdir -p vins_mono_ws/src && cd vins_mono_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
catkin_make

2. OpenCV 版本冲突

Ubuntu20.04 默认ROS的版本为 Noetic 对应的OpenCV为4.2.0 ,在步骤1编译时会出现版本冲突:
在工作空间下执行如下命令,可见,OpenCV版本均为默认版本。

bash 复制代码
grep -r "find_package(OpenCV REQUIRED)"
		src/VINS-Mono/vins_estimator/CMakeLists.txt:find_package(OpenCV REQUIRED)
		src/VINS-Mono/camera_model/CMakeLists.txt:find_package(OpenCV REQUIRED)
		src/VINS-Mono/data_generator/CMakeLists.txt:find_package(OpenCV REQUIRED)
		src/VINS-Mono/ar_demo/CMakeLists.txt:find_package(OpenCV REQUIRED)
		src/VINS-Mono/feature_tracker/CMakeLists.txt:find_package(OpenCV REQUIRED)

指定OpenCV版本为4.2.0,并重新catkin_make 编译。

bash 复制代码
# 一键替换
find . -name "CMakeLists.txt" | xargs sed -i "s/OpenCV REQUIRED/OpenCV 4 REQUIRED/g"

grep -r "find_package(OpenCV REQUIRED)"
		src/VINS-Mono/vins_estimator/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
		src/VINS-Mono/camera_model/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
		src/VINS-Mono/data_generator/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
		src/VINS-Mono/ar_demo/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)
		src/VINS-Mono/feature_tracker/CMakeLists.txt:find_package(OpenCV 4 REQUIRED)

3. 运行

开三个终端,三个终端分别运行如下命令:

bash 复制代码
# 终端1
source ./devel/setup.bash
roslaunch vins_estimator vins_rviz.launch

# 终端2
source ./devel/setup.bash
roslaunch vins_estimator euroc.launch

# 终端3
rosbag play MH_03_medium.bag 		# 需下载数据集

:终端3 对应 数据集

不出意外的话,,,会出现如下运行界面。

四、VINS---Fusion 安装

1. git 下载并安装

bash 复制代码
mkdir -p vins_mono_ws/src && cd vins_mono_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
catkin_make

2. OpenCV 版本冲突

首次编译,不出意外的又要出意外了,,,同样,是因为OpenCV版本冲突,解决方法是直接添加缺失的头文件 即可。

2.1 添加缺失头文件

  1. camera_model包中的头文件camera_models/include/camodocal/chessboard/Chessboard.h中添加
cpp 复制代码
#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>
  1. camera_model包中的头文件camera_models/include/camodocal/calibCameraCalibration.h;在 loop_fusion包中的头文件loop_fusion/src/pose_graph.hloop_fusion/src/keyframe.hloop_fusion/src/ThirdParty/DVision/BRIEF.h中添加
cpp 复制代码
#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>
  1. vins_estiamtor包中头文件vins_estimator/src/estimator/estimator.h添加
cpp 复制代码
// #include <opencv/cv.h>
// #include <opencv/highgui.h>
#include <opencv2/highgui.hpp>
#include <opencv2/cvconfig.h>
  1. vins_estiamtor包中头文件vins_estimator/src/featureTracker/feature_tracker.h添加
cpp 复制代码
#include <opencv2/imgproc/types_c.h>
  1. vins_estiamtor包中头文件KITTIOdomTest.cppKITTIGPSTest.cpp中的 CV_LOAD_IMAGE_GRAYSCALE 修改为 0 (或 cv::IMREAD_GRAYSCALE)
cpp 复制代码
// imLeft = cv::imread(leftImagePath, CV_LOAD_IMAGE_GRAYSCALE );
imLeft = cv::imread(leftImagePath, 0 );

// imRight = cv::imread(rightImagePath, CV_LOAD_IMAGE_GRAYSCALE );
imRight = cv::imread(rightImagePath, 0 );

补充:opencv4.x以上,有些宏,API名字有所变化:

修改前 修改后
CV_LOAD_IMAGE_UNCHANGED cv::IMREAD_UNCHANGED
CV_LOAD_IMAGE_GRAYSCALE cv::IMREAD_GRAYSCALE
CV_LOAD_IMAGE_COLOR cv::IMREAD_COLOR
CV_LOAD_IMAGE_ANYDEPTH cv::IMREAD_ANYDEPTH
  1. 若指定OpenCV版本冲突,与Mono类似执行如下命令
bash 复制代码
find . -name "CMakeLists.txt" | xargs sed -i "s/OpenCV REQUIRED/OpenCV 4 REQUIRED/g"

3. 运行

开三个终端,三个终端分别运行如下命令:

bash 复制代码
# 终端1
source ./devel/setup.bash
roslaunch vins vins_rviz.launch

# 终端2
source ./devel/setup.bash
rosrun vins vins_node src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml

# 终端3
rosbag play MH_03_medium.bag 		# 需下载数据集

:终端3 对应 数据集

不出意外的话,,,会出现如下运行界面:

到此,安装成功,继续填坑中。。。

五、日常bug

1. 动静态库链接冲突

bash 复制代码
One possibility: file 'gflags.cc' is being linked both statically and dynamically into this executable.

可能与安装gflags 时,系统自身有其他版本,或者flags 安装时没有使用生成静态库编译。自己当时的解决办法是卸载gflags重新按照上述步骤一方法安装。

相关推荐
leegong231116 分钟前
学习PostgreSQL专家认证
数据库·学习·postgresql
Moonnnn.1 小时前
51单片机学习——动态数码管显示
笔记·嵌入式硬件·学习·51单片机
南宫生1 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
技术小齐2 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
竹言笙熙2 小时前
代码审计初探
学习·web安全
日记成书2 小时前
物联网智能项目
物联网·学习
打不了嗝 ᥬ᭄2 小时前
Linux的权限
linux
落幕2 小时前
C语言-进程
linux·运维·服务器
深度Linux2 小时前
C++程序员内功修炼——Linux C/C++编程技术汇总
linux·项目实战·c/c++
虾球xz2 小时前
游戏引擎学习第118天
学习·游戏引擎