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

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

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何提高React组件的渲染效率的?在React中如何避免不必要的render?

面试官&#xff1a;说说你是如何提高组件的渲染效率的&#xff1f;在React中如何避免不必要的render&#xff1f; 一、是什么 react 基于虚拟 DOM 和高效 Diff 算法的完美配合&#xff0c;实现了对 DOM 最小粒度的更新&#xff0c;大多数情况下&#xff0c;React 对 DOM 的渲染…

debian10安装配置vim+gtags

sudo apt install global gtags --version gtags //生成gtag gtags-cscope //查看gtags gtags与leaderf配合使用 参考: 【VIM】【LeaderF】【Gtags】打造全定制化的IDE开发环境&#xff01; - 知乎

Apache Superset如何实现无公网ip实时远程访问本地数据【内网穿透】

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

生物信息学R分析工具包ggkegg的详细使用方法

ggkegg介绍 ggkegg 是一个用于生物信息学研究的工具&#xff0c;可以用于分析和解释基因组学数据&#xff0c;并将其与已知的KEGG数据库进行比较。ggkegg 是从 KEGG 获取信息并使用 ggplot2 和 ggraph 进行解析、分析和可视化的工具包&#xff0c;结合其他使用 KEGG 进行生物功…

HAproxy做七层代理+keepalived高可用,实现动静分离,由nginx处理静态页面,tomcat处理动态页面

目录 一、三种软负载均衡器的区别 关于三种负载均衡器的性能对比&#xff1a; 关于三种负载均衡器的代理类型对比&#xff1a; 关于三种负载均衡器的健康检查对比&#xff1a; 二、haproxy的8中负载均衡调度算法 haproxy的会话保持的方式 haproxy的配置文件学习 三、实操…

Python中导入Excel数据:全面解析与实践

目录 一、引言 二、选择合适的库 三、读取Excel文件 四、处理数据 五、错误处理和异常处理 1、使用try-except语句捕获和处理异常&#xff1a; 2、使用try-except语句捕获和处理特定异常类型&#xff1a; 六、性能优化 七、数据验证 1、检查缺失值&#xff1a; 2、检…

如何解决idea创建版本时只有Java21和Java17选项

idea如果版本高了就会出现在创建Springboot项目时只有Java21和Java17选项 选择jdk1.8的时候很可能出现下图报错&#xff0c;这是因为版本jdk1.8与Java17不兼容 解决办法一般有三种&#xff0c;这里列举两种 1、替换下载数据源 可以将https://start.spring.io/ 替换成 https:…

科普-电子合同签署,这三步不能忽视

关于电子合同&#xff0c;许多人认为我自己直接内部发送邮件/传真等发送电子版合同或者我自己创建一个电子合同平台&#xff0c;这种怎么不属于电子合同呢&#xff1f; 在这里给大家科普一个知识点&#xff1a;签电子合同&#xff0c;需要经过这“三个步骤”。 根据《电子签名…

31. 深度学习进阶 - 全连接层及网络结构

Hi&#xff0c;你好。我是茶桁。 之前的课程咱们学习了卷积以及池化&#xff0c;那到底卷积是如何构成卷积神经网络的呢&#xff1f;我们这节课来好好讲一下。 全连接层 整个卷积的运算就是经过卷积&#xff0c;再经过pooling&#xff0c;再经过卷积。会把这个图形变的很小。…

案例系列:营销模型_客户细分_无监督聚类

案例系列&#xff1a;营销模型_客户细分_无监督聚类 import numpy as np # 线性代数库 import pandas as pd # 数据处理库&#xff0c;CSV文件的输入输出&#xff08;例如pd.read_csv&#xff09;/kaggle/input/customer-personality-analysis/marketing_campaign.csv在这个项…

新型智慧视频监控系统:基于TSINGSEE青犀边缘计算AI视频识别技术的应用

边缘计算AI智能识别技术在视频监控领域的应用有很多。这项技术结合了边缘计算和人工智能技术&#xff0c;通过在摄像头或网关设备上运行AI算法&#xff0c;可以在现场实时处理和分析视频数据&#xff0c;从而实现智能识别和分析。目前来说&#xff0c;边缘计算AI视频智能技术可…

Rocky Linux 9.3 安装 Jenkins 2.426.2 (超级详细版本)

安装步骤 官网的安装文档 导入秘钥 sudo wget -O /etc/yum.repos.d/jenkins.repo \https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key 更新yum源 sudo yum upgrade 安装JDK&#xff08;已…

回顾 2023 这一年的进展,哪些 AI 公司让你觉得未来可期?

文章目录 前言行业趋势1、Open AI 成立于 2015 年2、Tome 成立于 2020 年3、Synthesia 成立于 2017 年4、Uizard 成立于 2018 年5、Soundful 成立于 2019 年6、GoodVision 成立于 2017 年7、Writesonic 成立于 2021 年8、Atomic AI 成立于 2020 年9、Eightfold 成立于 2016 年1…

java SSM健身跑步爱好者社区系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM健身跑步爱好者社区系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整 的源代码和数据库&#xff0c;系统…

Redis-学习笔记

Remote Dictionary Server(Redis) 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库&#xff0c;并提供多种语言的 API&#xff0c;是跨平台的非关系型数据库。 Redis 通常被称为数据结构服务器&…

小程序时代,如何从零开始打造家居展示咨询平台

随着移动互联网的快速发展&#xff0c;小程序成为了各行各业推广和展示产品的新利器。对于家居展示咨询平台来说&#xff0c;打造一款精美实用的小程序不仅可以提升用户体验&#xff0c;还能够有效提高品牌形象和市场竞争力。下面就来介绍一下从零开始打造家居展示咨询平台的步…

字节跳动 Spark Shuffle 大规模云原生化演进实践

Spark 是字节跳动内部使用广泛的计算引擎&#xff0c;已广泛应用于各种大规模数据处理、机器学习和大数据场景。目前中国区域内每天的任务数已经超过 150 万&#xff0c;每天的 Shuffle 读写数据量超过 500 PB。同时某些单个任务的 Shuffle 数据能够达到数百 TB 级别。 与此同…

认识YAML和Propertis

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

AcWing算法提高课-4.1.1格子游戏

算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 Alice 和 Bob 玩了一个古老的游戏&#xff1a;首先画一个 n n n \times n nn 的点阵&#xff08;下图 n 3 n 3 n3 &#xff09;。 接着&#xff0c;他们两个轮流在相邻的点之间画上红边和蓝…

HTML输出特殊字符详细方法

以下是部分特殊字符代码表&#xff0c;它们的完整应用代码格式为&#xff1a;&#;用下面的四位数字替换&#xff0c;将得到对应的符号。&#xff08;注意&#xff1a;应用这些代码&#xff0c;编辑器应该切换到HTML模式&#xff09; ☏260f ☎260e ☺263a ☻263b ☼263c ☽…