《视觉SLAM十四讲》示例程序编译报错处理(上)

news2024/9/17 8:56:43

高翔博士《视觉SLAM十四讲》这本书中的代码很不错,适合初学者。可惜有一些可能因为版本的问题会报错,本文总结一下我遇到的问题。

在slambook2/3rdparty文件夹git submodule update,这个版本是和书中的版本一致的。但我已经重新安装了新版Eigen库,这时因为版本不一致,后续其他的依赖包都会存在编译问题。我都是用的2022年12月最新版的包。

  • Ubuntu22.04
  • Eigen 3.4
  • Pangolin
  • ceres
  • g2o
  • Sophus
  • OpenCV 4.5.4

Ch.3

Eigen3和Pangolin库 安装:

Pangolin是一个基于OpenGL的轻量级开源绘图库,在许多开源SLAM算法(例如ORB-SLAM)中都会用来进行可视化操作。
无法安装书中指定的这个版本的Pangolin。那么只需要在别的文件夹获取一个pangolin并编译就行了,可参考readme进行安装。

git clone https://github.com/stevenlovegrove/Pangolin.git

有博客指出直接git clone这个有各种问题导致编译不过,应该用GitHub上的release版压缩包,别git clone。

ch3/visualizeGeometry 编译报错

如果你在外部安装了Pangolin、或者卸载了ubuntu系统自带的Eigen库并安装了最新版Eigen3.4,在编译时会报错。此时需要在本书所有示例程序CMakeLists.txt中修改为Eigen3的路径

set(CMAKE_CXX_FLAGS "-std=c++17")
include_directories( "/usr/local/include/eigen3" )

这样:
在这里插入图片描述

Ch.4

由于安装了新版Eigen,本章程序也受到影响。

ceres-solver库 安装

Ceres Solver是谷歌开源的C++非线性优化库,能够解决有约束或无约束条件下的非线性最小二乘问题。
参考官网Ceres Installation,有很多依赖项需要安装。假如出现了版本冲突,就卸载旧版重装新版。

git clone git@github.com:ceres-solver/ceres-solver.git
# 我实际用到了这些命令
 1919  sudo apt-get install libatlas-base-dev
 1920  sudo apt-get install libsuitesparse-dev
 1924  sudo apt-get install libgflags-dev
 1926  sudo apt-get purge libgoogle-glog-dev
 1927  sudo apt-get purge libunwind-14-dev
 1932  sudo apt-get purge libunwind-dev
 1933  sudo apt-get install libgoogle-glog-dev
 1934  git clone git@github.com:ceres-solver/ceres-solver.git
 1935  cd ceres-solver/
 1936  mkdir ceres-bin && cd ceres-bin
 1939  cmake ..
 1940  make install
 1941  sudo make install

Sophus库 安装

Sophus库是基于Eigen基础上开发的李群和李代数的库,它很好的支持了SO(3),so(3),SE(3)和se(3)。
安装过程禁用fmt,可在cmake后加上-DUSE_BASIC_LOGGING=ON

git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff
mkdir build && cd build
cmake .. -DUSE_BASIC_LOGGING=ON
make

如果出现这个错误:

/usr/local/include/ceres/product_manifold.h:274:36:note: std::void_t’ is only available from C++17 onwards
/usr/local/include/ceres/product_manifold.h:274:36: error: void_t’ is not a member of ‘std

首先在Sophus文件夹更改项目的C++标准、以及Eigen3的位置

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

如果在build test文件出错,可以

option(BUILD_SOPHUS_TESTS "Build tests." OFF)

ch4/example:fmt库 安装报错

出现这个错误: undefined reference to `fmt::v8::detail:……
这个文件ch4/example/trajectoryError.cpp编译时需要fmt包,在Sophus/scripts/install_linux_fmt_deps.sh下可以clone并安装fmt包。完了之后,ch4/example/CMakeLists.txt这一文件,需要包含找到fmt包

option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" ON)
......
    find_package(FMT REQUIRED)
    set(FMT_LIBRARIES fmt::fmt)

Ch5

OpenCV库 安装

进入python环境,检查是否安装OpenCV

import cv2
print( cv2.__version__ )

如果安装则会显示版本号

4.5.4

这个应该是在安装ROS2时安装过的。所以不用再安装了。没有的话可以去https://opencv.org/找

ch5/rgbd 编译报错

这个几项目imageBasics, undistortImage, stereoVision, joinMap中的最后一个会报错:joinMap.cpp.o: in function `fmt::v5::. 需要查找fmt包并链接,也就是ch5/rgbd/CMakeLists.txt添加

