《视觉SLAM 十四讲:从理论到实践》第二版,Ubuntu20.04系统中视觉SLAM各种库的安装_ubuntu 视觉slam_Eternally_陪伴的博客-程序员秘密

技术标签: 计算机视觉  

Ubuntu20.04系统中视觉SLAM各种库的安装

——《视觉SLAM十四讲:从理论到实践》第二版

对于某些cmake工程,使用cmake-make方式进行编译安装,先建立build文件夹,再使用 cmake .. 对安装包进行分析,当找不到合适的安装教程类帮助时,可以根据分析的结果,看看缺少那些依赖,就装哪些,一直到没有缺少,或根据需要安装相应依赖,可能有些依赖库是非必要的,注意cmake时有的可能需要设置某些参数或root权限,接着make编译与make install安装。

mkdir build -> cd build -> cmake .. -> make -> sudo make install

CMake 指定安装目录,

方法一:使用 CMAKE_INSTALL_PREFIX 来指定 cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..

方法二:修改cmake文件,加入:SET(CMAKE_INSTALL_PREFIX < install_path >)  ,要加在 PROJECT(< project_name>)

1.Eigen3安装

Ubuntu20.04系统中,直接在终端输入以下命令即可安装Eigen最新版本(模板类Sophus要求Eigen3.3以上,笔者使用该命令安装的Eigen的版本是3.3.7-2,其它Ubuntu版本的系统,也可参考博客:视觉SLAM学习中各种库安装,通过在Eigen官网下载源码,使用cmake安装Eigen最新版。

sudo apt-get install libeigen3-dev

2.Sophus安装

Sophus,李代数库,由Strasdat维护,可通过以下命令从Github获取源码,默认是模板类,可直接通过cmake方式进行安装。

git clone http://github.com/strasdat/Sophus
cd Sophus
mkdir build
cd build
cmake ..
make
suod make install

在《视觉SLAM十四讲:从理论到实践》第一版中,使用的是非模板类Sophus,需在Sophus目录下使用以下命令回到非模板类Sophus的版本,再通过cmake方式安装。

git checkout a621ff

3.OpenCV3

OpenCV中文官方文档

首先在终端运行以下命令,安装OpenCV库的依赖项。其中前两条命令用于添加编码工具jasper( libjasper-dev)的软件源。

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"

sudo apt update

sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev  libgphoto2-dev libopenblas-base libopenblas-dev doxygen  openjdk-8-jdk pylint libvtk6-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libopenexr-dev 

然后从官网Github下载OpenCV3系列安装包编译安装,(在Github下载对应版本的opencv_contrib扩展模块,笔者在Github上下载的opencv3.4.11和对应版本的opencv_contrib),分别进行解压,注意需要将opencv_contrib-3.4.11移动到opencv-3.4.11文件夹,在终端打开opencv-3.4.11q文件夹,通过cmake方式安装OpenCV。其中cmake命令的OPENCV_EXTRA_MODULES_PATH参数是opencv_contrib扩展模块的modules目录。

mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3 -D OPENCV_EXTRA_MODULES_PATH=/home/xvshilin/opencv-3.4.11/opencv_contrib-3.4.11/modules/ ..
sudo make -j4
sudo make install


sudo gedit ~/.bashrc

//切换成 opencv3,根据安装路径,在文件末尾加上:
export PKG_CONFIG_PATH=/usr/local/opencv3/lib/pkgconfig  
export LD_LIBRARY_PATH=/usr/local/opencv3/lib

//切换成 opencv2,则在文件末尾加上:
export PKG_CONFIG_PATH=/usr/local/opencv2/lib/pkgconfig  
export LD_LIBRARY_PATH=/usr/local/opencv2/lib

// 也可参考下面 DBoW3 的 CMakeLists.txt 配置,使用cmake语句 set()
set(OpenCV_DIR /usr/local/opencv2/share/OpenCV)
find_package(OpenCV 2.4 REQUIRED)
include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} /usr/local/opencv2/include)

source ~/.bashrc // 使(在当前终端)即使生效

pkg-config –modversion opencv
pkg-config –cflags opencv
pkg-config –libs opencv 

OpenCV2的安装,从官网下载源码,安装依赖项

sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev

建立文件夹/usr/local/opencv2

cmake三连

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2 ..
make
sudo make install

