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重新按照上述步骤一方法安装。

相关推荐
SunTecTec8 分钟前
Linux grep -r 查找依赖包是否存在依赖类 Class
linux·运维·服务器
海尔辛14 分钟前
学习黑客Kerberos深入浅出:安全王国的门票系统
学习·安全·kerberos·window
霸王蟹22 分钟前
React 19中如何向Vue那样自定义状态和方法暴露给父组件。
前端·javascript·学习·react.js·typescript
Johny_Zhao34 分钟前
AI+自动化测试系统方案:网络设备与网络应用智能测试
linux·网络·人工智能·python·网络安全·docker·ai·信息安全·云计算·ansible·shell·cisco·huawei·系统运维·itsm·华三·deepseek
Javis21136 分钟前
【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现
linux·运维·php
FBI HackerHarry浩1 小时前
Linux云计算训练营笔记day10(MySQL数据库)
linux·运维·数据库·笔记·mysql
南暮思鸢1 小时前
vulnhub靶场——secarmy
linux·网络安全·vulnhub靶场·write up·secarmy
Moonnnn.1 小时前
【数字电路】第七章 脉冲波形的产生与整形电路
笔记·学习
YOYO--小天2 小时前
RK3588 ADB使用
linux·嵌入式硬件·adb
猴子请来的逗比4892 小时前
tomcat查看状态页及调优信息
服务器·学习·tomcat·firefox