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