make编译时出现以下错误时,参考这篇博客,由ffmpeg的版本问题引起。在最新版本的ffmpeg中对很多关键字进行了重命名,例如CODEC_FLAG_GLOBAL_HEADER就被重新命名为AV_CODEC_FLAG_GLOBAL_HEADER,因此以老版本ffmpeg开发的opencv无法编译。解决方法,装旧版本的ffmpeg或者修改opencv的源码。

In file included from /home/***/opencv-2.4.13.6/modules/highgui/src/cap_ffmpeg.cpp:45:
/home/***/opencv-2.4.13.6/modules/highgui/src/cap_ffmpeg_impl.hpp: In function ‘AVStream* icv_add_video_stream_FFMPEG(AVFormatContext*, AVCodecID, int, int, int, double, int)’:
/home/***/opencv-2.4.13.6/modules/highgui/src/cap_ffmpeg_impl.hpp:1484:21: error: ‘CODEC_FLAG_GLOBAL_HEADER’ was not declared in this scope; did you mean ‘AV_CODEC_FLAG_GLOBAL_HEADER’?
 1484 |         c->flags |= CODEC_FLAG_GLOBAL_HEADER;
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~
      |                     AV_CODEC_FLAG_GLOBAL_HEADER

解决方法是打开/opencv-2.4.13.6/modules/highgui/src/cap_ffmpeg_impl.hpp,在里最顶端添加

#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020

顺利编译。

4.PCL点云库

https://github.com/PointCloudLibrary/pcl

5.Ceres优化库

Installation — Ceres Solver

源码下载

git clone https://github.com/ceres-solver/ceres-solver

依赖

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

出现无法定位libcxsoarse3.1.2问题的解决方法:

sudo gedit /etc/apt/sources.list

将下面的源加入到sources.list

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

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

之后就是mkdir build -> cd build -> cmake .. -> make -> sudo make install ,安装之前可以使用 make test 进行测试,即

mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/ceres ..
nproc (查看cpu核心数,???)
make 
make test
sudo make install

6.g2o图优化库

sudo apt-get install qt5-qmake libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3.1.2 libcholmod-dev

git clone https://github.com/RainerKuemmerle/g2o.git
cd git
mkdir build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/g2o ..
make
sudo make install

7.DBoW3词袋模型库

词袋模型 DBoW2 DBoW3 FBoW Vocabulary_of_GSLAM

git clone https://github.com/rmsalinas/DBow3.git # 下载源文件
cd DBoW3 # 进入源文件夹
mkdir build
cd build
cmake -DUSE_CONTRIB=ON -DCMAKE_INSTALL_PREFIX=/usr/local/DBow3..
make -j4
sudo make install 			

 使用DBoW3时,CMakeLists.txt的配置,头文件+库文件+链接

set( DBoW3_INCLUDE_DIRS "/usr/local/DBoW3/include" )
set( DBoW3_LIBS "/usr/local/DBoW3/lib/libDBoW3.so" )
target_link_libraries( 可执行文件名 ${DBoW3_LIBS} )

8.Pangolin

 GitHub - stevenlovegrove/Pangolin: Pangolin is a lightweight portable rapid development library for managing OpenGL display / interaction and abstracting video input.

9.GTSAM

安装失败,待定

GTSAM is a library of C++ classes that implement smoothing and mapping (SAM) in robotics and vision, using factor graphs and Bayes networks as the underlying computing paradigm rather than sparse matrices.

GTSAM 是一个在机器人领域和计算机视觉领域用于平滑(smoothing)和建图(mapping)的C++类库。下载地址:GTSAM[Get Started]

官方网站:
[1] Eigen官方主页:http://eigen.tuxfamily.org/index.php?title=Main_Page

[2] Sophus in github:http://github.com/strasdat/Sophus

[3] OpenCV官网:http://opencv.org

[4] PCL官网:http://pointclouds.org

[5] Ceres官网:http://ceres-solver.org

[6] Ceres in github:https://github.com/ceres-solver/ceres-solver

[7] G2O in github:https://github.com/RainerKuemmerle/g2o

[8] GTSAM :​​​​​​​https://gtsam.org/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/EternallyAccompany/article/details/108519850

智能推荐

MySql中 limit 与 limit,offset连用的区别_一只只会拼写java的小菜鸟的博客-程序员秘密

MySql中 limit 与 limit,offset连用的区别① select * from table limit 2,1;//含义是跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据② select * from table limit 2 offset 1;//含义是从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset...

SpringBoot整合sentry_springboot集成sentry_你的小眼睛ii的博客-程序员秘密

https://blog.csdn.net/u010381752/article/details/90295010安装dockeryum install docker安装gityum install git

