重做Unbuntu 18.0.43 LTS系统 并为SLAM配置环境


前言

由于学习SLAM过程中,已经把系统整得太乱了,编译代码时出现了各种奇葩的问题,于是决定重装系统。

同时,一并把 VINS Mono Fusion 需要用到的依赖也安装了!


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装列表

1. Ubuntu 18.0.43 LTS

1.0-A 搜狗输入法

sudo apt --fix-broken install
sudo apt install fcitx

左下角 -> Settings -> Region&Language -> Manage Install Languages

选择ibus -> Apply System-Wide,重启!!

重启后,选择右上角键盘->Confiture Current Input Method

找到Sogou Pinyin输入法

1.0-B ibus输入法安装

如果以上操作不能完成目标——那就需要重新安装语言,并重新安装iBUS框架。

sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4
im-config -s ibus
sudo apt-get install ibus-pinyin
sudo ibus-setup

在键盘输入来源(Input  sources)中添加中文拼音输入法

1.1 更换软件源

target 阿里云源: http://mirrors.aliyun.com/ubuntu/

https://wiki.ubuntu.org.cn/%E6%A8%A1%E6%9D%BF:18.04source

获取 Ubuntu 代号

lsb_release -a

修改源文件,更新软件列表和升级 (~30min)

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bcakup
sudo gedit /etc/apt/sources.list
sudo apt update 
sudo apt upgrade

1.2 安装vim、curl等工具

sudo apt install -y vim 
sudo apt install -y curl
sudo apt install -y wget 
sudo apt install -y net-tools

1.3 安装浏览器Chrome、git等

1.3.1 下载chrome-linux,然后

sudo dpkg -i google-chrome-stable_current_amd64.deb 

1.3.2 安装git并配置git

安装git

sudo apt install git

配置本机git的两个重要信息,user.name和user.email,(也可暂时不配置)中终端输入如下命令即可设置:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

然后通过命令 git config --list 查看是否设置成功。

查看home目录下是否有.ssh目录,一般情况是没有的,需要我们敲命令生成这个目录,在终端输入:

ssh-keygen -t rsa -C "[email protected]"

邮箱[email protected]就是刚刚第二步设置的。然后一路按回车,其实就是不设置密码。然后你就会看到home目录下
多了.ssh目录。

进入.ssh目录会看到两个文件 id_rsa 和 id_rsa.pub,id_rsa是私钥,id_rsa.pub是公钥啦。

把 id_rsa.pub 文件中的内容拷贝一下。进入github,进入Settings->SSH and GPG keys->New SSH key,然后在Key那
栏下面将 id_rsa.pub 文件中的内容粘贴进去,最后点击 Add SSH key按钮添加。

注意:如果出现你使用了key,但还是报没有权限的情况下,就要执行下面的操作:

ssh-add ~/.ssh/id_rsa 

然后再次链接git会有如下提示,Are you sure you want to continue connecting (yes/no)? yes就可以正常链接到远程仓库了。

1.4 安装g++ gcc 开发必备编译库

sudo apt install build-essential

sudo apt install flex
sudo apt install bison

安装多版本gcc和g++,并共存

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

sudo apt-get install gcc-5 gcc-5-multilib
sudo apt-get install g++-5 g++-5-multilib
sudo apt-get install gcc-6 gcc-6-multilib
sudo apt-get install g++-6 g++-6-multilib
sudo apt-get install gcc-7 gcc-7-multilib
sudo apt-get install g++-7 g++-7-multilib
sudo apt-get install gcc-10 gcc-10-multilib
sudo apt-get install g++-10 g++-10-multilib
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100

然后,选择gcc和g++版本

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

注意:

    有时候需要配置ubuntu安装的软件,一般安装软件都是使用apt-get install。那么安装完后,软件的安装目录在哪里呢,可执行文件又放在哪里呢。

    A、下载的软件的存放位置:/var/cache/apt/archives 该目录下的文件可以删除。当然用 sudo apt-get clean 命令也可以,这个命令只会删除缓存起来的deb包,不会取消已经更新了的包。

    B、安装后软件的默认位置:/usr/share

    C、可执行文件位置:/usr/bin

    D、配置文件位置:/etc

    E、lib文件位置:/usr/lib

1.5 安装vscode

下载vscode地址,然后安装对应的安装包。

sudo dpkg -i 对应的安装包名

如果出现依赖问题,执行:

sudo apt install -f

然后再次安装vscode

1.6 安装和配置 Python2 和 Python3

1.6.1 安装指定版本的Python2和pip2并验证版本

新增/升级python3

sudo apt install python3.8.6

安装 pip2 和 pip3

sudo apt install python2-pip
pip2 --version
# pip2 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

### 升级pip2
sudo python2 -m pip install --upgrade pip

1.6.3 安装开发工具

# 构建Python模块所需的开发工具,以供Python 2运行:
sudo apt install build-essential python-dev python-setuptools

