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

news2024/12/24 9:20:02

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

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

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


下面是专栏地址:

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


文章目录

  • SLAM算法与工程实践系列文章
    • SLAM算法与工程实践系列文章链接
    • SLAM算法与工程实践系列专栏
  • 前言
  • SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库
    • g2o 安装
      • 错误
        • 错误1
        • 错误2


前言

这个系列的文章是分享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)必需依赖

  • C++17 compiler (CI pipeline runs with gcc, clang and MSVC)
  • cmake http://www.cmake.org
  • Eigen3 http://eigen.tuxfamily.org

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)可选依赖

  • spdlog https://github.com/gabime/spdlog
  • suitesparse http://faculty.cse.tamu.edu/davis/suitesparse.html
  • Qt5 http://qt-project.org
  • libQGLViewer http://www.libqglviewer.com

安装命令:

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函数了

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1326134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostGIS轨迹分析——横跨180°经线

问题描述 在处理AIS数据中&#xff0c;经常会遇到轨迹线横穿180经线的情况&#xff0c;这种数据绘制到地图上显示的非常乱&#xff0c;如下图所示&#xff1a; 数据模拟 在geojson.io上模拟一条轨迹线&#xff0c;可以看到轨迹显示的非常好&#xff0c;红框里面的经纬度超过…

使用Alpha Vantage API和Python进行金融数据分析

Alpha Vantage通过一套强大且开发者友好的数据API和电子表格&#xff0c;提供实时和历史的金融市场数据。从传统资产类别&#xff08;例如股票、ETF、共同基金&#xff09;到经济指标&#xff0c;从外汇汇率到大宗商品&#xff0c;从基本数据到技术指标&#xff0c;Alpha Vanta…

HashSet使用-力扣349做题总结

349. 两个数组的交集 分析代码HashSet出错的知识点1、HashSet新建2、HashSet添加add3、是否包含某元素4、集合->数组5、增强for循环 分析 没做出来的原因代码随想录的视频文字学习 为什么没做出来&#xff0c;因为没有理解好题意。根据示例1可知是去重的。且题目明确说“不考…

机器学习算法(12) — 集成技术(Boosting — Xgboost 分类)

一、说明 时间这是集成技术下的第 4 篇文章&#xff0c;如果您想了解有关集成技术的更多信息&#xff0c;您可以参考我的第 1 篇集成技术文章。 机器学习算法&#xff08;9&#xff09; - 集成技术&#xff08;装袋 - 随机森林分类器和...... 在这篇文章中&#xff0c;我将解释…

先进制造身份治理现状洞察:从手动运维迈向自动化身份治理时代

在新一轮科技革命和产业变革的推动下&#xff0c;制造业正面临绿色化、智能化、服务化和定制化发展趋势。为顺应新技术革命及工业发展模式变化趋势&#xff0c;传统工业化理论需要进行修正和创新。其中&#xff0c;对工业化水平的判断标准从以三次产业比重标准为主回归到工业技…

服务器数据恢复-昆腾存储StorNext文件系统下raid5数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾某型号存储&#xff0c;StorNext文件存储系统。 共有9个分别配置了24块磁盘的磁盘柜&#xff0c;其中8个磁盘柜存放普通数据&#xff0c;1个磁盘柜存放元数据。 存放元数据的磁盘柜中的24块磁盘组建了8组RAID1阵列和1组4盘RAID10阵列&#…

Ubuntu 常用命令之 history 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 history命令在Ubuntu系统中用于显示用户执行过的命令列表。这个命令在bash shell中非常有用&#xff0c;特别是当你需要记住你之前执行过的命令时。 history命令的参数如下 -c&#xff1a;清除历史记录。-d offset&#xff1a;删…

全功能知识付费小程序系统源码是什么?有什么好处?

全功能知识付费小程序系统源码&#xff0c;是一个集课程管理、用户管理、支付管理、数据分析等于一体的综合性解决方案。它支持多种形式的课程内容&#xff0c;如视频、音频、图文等&#xff0c;满足不同用户的学习需求。同时&#xff0c;系统具备完善的支付功能&#xff0c;保…

怎么开通独立站支付?独立站客户退款谁支付运费?——站斧浏览器

怎么开通独立站支付&#xff1f; 选择支付服务提供商&#xff1a;开通独立站支付首先需要选择一个可靠的支付服务提供商。目前市场上有许多知名的支付服务提供商&#xff0c;如支付宝、微信支付、PayPal等。根据自己的业务需求和目标市场选择合适的支付服务提供商。 注册账号…

