安装环境
提示:其他版本Ubuntu也可参考,本机未安装ROS环境
操作系统版本:Ubuntu 20.04.5 LTS
GNOME版本:3.36.8
显卡:GeForce MX250独显 + UHD620核显
注意:如果有独显,在系统显卡界面应显示两个显卡,没有两个的需要安装独显驱动,N卡安装430以上版本驱动。
提示:以下是本篇文章正文内容,下面案例可供参考
一、安装依赖库
(1)更新apt库,更新软件列表
sudo apt-get update
(2)安装git,用于从Github上克隆项目到本地
sudo apt-get install git
(3)安装cmake,用于程序的编译
sudo apt-get install cmake
(4)安装Eigen3
sudo apt-get install libeigen3-dev
二、安装主要库
1.Pangolin
(1)安装OpenGL
sudo apt install libgl1-mesa-dev
(2)安装Glew
sudo apt-get install libglew-dev
(3)安装Boost
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
(4)安装Python2/Python3
sudo apt-get install libpython2.7-dev
(5)如果出现报错为下列问题
依赖: libtotem-plparser-dev (>= 3.4) 但是它将不会被安装
依赖: valac (>= 0.20) 但是它将不会被安装
依赖: libvte-2.90-dev (>= 1:0.32) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
建议使用aptitude进行安装,aptitude 会对依赖关系进行智能处理
sudo apt-get install aptitude
sudo aptitude install <package name>
(6)安装Pangolin
此处因为版本不对折腾了好久,pangolin要安装0.5版本的,而非最新版本。
我的解决方案是去https://github.com/stevenlovegrove/Pangolin找到0.5版本的下载下来再进行安装。
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
2.安装Opencv
版本不能选择4以上的,Opencv2和Opencv3都可以,我安装的版本为3.4.16
(1)安装依赖环境
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
(2)下载Opencv
下载地址:https://opencv.org/releases/
点击Sources进行下载自己需要的版本
(3)编译Opencv
进入解压后的文件夹下
mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
可以使用sudo make -j 8 、sudo make -j4,进行加速编译,电脑性能低的老老实实用make,不然编译卡死
(4)安装OPencv
编译100%不出任何问题才能进入这一步,出现问题的需要一个一个解决,opencv编译是安装过程中出现问题最多的
sudo make install
(5)配置环境(可作可不做,主要是针对Opencv的便捷使用)
用gedit打开/etc/ld.so.conf
在文件中加上一行 /usr/loacal/lib
gedit /etc/ld.so.conf
没有安装gedit的用
vi /etc/ld.so.conf
修改完成后退出编辑
sudo ldconfig
修改bash文件
sudo gedit /etc/bash.bashrc
文末加上:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
编辑完成保存退出:
source /etc/bash.bashrc
(6)验证安装
pkg-config opencv --modversion
出现版本号就安装成功了。
3.安装DBoW2 和 g2o依赖
sudo apt-get install cmake libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev //g2o的依赖项
sudo apt-get install libboost-dev //DBoW2的依赖项
三、安装ORB-SLAM2本体
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
这里就是重头戏了,会发现编译时报各种错误,下面列几个ORBSLAM2中本身的bug
(1)添加#include <unistd.h>
解决方法如下:
进入/home/ORBSLAM2/include文件夹下, 找到system.文件, 在里面加入#include <unistd.h>。再次用./build.sh进行编译,即可编译成功。
(2)
解决办法:打开LoopClosing.h,将
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
改为:
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;
然后重新编译即可通过。
(3)报错Eigen3 found!之类错误。(这个不一定出现)
解决方法:
在orbslam2文件夹下,新建cmake_modules文件夹,进入文件夹新建FindEigen3.cmake文件
mkdir cmake_modules
cd cmake_modules
touch FindEigen3.cmake
编辑这个文件,把下面的一堆粘进去
# - Try to find Eigen3 lib
#
# This module supports requiring a minimum version, e.g. you can do
# find_package(Eigen3 3.1.2)
# to require version 3.1.2 or newer of Eigen3.
#
# Once done this will define
#
# EIGEN3_FOUND - system has eigen lib with correct version
# EIGEN3_INCLUDE_DIR - the eigen include directory
# EIGEN3_VERSION - eigen version
# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
# Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
# Redistribution and use is allowed according to the terms of the 2-clause BSD license.
if(NOT Eigen3_FIND_VERSION)
if(NOT Eigen3_FIND_VERSION_MAJOR)
set(Eigen3_FIND_VERSION_MAJOR 2)
endif(NOT Eigen3_FIND_VERSION_MAJOR)
if(NOT Eigen3_FIND_VERSION_MINOR)
set(Eigen3_FIND_VERSION_MINOR 91)
endif(NOT Eigen3_FIND_VERSION_MINOR)
if(NOT Eigen3_FIND_VERSION_PATCH)
set(Eigen3_FIND_VERSION_PATCH 0)
endif(NOT Eigen3_FIND_VERSION_PATCH)
set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
endif(NOT Eigen3_FIND_VERSION)
macro(_eigen3_check_version)
file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)
string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
set(EIGEN3_VERSION_OK FALSE)
else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
set(EIGEN3_VERSION_OK TRUE)
endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
if(NOT EIGEN3_VERSION_OK)
message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, "
"but at least version ${Eigen3_FIND_VERSION} is required")
endif(NOT EIGEN3_VERSION_OK)
endmacro(_eigen3_check_version)
if (EIGEN3_INCLUDE_DIR)
# in cache already
_eigen3_check_version()
set(EIGEN3_FOUND ${EIGEN3_VERSION_OK})
else (EIGEN3_INCLUDE_DIR)
# specific additional paths for some OS
if (WIN32)
set(EIGEN_ADDITIONAL_SEARCH_PATHS ${EIGEN_ADDITIONAL_SEARCH_PATHS} "C:/Program Files/Eigen/include" "C:/Program Files (x86)/Eigen/include")
endif(WIN32)
find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
PATHS
${CMAKE_INSTALL_PREFIX}/include
${EIGEN_ADDITIONAL_SEARCH_PATHS}
${KDE4_INCLUDE_DIR}
PATH_SUFFIXES eigen3 eigen
)
if(EIGEN3_INCLUDE_DIR)
_eigen3_check_version()
endif(EIGEN3_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)
mark_as_advanced(EIGEN3_INCLUDE_DIR)
endif(EIGEN3_INCLUDE_DIR)
四、运行ORB-SLAM2(单目例子)
./build 100%无错误才可进入这一步。
这里选择Tum的数据集,网址:https://vision.in.tum.de/data/datasets/rgbd-dataset/download
下载Category: Testing and Debugging下的第一个fr1/xyz,也就是30秒的那个
下载好tgz文件解压到ORB_SLAM2文件夹data文件夹下:
cd ORB_SLAM2
mkdir data
cd data
tar xvf /home/mining/下载/rgbd_dataset_freiburg1_xyz.tgz
cd ../
运行命令:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ./data/rgbd_dataset_freiburg1_xyz
命令解释:
./Examples/Monocular/mono_tum 执行程序
Vocabulary/ORBvoc.txt 使用的orb词典
Examples/Monocular/TUM1.yaml 内参相关配置
./data/rgbd_dataset_freiburg1_xyz 数据路径
出现下面即成功:
总结
安装过程中会出现各种各样的错误,需要一点一点的解决