1.6.2 安装Python 3的pip并验证版本

### 安装pip3

sudo apt install python3-pip
pip3 --version
# pip3 9.0.1 from /usr/lib/python3.6/dist-packages (python 3.6.9)

### 升级pip3

sudo python3 -m pip install --upgrade pip

1.6.4 安装开发工具

# 构建Python模块所需的开发工具,以供Python 3运行:
sudo apt install build-essential python3-dev  python3-setuptools

1.6.5 pip/pip3更换国内源

如果是临时使用,可以使用 pip 时添加参数 -i [url],例如:

pip install -i http://pypi.douban.com/simple/ gevent

如果需要长期使用指定源,则需要修改 ~/.pip/pip.conf,例如:

[global] index-url=https://pypi.tuna.tsinghua.edu.cn/simple

附:国内可用源列表

清华大学         https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云           http://mirrors.aliyun.com/pypi/simple/
中国科技大学      https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban)     http://pypi.douban.com/simple/
中国科学技术大学   http://pypi.mirrors.ustc.edu.cn/simple/

1.6.5 配置 python2 和 python3

# Ubuntu18.04中Python2.7与Python3.6的环境切换, 将系统的默认环境进行修改
# 查看系统的Python环境
python --version

# 查看系统Python的可用环境列表
update-alternatives --list python

# 此处如果显示update-alternatives: error: no alternatives for python
# 则输入(这里的版本号根据自己安装的设定)
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 20
update-alternatives --install /usr/bin/python python /usr/bin/python3.6 30

# 设定Python环境
update-alternatives --config python

# 可以根据自己的需要进行选择,输入前面的编号即可。此时再次查看系统环境
python --version

# 至此,系统的Python环境设置完成。

发现次方法不如 #1.6.5 中使用别名来得有效!

1.6.6 另一种方法配置 Python2 和 Python3 环境

#获取python3 && pip3 路径,设定别名,然后执行source指令
whereis python3
whereis pip3

## 编辑 ~/.bashrc 文件

# edit in ~/.bashrc
sudo gedit ~/.bashrc
# find this line "#some more ls aliases"
# add user-defined aliases
alias python='/usr/bin/python3'
alias pip='/usr/bin/pip3'
## Add an "alert" alias for long running commands.  Use like so:
## sleep 10; alert
## edit offsource ~/.bashrc

1.6.7 安装numpy、scipy、matplotlib

为 Python2 安装

sudo python2 -m pip install numpy
sudo python2 -m pip install scipy
sudo python2 -m pip install matplotlib

为 Python3 安装

sudo python3 -m pip install numpy
sudo python3 -m pip install scipy
sudo python3 -m pip install matplotlib

1.6.8 为Python安装OpenCV

sudo apt install python3-opencv
sudo apt install python2-opencv
## 或者
sudo python2 -m pip install opencv-python==3.4.9.31
sudo python3 -m pip install opencv-python==3.4.9.31

或者在安装后通过下面的命令进行升级

sudo python2 -m pip install upgrade opencv-python==3.4.9.31
sudo python3 -m pip install upgrade opencv-python==3.4.9.31

2. 安装SLAM配置依赖

2.1 安装cmake、OpenGL及其他依赖

2.1.1 安装 cmake, cmake-gui

sudo apt-get install cmake cmake-gui

查看cmake和make的版本。

cmake -version
>>3.10.2

make -v
>>GUN make 4.1

版本有些低,更新需要更新一下。

cd ~/Downloads
### wget https://cmake.org/files/v3.15/cmake-3.15.2-Linux-x86_64.tar.gz
wget https://cmake.org/files/v3.18/cmake-3.18.4.tar.gz
### 或者
wget https://cmake.org/files/v3.18/cmake-3.18.4-Linux-x86_64.tar.gz
tar -xvf cmake-3.18.4-Linux-x86_64.tar.gz

cd cmake-3.18.4-Linux-x86_64
### 复制文件
sudo cp -r ./ /usr/local/cmake-3.18

配置环境变量。打开.bashrc文件进行配置。

vim ~/.bashrc

## 在 ~/.bashrc 末尾添加如下的内容
PATH=$PATH:/usr/local/cmake-3.18/bin
export PATH

接着在终端source一下.bashrc文件

source ~/.bashrc

# 安装完毕之后,进行测试:
cmake --version

其他未尽操作,可以参见链接:https://blog.csdn.net/l1216766050/article/details/77513045

或者从源码安装。

wget https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4.tar.gz

./configure
make
sudo make install

2.1.2 安装Eigen3

从官网下载,推荐3.1以上版本。解压出来进行安装。或者

git clone https://gitlab.com/libeigen/eigen.git Eigen
cd Eigen
mkdir build
cd build
cmake ..
make
sudo make install

几点注意

# 头文件目录,这个库很特殊,只有头文件
/usr/local/include/eigen3/Eigen/
# cmake文件目录,会自动搜索的
/usr/local/share/eigen3/cmake/

