视觉SLAM十四讲学习笔记——库的安装

本文仅作为个人学习笔记,记录学习过程。

文章目录

  • 一、g++的安装
  • 二、CMake的安装
    • 测试
  • 三、ros的安装
    • 1.配置软件库
    • 2. ros安装
      • 2.1 添加ROS软件源
      • 2.2 添加秘钥
      • 2.3 安装ROS
      • 2.4 初始化
      • 2.5 设置环境变量
      • 2.6 安装rosinstall
      • 2.7 尝试启动ros
    • 测试(海龟例程)
  • 四、OpenCV的安装
    • 4.1 下载OpenCV
    • 4.2 安装依赖库
    • 4.3 编译
    • 4.4 配置环境
  • 五、Pangolin v0.5的安装
    • 1. 安装依赖
    • 2. 下载Pangolin
    • 3. 编译安装Pangolin
    • 4. 卸载Pangolin
  • 六、Eigen3.2.1的安装
    • 6.1 Eigen版本查看及卸载
      • 6.1.1 查看Eigen的版本
      • 6.1.2 卸载Eigen
    • 6.2 Eigen3.2.1的安装
    • 6.3 Eigen3.3.4的安装
  • 七、 ORB_SLAM2的安装
    • 7.1 ROS基础创建工作空间
    • 7.2 ORB_SLAM2的获取与安装
    • 7.3 安装报错与解决办法
      • 错误一:usleep
      • 错误二:Eigen版本高
        • 切记!!!不要装高版本的Eigen!不然重装Eigen还要重装Pangolin!!血的教训!!
  • 八、运行单目SLAM实例
    • 8.1 数据及下载
    • 8.2 编译
  • 参考文献

一、g++的安装

sudo apt-get install g++

二、CMake的安装

sudo apt-get install cmake

测试

测试使用了VScode

  1. 创建一个Test文件夹
  2. 在Test文件夹下创建include、scr、build文件夹和CMakeLists.txt文件
mkdir include
mkdir scr
mkdir build
touch CMakeLists.txt
  1. 在scr文件夹下创建test.cpp文件,并写入:
#include 
using namespace std;

int main(int argc,char argv)
{       
    cout << "Hello SLAM!" << endl;
    return 0;
}    
  1. 在CMakeLists.txt文件中写入:
    此处顺便给出了一些指令的解释
    指令大小写无所谓,但是建议大写,比如:project()和PROJECT()都对
cmake_minimum_required (VERSION 2.8)
# project()指令语法:
# PROJECT(projectname [CXX] [C] [Java])
# 1.projectname:工程名
# 可以指定工程支持的语言:可省略,默认支持所有语言
project (SLAM)
message(STATUS "This is BINARY dir" ${PROJECT_BINARY_DIR})
message(STATUS "This is SOURCE dir" ${PROJECT_SOURCE_DIR})
# cmake也预定义了两个系统变量:
# PROJECT_BINARY_DIR:cmake执行的路径
# PROJECT_SOURCE_DIR:CMakeLists.txt所在的路径
# ***建议使用这个!!!!这样修改工程名不会影响其他代码
# MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)
# message()指令语法:作用用于向终端输出用户定义的信息;变量SEND_ERROR:产生错误,生成过程被跳过;变量STATUS:输出前缀为-信息;变量FATAL_ERROR:立即终止所有cmake过程
# 执行cmake . 输出:
# -- This is BINARY dir/home/ubuntu/Test/build
# -- This is SOURCE dir/home/ubuntu/Test
# add_executable()语法指令:
# add_executable(hello ${SRC_LIST})
# 会生成一个文件名为hello的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表
ADD_executable(slam scr/main.cpp)
  1. 编译
    进行编译,并指定所生成中间文件的位置为当前目录下,其中MakeFile最重要,但不必修改它;cmake处理了工程文件之间的关系
cd build
cmake ..

编译生成可执行文件slam,实际上调用了g++来编译程序

make
  1. 运行
./slam 
Hello SLAM!

初学者如果不知道该./什么,其实很简单,如下make成功后会出现Built target XXX XXX是什么就./什么就可以了

(base) ubuntu@ubuntu:~/Test/build$ make
[100%] Built target slam

——————以上就是基于VScode的Cmake编译g++程序简单介绍——————

