《视觉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

假如ceres安装完之后VINS编译时出现了报错:
fatal error: ceres/local_parameterization.h: No such file or directory
#include “ceres/local_parameterization.h”

这是在因为高版本的ceres中,“LocalParameterization接口以及相关类已经被弃用,用流形(Manifold)进行了代替”。而我们在github中直接git下来的ceres应该是最新版本的,找不到ceres/local_parameterization.h。所以改用低版本的ceres。 卸载ceres2.1,更换ceres1.14.0
卸载的方法为在主目录打开终端输入:

    sudo rm -r /usr/local/lib/cmake/Ceres
    sudo rm -r /usr/local/include/ceres /usr/local/lib/libceres.a

安装旧版的地址为ceres-solver/1.14.0,安装方式不变。

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。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值