如果安装在了 /usr/local/eigen-3.3.9/上,需要做以下工作

sudo ln -sf /usr/local/eigen-3.3.9/include/eigen3 /usr/local/include/eigen3
sudo ln -sf /usr/local/eigen-3.3.9/share/eigen3 /usr/local/share/eigen3
sudo ln -sf /usr/local/eigen-3.3.9/share/pkgconf/eigen3.pc /usr/local/share/pkgconf/eigen3.pc

Cmake工程指定依赖库的搜索路径,比如系统中有两个opencv版本,分别安装在不同路径下

比如,一个在 /usr/local下,另外一个在/home下,两个版本不同

那么如何使你的Cmake工程,使用指定opencv版本呢

Ubuntu下Cmake工程指定依赖库的搜索路径方案

在CMakeLists.txt中这么写

set(xxx_DIR "xxxConfig.cmake文件所在的路径")

举例:如果我想使用安装在某路径下的opencv时

  1. 找到你想使用的opencv版本
  2. 找到包含OpenCVConfig.cmake文件的路径
  3. 在CMakeLists下这么写
    set(OpenCV_DIR "OpenCVConfig.cmake文件所在的路径")
    find_package(OpenCV REQUIRED)
    message("Found OpenCV in: ${OpenCV_INCLUDE_DIR}")
    

这样你使用的就是指定版本的opencv了

2.1.3 安装OpenGL依赖库

sudo apt-get install build-essential libgl1-mesa-dev
sudo apt-get install freeglut3-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev

安装完成后,参照《Ubuntu 16.04 OpenGL 开发环境配置指南》撰写一段测试程序,并编译运行。

cc test.c -o test -lGL -lglut
./test

如果能正确看到一个灰色的球体,证明配置成功。

2.1.4 其他依赖库

## GLEW:
sudo apt-get install libglew-dev

## Boost:
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev

## Python2/Python3:
sudo apt-get install libpython2.7-dev

## 编译基础库
sudo apt-get install build-essential

## google-glog + gflags
sudo apt-get install libgoogle-glog-dev

## lapack
sudo apt install libblas-dev liblapack-dev
sudo apt install libatlas-base-dev libatlas-base-dev:i386

# 点云库PCL
sudo apt install libpcl-dev pcl-tools

## SuiteSparse和CXSparse(可选)
# - 如果要将Ceres构建为* static *库(默认),您可以添加:
sudo apt install libsuitesparse-dev

# - 但是,如果要将Ceres构建为* shared *库,则必须添加以下PPA:
sudo add-apt-repository ppa:bzindovic/suitesparse-bugfix-1319687
sudo apt update
sudo apt install libsuitesparse-dev

## 安装gtk2.0工具包和基础库
sudo apt install libgtk2.0-dev pkg-config
sudo apt install libcanberra-gtk-module

## 安装 ffmpeg ### (慎重)
# sudo apt install ffmpeg  ## 可能会与 Pangolin 冲突

2.1.5 安装SOPHUS库

这个是李代数库。

git clone http://github.com/strasdat/Sophus.git Sophus ## 下载 李代数库
cd Sophus
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE ..
make -j4
sudo make install

安装完后的目录与eigen差不多,默认安装在 /usr/local/include/sophus。

-- Install configuration: "Release"
-- Installing: /usr/local/share/sophus/cmake/SophusTargets.cmake
-- Installing: /usr/local/share/sophus/cmake/SophusConfig.cmake
-- Installing: /usr/local/share/sophus/cmake/SophusConfigVersion.cmake
-- Installing: /usr/local/include/sophus/average.hpp

2.1.6 安装Pangolin

首先安装依赖库。

sudo apt install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev

然后下载并编译、安装Pangolin。

git clone https://github.com/stevenlovegrove/Pangolin.git ## 下载 Pangolin 库
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOST=1 \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/Pangolin ..
make -j4     ### make (根据CPU配置线程数量)
sudo make install ### (.h默认安装到/usr/local/include)

2.1.7 安装LAPACK(可选)

安装gfortran

sudo apt-get install gfortran

下载LAPACK, version 3.9.0

cd ~/Downloads
wget https://codeload.github.com/Reference-LAPACK/lapack/tar.gz/v3.9.0 ## 下载
tar -xvf  lapack-3.9.0.tar.gz ## 解压

cd lapack-3.9.0/
mkdir Release
cd Release

cp make.inc.example make.inc

cmake -D CMAKE_BUILD_TYPE=Release \
      -D CMAKE_INSTALL_PREFIX=/usr/local/lapack-3.9.0 \
      ..
make -j4
sudo make install

编辑与编译 

编辑Makefile 文件内容,把

lib: lapacklib tmglib
#lib: blaslib variants lapacklib tmglib

改为:

#lib: lapacklib tmglib
lib: blaslib variants lapacklib tmglib