三、ros的安装

1.配置软件库

点击Ubuntu软件,点击软件和更新,确认4个都打了对勾
视觉SLAM十四讲学习笔记——库的安装_第1张图片

2. ros安装

2.1 添加ROS软件源

把ros软件源添加到系统软件源中,因为ROS有一个单独维护,系统本身是没有这个软件源的

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2.2 添加秘钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

2.3 安装ROS

【注意!!!】
选择ros安装版本,这里18.04对应的是melodic-desktop版本的ros
ros对应不同的ubuntu版本有不同的版本名字:
ubuntu16.04对应ros-kinetic;
ubuntu18.04对应ros-melodic;
ubuntu20.04对应ros-noetic。

这里的full只是把常用的包安装好了,其实并不是真正的完全版

sudo apt-get update
sudo apt-get install ros-melodic-desktop-full

2.4 初始化

sudo rosdep init
rosdep update

这个环节可能会出现问题

  • 【问题一】
bupo@bupo-vpc:~$ sudo rosdep init
[sudo] bupo 的密码: 
sudo: rosdep:找不到命令

【解决方法】

sudo apt install python-rosdep
  • 【问题二】
bupo@bupo-vpc:~$ sudo rosdep init
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

【解决方法】

sudo apt-get install python3-pip 
sudo pip3 install rosdepc
sudo rosdepc init
rosdepc update

参考链接

2.5 设置环境变量

如果每次启动新 shell 时 ROS 环境变量都自动添加到 bash 会话中,这将非常方便

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

2.6 安装rosinstall

sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

2.7 尝试启动ros

roscore

如果在roscore命令后,出现了这样的错误:

Command 'roscore' not found, but can be installed with:

sudo apt install python-roslaunch

参考链接
解决方法是sudo apt-get -f install ros-melodic-desktop-full 执行完毕之后,再运行roscore,就可以了

测试(海龟例程)

执行以下命令:

  1. 在一个terminal中roscore
  2. 另一个terminal中rosrun turtlesim turtlesim_node
  3. 再另一个terminal中rosrun turtlesim turtle_teleop_key
rqt_graph

可以通过上下左右键控制小海龟的移动,如果看见下面这张图片那就成功了视觉SLAM十四讲学习笔记——库的安装_第2张图片

四、OpenCV的安装

4.1 下载OpenCV

wget -O opencv-3.4.1.zip https://github.com/Itseez/opencv/archive/3.4.1.zip官网

opencv官网

4.2 安装依赖库

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev  

4.3 编译

cdopencv-4.3.1文件夹的目录下mkdirbuild文件夹,cdbuild,执行cmake

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release –D CMAKE_INSTALL_PREFIX=/usr/local ..

参考链接
这里的cmake可能会报错,方法是将–D CMAKE_INSTALL_PREFIX=/usr/local ..替换为-DWITH_CUDA:BOOL="0"
执行make

sudo make

这样就可以了
视觉SLAM十四讲学习笔记——库的安装_第3张图片
再执行

sudo make install

这样就可以了
视觉SLAM十四讲学习笔记——库的安装_第4张图片
以上就是OpenCV的编译过程

4.4 配置环境

配置OpenCV的编译环境,目的是让系统找到OpenCV的库的路径

  1. 打开编写一个空白的文件opencv.conf
sudo gedit /etc/ld.so.conf.d/opencv.conf 
  1. 写入如下内容:
/usr/local/lib  
  1. 使刚配置路径生效
sudo ldconfig  
  1. 打开bash文件,配置bash
sudo gedit /etc/bash.bashrc  
  1. 在打开的bash.bashrc的最末尾添加如下代码
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  

视觉SLAM十四讲学习笔记——库的安装_第5张图片6. 保存关闭文件,使刚才的配置生效

source /etc/bash.bashrc  

OpenCV配置完成!!

五、Pangolin v0.5的安装

先去安装Eigen3.2.1回来再安装Pangolin!
Pangolin建议安装0.5版,如果装了0.6后面会出问题

1. 安装依赖

sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install cmake
sudo apt install libpython2.7-dev
sudo apt install python-pip
sudo python -mpip install numpy pyopengl Pillow pybind11
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
sudo apt install libdc1394-22-dev libraw1394-dev
sudo apt install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev

