由于学习SLAM过程中,已经把系统整得太乱了,编译代码时出现了各种奇葩的问题,于是决定重装系统。
同时,一并把 VINS Mono Fusion 需要用到的依赖也安装了!
提示:以下是本篇文章正文内容,下面案例可供参考
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输入法
如果以上操作不能完成目标——那就需要重新安装语言,并重新安装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)中添加中文拼音输入法
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
sudo apt install -y vim
sudo apt install -y curl
sudo apt install -y wget
sudo apt install -y net-tools
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就可以正常链接到远程仓库了。
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
下载vscode地址,然后安装对应的安装包。
sudo dpkg -i 对应的安装包名
如果出现依赖问题,执行:
sudo apt install -f
然后再次安装vscode
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.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版本呢
在CMakeLists.txt中这么写
set(xxx_DIR "xxxConfig.cmake文件所在的路径")
举例:如果我想使用安装在某路径下的opencv时
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.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
sudo apt install python2-numpy
## 或者
sudo apt install python3-numpy
sudo apt install libblas-dev
sudo apt install liblapack-dev
从官网下载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
其中,
中间可能提示缺失文件:
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/
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/
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/
d) 修改 ~/Downloads/OpenCV-3.4.9/opencv_contrib/modules/face/CMakeLists.txt 文件,把 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/" 替换为 "file:///home/
接下来就需要配置一些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 # 可选
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
OpenCV安装好了之后,进行测试一下。
找到 安装的文件夹
mkdir build
cd build
cmake ..
make
./opencv_example ### ctrl+c 退出视频窗口
详尽安装可参考该文章或者这篇文章。
也可以自己编写C++代码文件 DisplayImage.cpp 进行测试,具体操作可参考这篇文章。
2.4.9 测试可能碰到的问题
在
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吧!
这里建立软链接
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
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等其他文件。
按照如下操作测试安装是否成功。
参考链接:https://www.cnblogs.com/shuimuqingyang/p/10375458.html
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
百度网盘。链接:https://pan.baidu.com/s/172KZNUYf37GmTBCe74xXeQ,提取码:j7ey
数据集原链接: http://vision.in.tum.de/data/datasets/rgbd-dataset/download
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
3.3.4 查看与关闭进程
ps –aux //查看进程号
ps –aux | more //全部查看
ps –ef | grep mysql //查看mysql的进程
kill -9 3306 //强制杀掉进程号3306
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
初始化和更新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的注意事项》使用。
在文件 ~/.bashrc 的末尾添加路径 source /opt/ros/melodic/setup.bash
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:如果安装了多个ROS分发,则~/ .bashrc必须仅为当前使用的版本提供setup.bash。
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
注意:系统默然的 python 版本须为 python2,否则会提示错误。(可能是根据实际安装时的python版本而定)
在第一个终端(1st Terminal)
roscore
在第二个终端(2nd Terminal)
rosrun turtlesim turtlesim_node
在第三个终端(3rd Terminal)进行控制
rosrun turtlesim turtle_teleop_key
最终,在第三个终端里可以通过键盘控制上下左右,这样小海龟就能运动了。
https://blog.csdn.net/weixin_44436677/article/details/105083624
https://blog.csdn.net/sinat_42674663/article/details/103786541
先按下面的结构构建 catkin_ws 文件结构树。
~/catkin_ws
├── build
├── devel
└── src
├── ORB_SLAM2
├── rgbd_dataset_freiburg1_360
└── usb_cam
然后在 catkin_ws 目录下,执行命令 catkin_make。
cd ~/catkin_ws
catkin_make # 可暂时不执行
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
在目录 catkin_ws/src/usb_cam/launch 下,更改 usb_cam-test.launch 文件夹里的 摄像头序号。
5.4.1 将之前编译的SLAM里的文件夹拷贝到 catkin_ws/src 下。
5.4.2 将 需要运行的 窗口 改为 摄像头的 窗口。即:用 /usb_cam/image_raw 替换掉 /camera/image_raw。
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.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行)
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
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
问题得以解决。
首先启动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面临的一个很大的痛点。