然后编译。

sudo make -j4

如果出现提示错误:

Makefile:463: recipe for target 'znep.out' failed

那么,尝试如下操作。如果还没有解决,请移步到 这里。编辑 make.inc 中的 CFLAGS = -03 为

 CFLAGS    = -O3 -I$(TOPDIR)/INCLUDE -fno-stack-protector

然后再重新编译。

ulimit -s unlimited
make clean
make -j4

测试

编写代码文件test.c 如下。

#include 
#include 
 
int main (int argc, const char * argv[])
{
   double a[5*3] = {1,2,3,4,5,1,3,5,2,4,1,4,2,5,3};
   double b[5*2] = {-10,12,14,16,18,-3,14,12,16,16};
   lapack_int info,m,n,lda,ldb,nrhs;
   int i,j;
 
   m = 5;
   n = 3;
   nrhs = 2;
   lda = 5;
   ldb = 5;
 
   info = LAPACKE_dgels(LAPACK_COL_MAJOR,'N',m,n,nrhs,a,lda,b,ldb);
 
   for(i=0;i

将上诉代码保存为test.c,编译时,别忘了使用gfortran,此外,还需要连接用到的库,编译上面的代码,应使用如下命令:

gfortran test.c -llapacke -llapack -lrefblas

2.1.8 安装Ceres

首先是安装依赖库。

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev

可能需要增加 一个源到 /etc/apt/sources.list

deb http://cz.archive.ubuntu.com/ubuntu trusty main universe

然后是git,编译安装

git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build
cd build
cmake ..
make -j4
sudo make install

2.19 安装G2O

在ubuntu18.04安装g2o默认安装 qt5。首先,安装依赖项。

sudo apt install libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev

所需要的依赖项在下载的源码中 README.md 文件中有写。

依旧是git,编译安装。

git clone https://github.com/RainerKuemmerle/g2o
cd g2o
mkdir build
cd build

cmake ..

make -j4
sudo make install

2.1.10 DBoW3

在~/Downloads下git,编译安装。
git clone https://github.com/rmsalinas/DBow3.git
cd DBow3
mkdir build
cd build

cmake ..

make
sudo make install

2.4 安装OpenCV

2.4.1 安装相关依赖

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev
libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev 
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

如果出现 "Unable to locate package libjasper-dev" 的问题,可按以下方法解决:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

如果仍然报错,继续下述操作即可。

sudo apt update
sudo apt upgrade
sudo apt install libjasper1 libjasper-dev

2.4.2 安装其他工具包

## 安装常用图像工具包
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev  ## 安装常用图像工具包
## 安装视频I/O包
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev ## 安装视频I/O包
## 安装gtk2.0
sudo apt install libgtk2.0-dev ## 安装gtk2.0
## 安装优化函数包
sudo apt-get install libatlas-base-dev gfortran ## 安装优化函数包
## 安装gtk2.0工具包
sudo apt install libgtk2.0-dev pkg-config

2.4.3 使用apt安装python-numpy

sudo apt install python2-numpy
## 或者
sudo apt install python3-numpy

2.4.4 BLAS and LAPACK库

sudo apt install libblas-dev
sudo apt install liblapack-dev

2.4.5 下载并安装OpenCV

从官网下载OpenCV,选择对应的版本,本自例子下载的是opencv-3.4.9。进入OpenCV文件夹,打开终端:

cd //OpenCV-3.4.9
mkdir release
cd release

cmake -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-3.4.9 \
    -D OPENCV_EXTRA_MODULES_PATH=//OpenCV-3.4.9/opencv_contrib/modules\
    -D OPENCV_GENERATE_PKGCONFIG=YES \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=ON \
    -D BUILD_EXAMPLES=ON \
    -D BUILD_TESTS=ON \
    -D BUILD_PERF_TESTS=ON \
    -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
    -D WITH_CUDA=OFF \
    -D BUILD_DOCS=OFF \
    -D OPENCV_ENABLE_NONFREE=OFF \
    ../opencv-3.4.9

//编译安装
make -j4
sudo make install

其中,记得替换成OpenCV源代码所在的路径,并将第三方贡献包放置在该文件夹下。编译过程很慢,耐心等待吧。sudo make install 执行完毕后OpenCV编译过程就结束了。

中间可能提示缺失文件:

IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz
xfeatures2d/boostdesc: Download: boostdesc_bgm.i
xfeatures2d/boostdesc: Download: boostdesc_bgm_bi.i
xfeatures2d/boostdesc: Download: boostdesc_bgm_hd.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_064.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_128.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_256.i
xfeatures2d/boostdesc: Download: boostdesc_lbgm.i
xfeatures2d/vgg: Download: vgg_generated_48.i
xfeatures2d/vgg: Download: vgg_generated_64.i
xfeatures2d/vgg: Download: vgg_generated_80.i
xfeatures2d/vgg: Download: vgg_generated_120.i
data: Download: face_landmark_model.dat

单独下载上述文件到 \Downloads\OpenCV-3.4.9\xfeatures2d_and_ippicv\ 中,然后

a) 修改\Downloads\OpenCV-3.4.9\opencv\3rdparty\ippicv\ippicv.cmake文件,把 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" 替换为 "file:///home//Downloads/OpenCV-3.4.9/xfeatures2d_and_ippicv/"

b) 修改~/Downloads/OpenCV-3.4.9/opencv_contrib/modules/xfeatures2d/cmake/download_boostdesc.cmake文件,把 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${OPENCV_3RDPARTY_COMMIT}/" 替换为 "file:///home//Downloads/OpenCV-3.4.9/xfeatures2d_and_ippicv/"