2. 下载Pangolin

Github网址
视觉SLAM十四讲学习笔记——库的安装_第6张图片下载zip文件,并解压

3. 编译安装Pangolin

cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
如果遇到 :error: ISO C++1z does not allow dynamic exception specifications 类似报错
使用:cmake -DBUILD_PANGOLIN_LIBOPENEXR=OFF .. #目的是禁用OpenEXR
sudo make install

在执行cmake --build .时可能会遇到问题

In file included from /home/micoarm/Pangolin/src/video/video_output.cpp:33:0:
/home/micoarm/Pangolin/include/pangolin/video/drivers/ffmpeg.h:94:5: error: ‘PixelFormat’ does not name a type
PixelFormat fmtout;
^
/home/micoarm/Pangolin/include/pangolin/video/drivers/ffmpeg.h:142:5: error: ‘PixelFormat’ does not name a type
PixelFormat fmtsrc;
^
/home/micoarm/Pangolin/include/pangolin/video/drivers/ffmpeg.h:143:5: error: ‘PixelFormat’ does not name a type
PixelFormat fmtdst;
^
make[2]: *** [src/CMakeFiles/pangolin.dir/video/video_output.cpp.o] Error 1
make[2]: Leaving directory /home/micoarm/Pangolin/build' make[1]: *** [src/CMakeFiles/pangolin.dir/all] Error 2 make[1]: Leaving directory/home/micoarm/Pangolin/build'
make: *** [all] Error 2

具体解决办法(之一,亲测可解决)如下:
参考
到Pagolin/src文件夹下,在CMakeList.txt中删去下面这段代码(屏蔽掉ffmpeg的影响):