find_package(FMT REQUIRED)
set(FMT_LIBRARIES fmt::fmt)
include_directories(${FMT_LIBRARIES})
target_link_libraries(joinMap ${FMT_LIBRARIES})

ch5/imageBasics 运行报错

编译没问题,但运行时报错:

terminate called after throwing an instance of ‘std::logic_error’
what(): basic_string::_M_construct null not valid

这是因为我忘了给main函数传参。调用方式为$ ./imageBasics /home/user/Documents/slambook2/ch5/imageBasics/ubuntu.png

ch6

g2o库 安装

g2o是一个图优化库,用于基于图理论的非线性误差函数优化。
直接在GitHub下载,编译并安装即可。首先make,然后sudo make install. 这样g2o就装到了你的/usr/local/lib和/usr/local/include下面

ch6/ceresCurveFitting

编译出现以下错误: error: ‘void_t’ is not a member of ‘std’,这个,和上面一样,更改项目的C++标准为C++17。

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

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

相关文章

Webpack中的高级特性

自从webpack4以后,官方帮我们集成了很多特性,比如在生产模式下代码压缩自动开启等,这篇文章我们一起来探讨一下webpack给我们提供的高级特性助力开发。 探索webpack的高级特性 特性:treeShaking 顾名思义treeShaking&#xff0…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: swap

C官网参考里链接&#xff1a;https://cplusplus.com/reference/deque/deque/swap-free/ 函数模板 <deque> std::swap (deque) template <class T, class Alloc> void swap (deque<T,Alloc>& x, deque<T,Alloc>& y); 交换两个双端队列容器的…

【ESP32调试-快速入门】

文章目录ESP32调试一. 环境搭建二. 运行OpenOCD1. 烧入blink2. 找到芯片型号对应的脚本文件&#xff0c;并运行脚本命令三. 运行GDBESP32调试 一. 环境搭建 ESP_IDF环境搭建 二. 运行OpenOCD 1. 烧入blink 如&#xff1a;安装环境中的examples中的blink 路劲&#xff1a;安装…

华为机试 - 探索地块建立

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 给一块n*m的地块&#xff0c;相当于n*m的二维数组&#xff0c;每个元素的值表示这个小地块的发电量&#xff1b; 求在这块地上建立正方形的边长为c的发电站&#xff0c;发电量满足目标电量k的地块数量…

汽车保养app开发,扩充汽车服务市场发展商机

从汽车市场规模来看&#xff0c;从2017年开始始终保持增长的发展趋势&#xff0c;在2021年市场规模达到140877.18亿元。互联网时代发展下&#xff0c;汽车后市场大力推广电子商务&#xff0c;将互联网技术与汽车保养服务相结合是汽车服务行业强大的必由之路。二者的结合可以让消…

centos7下搭建rabbitmq的开发环境

我们在项目开发的时候都不可避免的会有异步化的问题,比较好的解决方案就是使用消息队列,可供选择的队列产品也有很多,比如轻量级的redis, 当然还有重量级的专业产品rabbitmq,rabbitmq好就好在是用erlang(二郎神)开发的,它那天生的OTP并行计算框架,轻而易举的进程间通…

阿里云ssl免费证书申请

目录为什么申请SSL证书SSL证书申请支持的域名类型ssl免费证书申请过程为什么申请SSL证书 由于web服务部署需要使用https安全协议&#xff0c;因此需要申请相应域名的SSL证书用于部署。测试阶段&#xff0c;为节省成本&#xff0c;使用阿里云提供的免费SSL证书。 SSL证书申请支…

在Web服务器(IIS)上安装SSL证书并绑定网站

以windows server 2016为例 一、安装中间证书 1.下载中间证书文件 如果是RSA加密算法类的&#xff0c;下载此处。 如果是ECC加密算法类的&#xff0c;下载此处。 2.安装 双击下载好的文件进行安装&#xff0c;注意&#xff0c;安装过程中&#xff0c;存储位置要设”为本地…