c) 修改~/Downloads/OpenCV-3.4.9/opencv_contrib/modules/xfeatures2d/cmake/download_vgg.cmake文件,把 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${OPENCV_3RDPARTY_COMMIT}/" 替换为 "file:///home//Downloads/OpenCV-3.4.9/xfeatures2d_and_ippicv/"

 d) 修改 ~/Downloads/OpenCV-3.4.9/opencv_contrib/modules/face/CMakeLists.txt 文件,把 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/" 替换为 "file:///home//Downloads/OpenCV-3.4.9/xfeatures2d_and_ippicv/" 

2.4.6 为OpenCV配置conf

接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到。

sudo gedit /etc/ld.so.conf.d/opencv.conf

在文件末尾添加

/usr/local/opencv-3.4.9/lib

或者

# 在文件 /etc/ld.so.conf.d/opencv.conf 末尾增加
# /usr/local/opencv-3.4.6/lib
sudo sh -c 'echo "/usr/local/opencv-3.4.6/lib" > /etc/ld.so.conf.d/opencv.conf'

执行如下命令使得刚才的配置路径生效

sudo ldconfig
sudo apt update # 可选

2.4.7 为OpenCV配置bash

sudo gedit /etc/bash.bashrc

在最末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv-3.4.9/lib/pkgconfig
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv-3.4.9/lib
export LD_LIBRARY_PATH
export PKG_CONFIG_PATH

保存,执行如下命令使得配置生效

source /etc/bash.bashrc 

更新

sudo updatedb 

查看系统当前的opencv版本:

pkg-config --modversion opencv

2.4.8 测试OpenCV

OpenCV安装好了之后,进行测试一下。

找到 安装的文件夹 /opencv-3.4.9,cd 到 /opencv-3.4.9/samples/cpp/example_cmake 的目录下。可以看到这个目录里官方已经给出了一个cmake的example,可以拿来测试下。

mkdir build
cd build
cmake ..
make
./opencv_example  ### ctrl+c 退出视频窗口

详尽安装可参考该文章或者这篇文章。

也可以自己编写C++代码文件 DisplayImage.cpp 进行测试,具体操作可参考这篇文章

2.4.9 测试可能碰到的问题

/opencv-3.4.9/samples/cpp/example_cmake目录下,可能出现如下问题。

CMake Error at CMakeLists.txt:1 (ocv_install_example_src):
  Unknown CMake command "ocv_install_example_src".

确保example_cmake目录下只有以下的文件

├── build
├── CMakeLists.txt
├── example.cpp
├── Makefile
└── temp.so.txt

重新编译即可。

如果碰到编译通过,但是在运行的时候提示:

Built with OpenCV 3.4.9
Capture is opened
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(3.4.9) /home/npuyin/Downloads/OpenCV-3.4.9/opencv-3.4.9/modules/highgui/src/window.cpp:658: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

Aborted (core dumped)

简单的解释就是你的GTK+2.x应该要先于OpenCV安装。所以,重新编译安装一次OpenCV吧!

2.5 为python添加OpenCV接口

2.5.1 添加接口

这里建立软链接

sudo ln -s /usr/local/opencv-3.4.9/lib/python2.7/dist-packages/cv2.so /usr/local/lib/python2.7/dist-packages
sudo ln -s /usr/local/opencv-3.4.9/lib/python3.6/dist-packages/cv2.cpython-36m-x86_64-linux-gnu.so /usr/local/lib/python3.6/dist-packages

2.5.2 更改python中OpenCV的版本

python中使用的opencv版本被系统变量PYTHONPATH控制着。如果要使用opencv3.4.9的版本,用vim或gedit打开~/.bashrc文件,重新设定该变量即可。

export PYTHONPATH=$PYTHONPATH:/usr/local/opencv3.4.9/lib/python2.7/dist-packages:/usr/local/opencv3.4.9/lib/python3.6/dist-packages

如果仍然无法达到目的,则从自定义安装的 /usr/local/opencv-3.4.9/lib/python2.7/dist-packages 路径下,复制cv2.so文件到相应路径下的 /usr/local/lib/python2.7/dist-packages 文件夹中。