双摄像头深度剖析 (2):双Camera的生态链_dshow 暗光补偿_pakaco的博客-程序员秘密

1、双Camera算法供应商:由于算法是需要跟ISP配合的,所以算法和ISP是相辅相成的,想把算法做好,也得有好的ISP。做为主平台供应商,高通/联发科都有自己的ISP,所以也自己开发了双Camera算法。至于其算法好坏,还有待市场的检验。而作为Sensor供应商,Sony, Samsung, OV也在积极开发双摄算法,暂时也没有看到量产

ASP.NET/C#实现搜索功能_c#根据关键词搜索信息_小灰灰城堡的博客-程序员秘密

描述:我们现在开发的项目中几乎都会有搜索的这个需求,就像我们平时用的百度,谷歌这些都是满足我们平时的搜索需求的。当然在我们的项目中我们不可能利用百度,谷歌的搜索来实现自己项目中的搜索的,这时我们就需要自己进行开发实现这项功能了。那么怎样实现呢,其实现在现在我们有很多成熟的搜索算法,不必自己去研究,只需要自己修改那些大神写的代码就Ok啦。言归正传,下面介入正题。搜索的功能我是用Lucene.Ne...

多年经验总结,写出最惊艳的 Markdown 高级用法_markdown高级用法_程序员依扬的博客-程序员秘密

点赞再看,养成习惯,微信搜索【高级前端进阶】关注我。本文 GitHub https://github.com/yygmind 已收录,有一线大厂面试完整考点和系列文章,欢迎 Star。最近在学习的时候看到了 Markdown 代码 diff 高亮的效果,感觉挺有意思的。突然发现还有这么一个好玩的用法,然后我就想着整理一波 Markdown 的高级用法,下面是我整理的一些内容,如果还没用过 Markdown 这些技巧,快来试试吧。代码diff如果你做过代码 Code Review,对下面这种效果肯.

Hadoop Shell基本操作_Bee_Darker的博客-程序员秘密

Hadoop Shell的基本操作:1.学习开启、关闭Hadoop2.学习在Hadoop中创建、修改、查看、删除文件夹及文件3.学习改变文件的权限及文件的拥有者4.学习使用shell命令提交job任务5.Hadoop安全模式的进入与退出

随便推点

minio+vue+elementUI,上传文件到服务器,下载到本地,纯VUE版_背砖程序猿的博客-程序员秘密

&lt; template &gt;段&lt;!-- 新增信息template --&gt;&lt;template&gt; &lt;div style="float:left;margin:5px 5px"&gt; &lt;el-button @click="getFileName" type="success"&gt;选择文件&lt;/el-button&gt; &lt;div style="float:left;margin:5px 5px"&gt; &lt;

删除临时文件_skyming的博客-程序员秘密

今天看到的东西,记录下1、可以而且当然要删!最好搜索一下*.temp的文件,然后都删掉!最后编个批处理文件!让他每次开机都删不然你的机子会很慢而且占空间! 批处理文件名字为A.BAT(内容如下): del c:\windows\temp\*.* 再新建一个文本文件名字为b.txt y (文本文档中只有一个Y,再加一个回车)将这两个文件置于C:盘下再添加到启动项目中那每次

【JZOJ4425】【HNOI2016模拟4.4】Fenwit_dance_in_the_dark的博客-程序员秘密

DescriptionData ConstraintSolution这道题很多人用FWT过了,毕竟题目名就这样…… 那我们另辟蹊径,想想矩阵乘法怎么做。 我们要确定F0的任何一项j对于Ft的任何一项k的系数。那么我们发现j转移至k的途中系数只与转移a^b的1的个数有关。所以我们发现这T次转移只是个填1的问题:现在有一个T行m列的矩阵,每一行你要填上若干个1,是的最后j转移至k。那我们发现对于一个

小程序分享功能_辉_辉_辉的博客-程序员秘密

由于只能通过按钮标签来使用open-type="share",如果需要用标签 如:view。我们可以通过取巧的方式来实现此功能,button标签覆盖在原有的基础之上。通过按钮方式分享,注:open-type="share"属性只能通过button按钮使用。函数,小程序右上角三个点中就会出现转发,分享的功能。在methods中 定义。...

ServletConfig类的使用_煎丶包的博客-程序员秘密

ServletConfig 类是Servlet 程序的配置信息类。Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。ServletConfig类的三大作用可以获取 Servlet 程序的别名 servlet-name 的值获取初始化参数 init-param获取 ServletCo

推荐文章

热门文章

相关标签