当前位置: 首页 > news >正文

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

高翔博士《视觉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。

相关文章:

  • 【JavaScript】字符串方法汇总(方法最新至ES7~)
  • Git---定位代码某一次提交的问题,逐次验证(git bisect)
  • 【檀越剑指大厂—Spring】Spring高阶篇
  • 如何系统全面的成为一个网络工程师?看完这个你就懂了
  • Jenkins执行shell脚本报错:bash: kubectl: command not found
  • 数据链路层-点对点PPP(point-to-point protocal)
  • NLP命名实体识别
  • 计算机毕业论文java毕业设计选题源代码基于javaweb实现的客运站网上售票系统
  • 安装阿里的龙蜥系统
  • 被微服务轰炸?莫怕!耗时35天整出的「微服务学习教程」送你
  • MySQL性能调优——count()篇(一)
  • 嵌入式IAP设计
  • Word控件Spire.Doc 【图像形状】教程(13): 如何在C#中对齐word文档上的形状
  • [附源码]JAVA毕业设计师生交流平台(系统+LW)
  • 电磁场几何和衍射理论的统一
  • PyQt利用QScrollArea+QLabel制作一个滑动的长文本(QT Designer)
  • jsoup爬虫发送get、post请求、解析html、获取json
  • 压缩与打包
  • SpringBoot系列之基于MongoRepository实现分页
  • 基于安卓的课程管理系统app设计
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