find_package(FFMPEG QUIET)
if(BUILD_PANGOLIN_VIDEO AND FFMPEG_FOUND)
  set(HAVE_FFMPEG 1)
  list(APPEND INTERNAL_INC  ${FFMPEG_INCLUDE_DIRS} )
  list(APPEND LINK_LIBS ${FFMPEG_LIBRARIES} )
  list(APPEND HEADERS ${INCDIR}/video/drivers/ffmpeg.h)
  list(APPEND SOURCES video/drivers/ffmpeg.cpp)
  list(APPEND VIDEO_FACTORY_REG RegisterFfmpegVideoFactory )
  list(APPEND VIDEO_FACTORY_REG RegisterFfmpegVideoOutputFactory )
 
  if(_GCC_)
    # FFMPEG is a real pain for deprecating the API.
    set_source_files_properties(video/drivers/ffmpeg.cpp    PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations")
  endif()
  message(STATUS "ffmpeg Found and Enabled")
endif()

然后回到Pagolin/build文件夹下,运行cmake …和make即可通过编译。

编译完,可以运行以下命令测试,如果显示出一个彩色立方体,并且可以通过鼠标左、右键和滚轮按住拖拽,就表示 Pangolin 安装成功了。

cd ~/Pangolin/build/examples/HelloPangolin
./HelloPangolin

视觉SLAM十四讲学习笔记——库的安装_第7张图片

4. 卸载Pangolin

参考

  1. 删除库和头文件
cd Pangolin/build
make clean
sudo make uninstall

执行之后就会开始卸载所有的.so文件和.h文件。

  1. 删除源代码
cd ../..
sudo rm -r Pangolin

执行之后删除源代码文件夹。

  1. 删除残留文件夹
sudo updatedb
locate pangolin

更新下索引,搜索pangolin的位置
可以看到在/usr/local/include/pangolin目录还未删除,因为第一步是卸载了该目录下的所有.h文件。

/usr/local/include/pangolin
/usr/local/include/pangolin/compat
/usr/local/include/pangolin/console
/usr/local/include/pangolin/display
/usr/local/include/pangolin/factory
/usr/local/include/pangolin/geometry
/usr/local/include/pangolin/gl
/usr/local/include/pangolin/handler
/usr/local/include/pangolin/image
/usr/local/include/pangolin/log

所以,我们将该目录删除即可。

sudo rm -r /usr/local/include/pangolin
  1. 检验卸载
locate pangolin

六、Eigen3.2.1的安装

这里强烈建议安装Eigen3.2.1 版本,不然安装ORB_SLAM2时会报错,具体错误在介绍ORB_SLAM2安装的时候会说
这里分别给出3.2.1版和3.3.4版的安装方法

6.1 Eigen版本查看及卸载

参考

6.1.1 查看Eigen的版本

  1. 方法一
pkg-config --modversion eigen3

请添加图片描述
方法二

gedit /usr/include/eigen3/Eigen/src/Core/util/Macros.h

视觉SLAM十四讲学习笔记——库的安装_第8张图片#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 4
目前版本是3.3.4

6.1.2 卸载Eigen

查看eigen3位置

sudo updatedb
locate eigen3

删除eigen3相关文件

sudo rm -rf /usr/include/eigen3
sudo rm -rf /usr/lib/cmake/eigen3
sudo rm -rf /usr/local/include/eigen3
sudo rm -rf /usr/share/doc/libeigen3-dev 
sudo rm -rf /usr/local/share/pkgconfig/eigen3.pc /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums
sudo rm -rf /usr/local/lib/pkgconfig/eigen3.pc
sudo rm -rf /usr/local/share/eigen3

刷新查看是否删除彻底

sudo updatedb
locate eigen3
pkg-config --modversion eigen3

请添加图片描述

6.2 Eigen3.2.1的安装

进入Eigen官网。如下图,点击other downloads
视觉SLAM十四讲学习笔记——库的安装_第9张图片找到Eigen3.2.1
视觉SLAM十四讲学习笔记——库的安装_第10张图片点击 Source code (zip) 下载得到 eigen-3.2.1.zip 文件,解压zip后执行下列命令:

cd eigen-3.2.1
mkdir build
cd build
cmake..
sudo make install
sudo cp -r /usr/local/include/eigen3 /usr/include 
pkg-config --modversion eigen3

请添加图片描述
安装成功!

6.3 Eigen3.3.4的安装

Eigen官网

sudo apt-get install libeigen3-dev

安装成功是这样的:
视觉SLAM十四讲学习笔记——库的安装_第11张图片
查看Eigen的版本

gedit /usr/include/eigen3/Eigen/src/Core/util/Macros.h

视觉SLAM十四讲学习笔记——库的安装_第12张图片#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 4
目前版本是3.3.4

七、 ORB_SLAM2的安装

7.1 ROS基础创建工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src

7.2 ORB_SLAM2的获取与安装

使用 git clone 得到ORB_SLAM2

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

视觉SLAM十四讲学习笔记——库的安装_第13张图片

进入ORB_SLAM2目录,给build.sh文件可执行权限,编译ORB-SLAM2,运行如下命令

cd ORB_SLAM2
chmod +x build.sh
./build.sh

请添加图片描述
结果如下图
视觉SLAM十四讲学习笔记——库的安装_第14张图片
编辑bash文件

sudo  gedit ~/.bashrc

将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加的内容如图所示

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS

视觉SLAM十四讲学习笔记——库的安装_第15张图片

7.3 安装报错与解决办法

安装 ORB_SLAM2时可能会出现一些错误

错误一:usleep

错误关键词:usleep
这个错误是因为.cc文件缺少#include 引起的
请添加图片描述

/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/Viewer.cc:160:17: note: suggested alternative: ‘fseek’
                 usleep(3000);
                 ^~~~~~
                 fseek
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/System.cc: In member function ‘cv::Mat ORB_SLAM2::System::TrackStereo(const cv::Mat&, const cv::Mat&, const double&):
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/System.cc:134:17: error: ‘usleep’ was not declared in this scope
                 usleep(1000);
                 ^~~~~~
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/System.cc:134:17: note: suggested alternative: ‘fseek’
                 usleep(1000);
                 ^~~~~~
                 fseek
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/System.cc: In member function ‘cv::Mat ORB_SLAM2::System::TrackRGBD(const cv::Mat&, const cv::Mat&, const double&):
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/System.cc:185:17: error: ‘usleep’ was not declared in this scope
                 usleep(1000);
                 ^~~~~~
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/System.cc:185:17: note: suggested alternative: ‘fseek’
                 usleep(1000);
                 ^~~~~~
                 fseek
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/Tracking.cc:1512:13: note: suggested alternative: ‘fseek’
             usleep(3000);
             ^~~~~~
             fseek
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/LocalMapping.cc:108:9: error: ‘usleep’ was not declared in this scope
         usleep(3000);
         ^~~~~~
/home/ubuntu/catkin_ws/src/ORB_SLAM2/src/LoopClosing.cc: In member function ‘void ORB_SLAM2::LoopClosing::Run():

我的报错主要有Viewer.ccSystem.ccTracking.ccLocalMapping.ccLoopClosing.cc几个文件
参考1
参考2
需要增加#include 的文件可能还会有:
Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc
Examples/RGB-D/rgbd_tum.cc
Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc
src/LocalMapping.cc
src/LoopClosing.cc
src/System.cc
src/Tracking.cc
src/Viewer.cc
根据实际情况,提示哪个文件usleep有问题,就去加这个头文件

错误二:Eigen版本高

出现这个问题是因为安装的Eigen版本太高,需要降低到3.2.1版本。

In file included from /home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/Thirdparty/g2o/g2o/types/types_six_dof_expmap.h:37:0,
                 from /home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/include/Converter.h:29,
                 from /home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/src/Converter.cc:22:
/home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/Thirdparty/g2o/g2o/types/../core/base_vertex.h:62:74: warning: ‘Eigen::AlignedBit’ is deprecated [-Wdeprecated-declarations]
     typedef Eigen::Map<Matrix<double, D, D>, Matrix<double,D,D>::Flags & AlignedBit ? Aligned : Unaligned >  HessianBlockType;
                                                                          ^~~~~~~~~~
In file included from /usr/local/include/eigen3/Eigen/Core:363:0,
                 from /usr/local/include/eigen3/Eigen/Dense:1,
                 from /home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/include/Converter.h:26,
                 from /home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/src/Converter.cc:22:
/usr/local/include/eigen3/Eigen/src/Core/util/Constants.h:162:37: note: declared here
 EIGEN_DEPRECATED const unsigned int AlignedBit = 0x80;
                                     ^~~~~~~~~~
In file included from /home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/Thirdparty/g2o/g2o/types/types_six_dof_expmap.h:38:0,
                 from /home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/include/Converter.h:29,
                 from /home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/src/Converter.cc:22:
/home/hri/rosbuild_ws/package_dir/ORB_SLAM2_Fusion/Thirdparty/g2o/g2o/types/../core/base_binary_edge.h:59:82: warning: ‘Eigen::AlignedBit’ is deprecated [-Wdeprecated-declarations]
       typedef Eigen::Map<Matrix<double, Di, Dj>, Matrix<double, Di, Dj>::Flags & AlignedBit ? Aligned : Unaligned > HessianBlockType;

卸载原版本Eigen,重装后,重新编译Pangolin, DBoW2, g2o, ORB_SLAM2

切记!!!不要装高版本的Eigen!不然重装Eigen还要重装Pangolin!!血的教训!!

视觉SLAM十四讲学习笔记——库的安装_第16张图片

八、运行单目SLAM实例

8.1 数据及下载

有TUM、KITTI、EuRoC三种数据集,本实验使用TUM数据集,从下载序列并解压缩。
视觉SLAM十四讲学习笔记——库的安装_第17张图片
数据及存放位置

(base) ubuntu@ubuntu:~/catkin_ws/src$ pwd
/home/ubuntu/catkin_ws/src
(base) ubuntu@ubuntu:~/catkin_ws/src$ ls
ORB_SLAM2  rgbd_dataset_freiburg1_xyz
(base) ubuntu@ubuntu:~/catkin_ws/src$ 

视觉SLAM十四讲学习笔记——库的安装_第18张图片

8.2 编译

PATH_TO_SEQUENCE_FOLDER为数据集的存储路径,并将tumx.yaml与下载的数据集对应,比如TUM1.yaml,TUM2.yaml 和TUM3.yaml 分别对应 freiburg1, freiburg2 和 freiburg3
数据集目录/home/ubuntu/catkin_ws/src

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml  /home/ubuntu/catkin_ws/src/rgbd_dataset_freiburg1_xyz

运行结果:
视觉SLAM十四讲学习笔记——库的安装_第19张图片
视觉SLAM十四讲学习笔记——库的安装_第20张图片

参考文献

  1. Ubuntu18.04下 ORB_SLAM2的安装与配置

你可能感兴趣的:(视觉SLAM十四讲理论+实践,计算机视觉)