搜题接口系统

搜题接口系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xff09; 题库…

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)

分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类) 目录 分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)效果一览基本介绍程序设计学习总结参考资料效果一览 训练集正确率Accuracy = 89%(445/500) 测试集正确率Accuracy = 86.9565%(60/69) 基本介绍 MATLA…

加载器、反射、xml、DTD、schema、注解、单元测试

一、什么是类加载器 类加载器 类加载器&#xff1a;负责将.class文件&#xff08;存储的物理文件&#xff09;加载在到内存中 类加载的过程 类加载时机 类在什么时候会被加载到内存中呢&#xff1f; 类加载时机 创建类的实例&#xff08;对象&#xff09;调用类的类方法 访问…

微服务自动化【idea插件一键部署】

目录​​​​​​​ 1. Docker结合Idea插件使用 2. 私服搭建 registry 3. 私有仓库的使用 4. idea一键项目部署单独Docker镜像 5. idea一键项目部署Docker标记镜像【私库】 1. Docker结合Idea插件使用 1. 修改Docker服务文件,注释掉"ExecStart"这一行&#x…

火爆的超级人工智能ChatGPT,唯独鄙视中国人

ChatGPT你听说了吗&#xff1f;如果ChatGPT你还没有听说&#xff0c;作为一名程序员&#xff0c;那可能你就out了。使用ChatGPT受阻&#xff0c;为什么不让我们用&#xff1f;它是一款神器&#xff0c;很有意思&#xff0c;当前被大家众星捧月&#xff0c;初次用起来确实很神奇…

微服务框架 SpringCloud微服务架构 22 DSL 查询语法 22.5 相关性算分

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构22 DSL 查询语法22.5 相关性算分22.5.1 复合查询22.5.2 相关性算分22.5.3 …

前端精准测试实践

作者&#xff1a;京东云质量部 背景 随着前端技术发展&#xff0c;已经转变为数据绑定为主流的框架方式&#xff0c;与后端服务一样&#xff0c;前端代码实现也会涉及相互依赖&#xff0c;引用这些场景&#xff0c;那么应该如何准确的评估前端代码改动的影响范围&#xff1f;…

2小时开发《点球射门游戏》,动画演示思路(上),代码已开源

唠两句 最近被疫情关在家&#xff0c;时间多运动少&#xff0c;真的很无聊呀&#xff01;也许是天意为之&#xff0c;居然来世界杯了&#xff0c;虽然这届世界杯很「冷」&#xff0c;但是多少还是为无聊的我们增加了一些无聊的趣事&#xff0c;比如勇哥在等世界杯开幕式的过程…

关于影响编码效果的画质调优总结

1、背景&#xff1a; 调试一个新项目&#xff0c;要求视频帧率为20fps、码率1.5m下&#xff0c;和竞品机对比效果。发现动态场景下的效果比竞品机差距比较明显&#xff08;做的是安防类的监控相机&#xff0c;比较关注视频的效果&#xff09;&#xff0c;比如对着运动的车流时…

红队隧道应用篇之Netsh端口转发(一)

简介 netsh是从Windows 2000开始就有的一个用于配置网络设备的命令行工具 其中netsh interface portproxy是一个配置网络代理的命令, 可以配置ipv4或ipv6的端口转发代理以及双向端口转发代理 学习隧道应用前必须了解的知识:https://blog.csdn.net/xf555er/article/details/1…

softmax回归从零开始实现

1. 引入Fashion-MNIST数据集 并设置数据迭代器的批量大小为256 import torch from IPython import display from d2l import torch as d2lbatch_size 256 # 每次随机读256张图片&#xff0c;返回训练集和测试集的迭代器 train_iter, test_iter d2l.load_data_fashion_mnist…

职场日常:测试人员如何快速熟悉新业务?

身处职场&#xff0c;学习新业务在所难免&#xff0c;尤其是测试人员&#xff0c;具备良好的业务知识是我们做好质量保障的前提&#xff0c;不管是职场「新人」还是「老人」&#xff0c;快速熟悉业务的能力都是不可或缺的&#xff0c;这是我们安身立命的根本。 但&#xff0c;…