目前电视盒子哪个最好?工程师盘点超值电视盒子推荐

因工作原因每天都会跟各种各样类型的电视盒子打交道&#xff0c;拆机、维修&#xff0c;身边朋友在挑选电视盒子的时候会问我目前电视盒子哪个最好&#xff0c;哪些电视盒子最值得入手&#xff0c;我整理了五款超值电视盒子推荐给大家&#xff0c;在挑选电视盒子时可以把这几款…

两套高质量可视化模板套件,需要进!

小编整理了两套高质量可视化模板套件&#xff0c;均来自于山海鲸可视化&#xff0c;需要源文件可私。 一、「星曜蓝」主题可视化模板 可以自由调用模板库中的所有内容&#xff0c;轻松搭建风格统一的地图、工厂、城市多种数字孪生项目。真免费、0代码数字孪生设计搭建&#xf…

可狱可囚的爬虫系列课程 07:BeautifulSoup4(bs4)库的使用

前面一直在讲 Requests 模块如何使用&#xff0c;那都是在请求阶段要做的事情&#xff0c;相信很多网友都在等一个能够开始爬网站信息的教程&#xff0c;今天它来了&#xff0c;今天我要给大家讲一个很简单易懂的库&#xff1a;BeautifulSoup4。 一、概述&安装 Beautiful…

BWS2000倾角传感器c++测试代码【2】

问题一&#xff1a;串口频率的初始化 由于本次项目之中使用的线长为40米的倾角传感器&#xff0c;需要对于其频率输出存在要求&#xff0c;如何测试其频率如下所示&#xff1a; 如上所示相应的软件&#xff0c;软件中存在一句如果设置后不保存&#xff0c;则存在传感器断电后设…

众和策略:大盘涨手中的股票却大跌,到底怎么回事?

大盘涨手中的股票却大跌&#xff0c;究竟怎么回事&#xff1a; 1、大盘上涨是权重股所造成的 大盘上涨可能是受一些权重比较大的工作所影响&#xff0c;比如证券工作、钢铁工作、银行工作等等&#xff0c;这些工作的大涨&#xff0c;可以拉升大盘的上涨&#xff0c;可是其它工…

C++20形式的utf-8字符串转宽字符串,不依赖编译器编码形式

默认的char[]编码都是要看编译器编译选项的&#xff0c;你选了ANSI那它就是ANSI&#xff0c;你选了UTF8那它就是UTF8. 【注意&#xff1a;经典DevC只支持ANSI编码&#xff08;痛苦&#xff09;&#xff1b;上图是小熊猫DevC&#xff0c;则有这个选项】 这一点对我的代码造成了…

20231220将NanoPC-T4(RK3399)开发板的Android10的SDK按照Rockchip官方挖掘机开发板编译打包刷机之后启动跑飞

20231220将NanoPC-T4(RK3399)开发板的Android10的SDK按照Rockchip官方挖掘机开发板编译打包刷机之后启动跑飞 2023/12/20 17:19 简略步骤&#xff1a;rootrootrootroot-X99-Turbo:~/3TB$ tar --use-compress-programpigz -xvpf rk3399-android-10.git-20210201.tgz rootrootro…

Poi实现复杂Excel导出,理解POI操作Excel思路!!!

前言 对于简单excel报表导出&#xff0c;有很多简单的工具如easypoi&#xff0c;而且现在网上已经有很多工具类整合easypoi使用起来非常方便。但是简单的弊端往往无法适配一些负责场景&#xff0c;而我们实际生产中面临的都是客户自定以的一个负责报表导出&#xff0c;这是利用…

【RTOS学习】源码分析(信号量和互斥量 事件组 任务通知)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f353;信号量和互斥量&#x1f345;创建&#x1f345;Take&#x1f345;Give &#x…

百川大模型AI对话实战——Python开发一个对话机器人

百川大模型开放提供API体验中心&#xff0c;体验不错&#xff0c;有小伙伴也对搭建自己的对话机器人比较兴趣&#xff0c;今天通过Python来简单介绍下&#xff0c;如何调用百川大模型的API来构建自己的小产品。 在开发环境中安装Python&#xff0c;如何安装&#xff1f;参照网…

(附源码)基于Springboot框架的网络投票系统 计算机毕设42855

基于springboot网络投票系统 摘 要 随着全球Internet的迅猛发展和计算机应用的普及&#xff0c;特别是近几年无线网络的广阔覆盖以及无线终端设备的爆炸式增长&#xff0c;使得人们能够随时随地的访问网络&#xff0c;以获取最新信息、参与网络活动、和他人在线互动。为了能及时…