SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库(1)g2o库的安装

2023-12-21 16:29:06

SLAM算法与工程实践系列文章

下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此

SLAM算法与工程实践系列文章链接


下面是专栏地址:

SLAM算法与工程实践系列专栏



前言

这个系列的文章是分享SLAM相关技术算法的学习和工程实践


SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库

g2o 安装

安装参考:

ubuntu18.04 安装ceres,g2o,以及cmake升级

g2o官网:https://openslam-org.github.io/g2o.html

github主页:https://github.com/RainerKuemmerle/g2o

源码下载

这里不用下最新版本的,因为可能会有一些BUG,安装老版本的即可,如我这里安装的是 g2o-20201223_git 版本

安装依赖

(1)必需依赖

On Ubuntu / Debian these dependencies are resolved by installing the following packages.

  • cmake
  • libeigen3-dev(已有eigen库就不用再安装了)

在装g2o的时候,对 cmake 的版本有要求,可能需要升级

查看当前cmake版本:

cmake -version

卸载当前cmake:(如果安装了ROS跳过此步)

sudo apt remove cmake

下载cmake:

可直接从cmake官网下载新版本,也可执行如下语句:

wget http://www.cmake.org/files/v3.16/cmake-3.16.6.tar.gz

我这里下载的是 cmake-3.16.6版本。

(2)可选依赖

安装命令:

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

编译并安装

cd g2o
mkdir build
cd build
sudo ldconfig	# 实际安装时不写这一行也行
# cmake ..
# 注意这里官网说要用 c++17 来编译
cmake .. -DCMAKE_CXX_STANDARD=17
make -jx
sudo make install

注意,一定要在编译前进入build,进行sudo ldconfig。

ldconfig是一个动态链接库管理命令

安装完成某个工程后生成许多动态库,为了让这些动态链接为系统所共享,还需运行动态链接库的管理命令–ldconfig。(直接sudo ldconfig即可)。

这里编译时,官网推荐选择 c++ 17 标准来编译,方法为

(1)直接使用命令

cmake .. -DCMAKE_CXX_STANDARD=17

(2)在 CMakeLists.txt 中加一行

set(CMAKE_CXX_FLAGS "-std=c++17 -O3")

g2o 库编译完成后安装

在这里插入图片描述

在这里插入图片描述

错误

错误1

再编译时出现错误

/usr/bin/ld: /home/jin/anaconda3/lib/libQt5Core.so.5.15.2: undefined reference to `std::__exception_ptr::exception_ptr::_M_release()@CXXABI_1.3.13'
/usr/bin/ld: /home/jin/anaconda3/lib/libQt5Widgets.so.5.15.2: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
/usr/bin/ld: /home/jin/anaconda3/lib/libQt5Core.so.5.15.2: undefined reference to `std::__exception_ptr::exception_ptr::_M_addref()@CXXABI_1.3.13'
collect2: error: ld returned 1 exit status
make[2]: *** [g2o/apps/g2o_viewer/CMakeFiles/g2o_viewer.dir/build.make:101:bin/g2o_viewer] 错误 1
make[1]: *** [CMakeFiles/Makefile2:1508:g2o/apps/g2o_viewer/CMakeFiles/g2o_viewer.dir/all] 错误 2
make: *** [Makefile:152:all] 错误 2

在这里插入图片描述

通过undefined reference to可以看出来是由于so库的引用问题导致的,我们通过修改一下配置文件,将/root/anaconda3/lib添加到用户配置文件的目录下即可

参考:

Qt5和Anaconda路径冲突

安装darknet报libQt5Core.so.5: undefined reference

Ubuntu设置环境变量顺序

解决办法

在安装ROS和安装Anaconda时都会有安装qt,同时创建了两个有关于qt的cmake文件,在编译的时候选择了有一步

find_package(Qt5 REQUIRED ...)

这一步原本应该去寻找 /usr/lib/x86_64-linux-gnu/cmake/Qt5/QtConfig.cmake 这个文件

但由于安装了 anaconda 所以这一步变为了寻找 /home/${username}/Anaconda3/lib/cmake/Qt5/QtConfig.cmake 这个文件,导致后续编译时链接的库文件出错。所以报出以上错误。

限定我们要寻找的 Qt5config.cmake 文件的路径,也就是在 CMakeLists.txt 里添加

SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")

重新编译即可解决问题。(如果问题没有得到解决,建议删除build文件夹下的所有内容,再次编译,即可通过)

在这里插入图片描述

此时再编译即可编译通过

在这里插入图片描述

错误2

参考:

error::make_unique is not a member of ‘std’

视觉Slam14讲第六章g2o安装报错,Ubuntu22.04

error: no matching function for call to ‘g2o #206

g2o 库编译完后,在编译主函数时会报如下错误

在这里插入图片描述

在这里插入图片描述

/home/jin/jin_ws/slambook2-master/ch6/g2oCurveFitting.cpp:91:37: error: expected primary-expression before ‘>’ token
   91 |     g2o::make_unique<BlockSolverType>(g2o::make_unique<LinearSolverType>()));
      |                                     ^
/home/jin/jin_ws/slambook2-master/ch6/g2oCurveFitting.cpp:91:44: error: ‘make_unique’ is not a member of ‘g2o’; did you mean ‘std::make_unique’?
   91 |     g2o::make_unique<BlockSolverType>(g2o::make_unique<LinearSolverType>()));
      |                                            ^~~~~~~~~~~

这里可以换成老版本的 g2o 来编译安装,如 20201223 这个版本

在这里插入图片描述

用老本版编译安装后,就可以正常编译main函数了

在这里插入图片描述

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_37648371/article/details/135006615
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。