sudo cp 

为什么cv2.so文件cp到 /usr/local/lib/python2.7/dist-packages 即可?可能的原因是cv2.so这个模块里面应该有指明了我们自定义安装opencv3.4.9的安装路径,这样就可以找到libopencv等其他文件。

按照如下操作测试安装是否成功。       

3 使用数据集(Monocular Examples)测试ORB_SLAM2

参考链接:https://www.cnblogs.com/shuimuqingyang/p/10375458.html

3.1 下载ORB_SLAM2

ORB SLAM2 所需的文件集。链接:https://pan.baidu.com/s/1HgcIf8sjOOI4eSNUgFU7_A,提取码:csdn

可能需要以下操作:

a) 清空原文件中的 catkin_ws 目录下 build 和 devel 文件夹。

b) 清空 catkin_ws/src/build 文件夹。

c) 清空其他 build 文件夹

或者 到github上下载 ORB_SLAM2:

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

3.2 下载数据集(TUM Monocular Datasets)

百度网盘。链接:https://pan.baidu.com/s/172KZNUYf37GmTBCe74xXeQ,提取码:j7ey

数据集原链接: http://vision.in.tum.de/data/datasets/rgbd-dataset/download

3.3 编译与测试ORB_SLAM2

3.3.1 编译:

cd ORB_SLAM2
chmod +x build.sh

3.3.2 修改最后一行

改make -j为make -j4,然后 通过脚本 build.sh 完成编译。注意:还需要清除 Thirdparty 下 DBoW2 和 g2o 的 build 文件夹。

./build.sh

3.3.3 执行命令:

  执行下面的语句. 更改 TUMX.yaml 为 TUM1.yaml,TUM2.yaml 或 TUM3.yaml 以分别启动对应的 freiburg1, freiburg2 和 freiburg3 序列. 更改 PATH_TO_SEQUENCE_FOLDER 为解压后的图片序列文件夹。如果没有图像,可能还需要安装 rviz。

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml PATH_TO_SEQUENCE_FOLDER
sudo apt install rviz  ## 安装 rviz
  1. 参考链接:https://vision.in.tum.de/data/datasets/rgbd-dataset/tools
  2. 参考链接:https://blog.csdn.net/sinat_38343378/article/details/78114468
  3. 参考链接:http://www.360doc.com/content/18/0419/19/54525756_747087852.shtml
  4. 参考链接:https://blog.csdn.net/fk1174/article/details/51800728

3.3.4 查看与关闭进程

ps –aux     //查看进程号
ps –aux | more //全部查看
ps –ef | grep mysql //查看mysql的进程
kill -9 3306 //强制杀掉进程号3306

4 安装ROS Melodic

4.1 Ubuntu18.04下安装ROS

4.1.1 设置sources.list

将电脑设置为接受来自packages.ros.org的软件,但是可能会出现无法定位软件包的错误。

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

所以,推荐使用国内的镜像。

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

4.1.2 设置密钥

使用如下语句:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

sudo apt-get update

如果有问题,则把hkp://keyserver.ubuntu.com:80 替换为

hkp://ha.pool.sks-keyservers.net:80   或   hkp://pgp.mit.edu:80

执行sudo apt-get update 后可能还会有提示:

W: GPG error: http://mirrors.ustc.edu.cn/ros/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654
E: The repository 'http://mirrors.ustc.edu.cn/ros/ubuntu bionic InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

解决办法:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
sudo apt-get update

其中,--recv-keys F42ED6FBAB17C654 就是后面这串签名换成报错的签名。
然后再次执行更新命令 。

4.1.3(推荐)更改源地址

首先 /etc 目录下打开终端,输入以下命令以更改hosts文件权限。

cd /etc
sudo chmod a+rw hosts  // 或者
sudo gedit /etc/hosts

打开hosts文件,在末尾添加以下内容,并保存退出。如果在进行 rosdep update 的时候有错误,则把 151.101.84.133还原(注释掉)重新执行 rosdep update 即可。

151.101.84.133  raw.githubusercontent.com //更换源地址

4.1.4(推荐)安装完整桌面:

ROS,rqt,rviz,机器人通用库,2D / 3D模拟器,导航和2D / 3D感知(大约1.56GB)。或者根据https://blog.csdn.net/zhangrelay/article/details/80241758 进行配置。

sudo apt-get update
sudo apt-get install ros-melodic-desktop-full
sudo apt-get install ros-melodic-rqt*
sudo apt install rospack-tools

4.2 初始化并更新rosdep

初始化和更新rosdep能够轻松地安装要编译的源代码的系统依赖关系,并且需要在ROS中运行一些核心组件。

sudo rosdep init
rosdep update

 后面的步骤我完全按照https://blog.csdn.net/zhangrelay/article/details/80241758 做的十分顺畅没有出现前面的我自己存在的问题,可以继续参考这个进行对安装的完善和验证就结束了。

