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

相关推荐
爱学习的小囧6 小时前
ESXi 8.0 原生支持 NVMe 固态硬盘吗?VMD 配置详解教程
linux·运维·服务器·esxi·esxi8.0
坚持就完事了6 小时前
Linux中的变量
linux·运维·服务器
handler016 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
电子云与长程纠缠6 小时前
UE5 两种方式解决Decal Actor贴花拉伸问题
学习·ue5·游戏引擎
Cat_Rocky6 小时前
利用Packet Tracer网络实验
linux·运维·服务器
red_redemption7 小时前
自由学习记录(172)
学习·cache line 64b·重用距离
嵌入式×边缘AI:打怪升级日志7 小时前
Linux 驱动实战:SR501 人体红外传感器驱动开发与调试全记录
linux·运维·驱动开发
正点原子7 小时前
【正点原子Linux连载】第三章 U-Boot使用 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
阿荻在肝了7 小时前
Agent学习六:LangGraph学习-持久化与记忆一
python·学习·agent
Qbw20047 小时前
【Linux】进程地址空间
linux·c++