如果初始化失败:

需要更改Python的默认环境为Python2,另外还可以参考《ROS初始化 sudo rosdep init失败》。

sudo rosdep init
rosdep update

初始化 sudo rosdep init 时显示下面的错误,则按照 4.1.3 方法替换源地址。

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.

恢复源地址

首先 /etc 目录下打开终端,输入以下命令以更改hosts文件权限。

cd /etc
sudo chmod a+rw hosts  // 或者
sudo gedit /etc/hosts

打开hosts文件,把末尾添加的以下内容注释,并保存退出。

# 151.101.84.133  raw.githubusercontent.com ### 更换源地址

然后,继续更新 rosdep 。

$ sudo rosdep update
updated cache in /home//.ros/rosdep/sources.cache

ROS一般使用Python2环境执行任务,如果使用Python3环境则可能需要参照《ROS中使用Python3的注意事项》使用。

4.3 添加ros环境变量

在文件 ~/.bashrc 的末尾添加路径 source /opt/ros/melodic/setup.bash

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

注意:如果安装了多个ROS分发,则~/ .bashrc必须仅为当前使用的版本提供setup.bash。

4.4 安装ros常用的命令行工具

rosinstall是一种常用的命令行工具,建议安装。

sudo apt install python-rosinstall python-rosinstall-generator 
sudo apt install python-wstool build-essential
sudo apt install python-catkin-pkg
sudo apt install python-roslib
sudo apt install python-roslaunch

如果是运行在Python3环境,则需要注意安装时使用 sudo apt install python3-*。

sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt-get install ros-melodic-cv-bridge ros-melodic-tf ros-melodic-message-filters ros-melodic-image-transport

4.5 小海龟例子

注意:系统默然的 python 版本须为 python2,否则会提示错误。(可能是根据实际安装时的python版本而定)

在第一个终端(1st Terminal)

roscore

在第二个终端(2nd Terminal)

rosrun turtlesim turtlesim_node

在第三个终端(3rd Terminal)进行控制

rosrun turtlesim turtle_teleop_key

最终,在第三个终端里可以通过键盘控制上下左右,这样小海龟就能运动了。

4.2 Ubuntu18.04安装ROS 常见问题 踩坑集

https://blog.csdn.net/weixin_44436677/article/details/105083624

4.3 Ubuntu18.04+DSO+ROS(catkin)配置问题贴

https://blog.csdn.net/sinat_42674663/article/details/103786541

5 安装usb_cam驱动

5.1 构建 catkin_ws 文件夹

先按下面的结构构建 catkin_ws 文件结构树。

~/catkin_ws
├── build
├── devel
└── src
    ├── ORB_SLAM2
    ├── rgbd_dataset_freiburg1_360
    └── usb_cam

然后在 catkin_ws  目录下,执行命令 catkin_make。

cd ~/catkin_ws
catkin_make # 可暂时不执行

5.2 安装usb_cam

mkdir catkin_ws/src
cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam usb_cam
cd usb_cam
mkdir build 
cd build 
cmake -D CMAKE_BUILD_TYPE=Release ..
# cmake .. 
make -j4
echo "source /home//catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

5.3 选择摄像头

在目录 catkin_ws/src/usb_cam/launch 下,更改 usb_cam-test.launch 文件夹里的   摄像头序号

重做Unbuntu 18.0.43 LTS系统 并为SLAM配置环境_第1张图片

5.4 接收摄像头消息

5.4.1 将之前编译的SLAM里的文件夹拷贝到 catkin_ws/src 下。

重做Unbuntu 18.0.43 LTS系统 并为SLAM配置环境_第2张图片

5.4.2 将 需要运行的 窗口 改为 摄像头的  窗口。即:用 /usb_cam/image_raw 替换掉 /camera/image_raw。

重做Unbuntu 18.0.43 LTS系统 并为SLAM配置环境_第3张图片

5.4.3 在 ~/.bashrc 末尾添加以下路径:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home//catkin_ws/src/ORB_SLAM2/Examples/ROS
source ~/.bashrc     //之后  source以下

5.4.4 重新编译ORB_SLAM2,  在ORB_SLAM2  目录下执行:

chmod +x build_ros.sh
./build_ros.sh

5.5 遇到的问题

5.5.1 问题1 - OpenCV版本冲突问题

由于ROS melodic使用的是opencv-3.2,而本系统安装的是opencv-3.4.9,因此可能出现下面的冲突提示。

/usr/bin/ld: warning: libopencv_imgproc.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.3.4
/usr/bin/ld: warning: libopencv_core.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4

解决办法

这些 warning 是由于这些库默认找的opencv和我安装的不是同一个,所以需要手动改CMakeLists来编译。

cv_bridge会使用自定义版本的opecv,一般会出现与我们所使用的opencv版本不一致,就会出现冲突问题。

/opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake 会对其所使用的opencv版本进行设置。

set(libraries "cv_bridge;
/usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2.0;
/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2.0;
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0")

另外,/opt/ros/melodic/lib/pkgconfig/cv_bridge.pc 也会对其所使用的opencv的动态链接库文件版本进行设置。

Name: cv_bridge
Description: Description of cv_bridge
Version: 1.13.0
Cflags: -I${prefix}/include -I/usr/include -I/usr/include/opencv
Libs: -L${prefix}/lib -lcv_bridge /usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2.0 /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2.0 /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0

 

如果我们自己的模块中依赖了cv_bridge,就会将cv_bridge配置的opencv版本加入到我们的编译环境中来。
如果我们在自己的CMakeLists.txt中设置了自定义的opencv版本和环境,将会产生冲突。

会按照cv_bridge所使用的opencv版本来进行链接,然而cv_bridge的opencv版本配置一般不全面,很多库文件没有添加,就会出现命名设置了opencv环境,但还是找不到库文件的情况。
解决办法有两个:

首先,找到 /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake 和 cv_bridge-extras.cmake;然后按下图修改 opencv 的路径。(94-96,118行)

  • (1)将cv_bridge使用opencv版本切换为自己工程所使用的版本。

Name: cv_bridge
Description: Description of cv_bridge
Version: 1.13.0
Cflags: -I${prefix}/include -I/usr/local/opencv-3.4.9/include -I/usr/local/opencv-3.4.9/include/opencv
Libs: -L${prefix}/lib -lcv_bridge /usr/local/opencv-3.4.9/lib/libopencv_core.so.3.4.9 /usr/local/opencv-3.4.9/lib/libopencv_imgproc.so.3.4.9 /usr/local/opencv-3.4.9/lib/libopencv_imgcodecs.so.3.4.9
  • (2)或将自己工程所使用的opencv版本切换为cv_bridge使用的版本。

  • 删除 catkin_ws 目录下除 src 外的文件夹;删除 src/ORB_SLAM2/build 文件夹;删除 src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/build 文件夹;

5.5.2 问题2 - *.so 找不到链接目录

修改完成后重新编译,出现如下错误:

[ 88%] Linking CXX executable ../Stereo
/usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/Stereo.dir/build.make:230: recipe for target '../Stereo' failed
make[2]: *** [../Stereo] Error 1
CMakeFiles/Makefile2:206: recipe for target 'CMakeFiles/Stereo.dir/all' failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: warning: libopencv_imgproc.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.3.4
/usr/bin/ld: warning: libopencv_core.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4
[ 88%] Built target MonoAR
[100%] Linking CXX executable ../RGBD
/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/RGBD.dir/build.make:230: recipe for target '../RGBD' failed
make[2]: *** [../RGBD] Error 1
CMakeFiles/Makefile2:179: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
Makefile:148: recipe for target 'all' failed
make: *** [all] Error 2

根据这篇文章的分析,出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录。

解决方案:

locate boost_system # 查找到目录

/snap/code/47/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
/usr/lib/x86_64-linux-gnu/libboost_system.a
/usr/lib/x86_64-linux-gnu/libboost_system.so
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.65.1

然后继续

locate boost_filesystem # 查找到目录

/snap/code/47/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
/usr/lib/x86_64-linux-gnu/libboost_filesystem.a
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.65.1

 

将 libboost_system.so 与 libboost_filesystem.so 复制到 ORB_SLAM2/lib 下,并且将 ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中加入库目录,具体为 
在下面的信息之后

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS} 
${Pangolin_LIBRARIES} 
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so 
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so 
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so 

加入

${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so 
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so 

问题得以解决。

 

6 测试运行ROS实例

首先启动ROS,再打开usb_cam ,最后在 catkin_ws/src 打开终端。

具体命令运行如下:

roscore        # 第一个终端(1st Terminal),启动 ROS
roslaunch usb_cam usb_cam-test.launch   # 第二个终端(2nd Terminal):启动 usb_cam 摄像头
cd ~/home/npuyin/catkin_ws/src/ORB_SLAM2/catkin_ws/src/ORB_SLAM2
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml # 第三个终端(3rd Terminal):在  catkin_ws/src/ORB_SLAM2   目录下  运行ROS实例

 

如果出现在ubuntu系统中报错内容如下:

error while loading shared libraries: libboost_system.so.1.58.0: cannot open shared object file: No such file or directory

在 ~/.bashrc 中添加 LD_LIBRARY_PATH 路径。

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/npuyin/catkin_ws/src/ORB_SLAM2/lib


总结

花了近三天的时间,终于把Ubuntu-18.0.43下的ORB_SLAM2给调通了,成就感满满!最后的测试时,发现可能是因为电脑的配置太低,姿态稍微变化稍微快一点,SLAM的轨迹跟踪就会跟丢!

看来,降低计算量、提升响应速度是SLAM面临的一个很大的痛点。

你可能感兴趣的:(环境配置,VSLAM)