Ubuntu20/视觉SLAM十四讲踩坑记录

Ubuntu(20)/视觉SLAM十四讲踩坑记录:

共性问题:

可参考:《视觉SLAM十四讲》 编译报错问题汇总 Ubuntu20.04
视觉SLAM十四讲slambook2示例代码所有依赖库的编译安装教程(VTK、OpenCV3、ceres、Sophus、g2o、Eigen、Pangolin、googletest等)

1.安装OpenCV后,例程仍无法找到OpenCV文件

原因:原CMakeLists.txt文件中未添加OpenCV库等三方库,需要自行在各文件中添加(书中有写),
如:

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS} )
target_link_libraries(xxxxx ${OpenCV_LIBS})

ch3 visualizeGeometry:

  1. pangolin安装 ,安装需要cmake版本>=3.17;通过apt安装最新只能到3.16(2021.09.24);可能卸载后通过snap install cmake --classic安装。直接到最新版本(方便、快速)。或者通过源码自行安装(容易出错)。
  2. cmake编译,在完成所有安装后,build/cmake 可能通过。但make时会出现如下错误:在这里插入图片描述
    原因:其中引用的sigslot/signal.hpp是基于C++14标准的,而原CMakeLists.txt中的设置的标准为C++11。
    在这里插入图片描述
    方案:改为c++14再次执行即可运行
    在这里插入图片描述

ch4:Sophus安装问题:

1:fatal error: sophus/se3.h: 没有那个文件或目录
2:安装模板库(视觉SLAM十四讲第二版中使用)时,需要先安装fmt库(依赖问题):

参考:Ubuntu下安装Sophus模板库(SLAM学习)

ch5:OpenCV安装及例程运行问题

1:OpenCV3安装问题:

主要是依赖问题,安装可参考:Ubuntu安装Opencv3
可参考:视觉SLAM十四讲slambook2示例代码所有依赖库的编译安装教程(VTK、OpenCV3、ceres、Sophus、g2o、Eigen、Pangolin、googletest等)

1:链接fmt出问题(仍没找到fmt头文件)(rgbd-joinmap例程)

需要在CMakeLists.txt中添加fmt链接:

find_package(fmt REQUIRED)
set(FMT_LIBRARIES fmt::fmt)
target_link_libraries(joinMap ${OpenCV_LIBS} ${Pangolin_LIBRARIES} ${FMT_LIBRARIES})

ch6:g2o使用:

Q1:
在编译时一直找不到cs.h头文件。
在第一版源代码文件中的g2o/EXTERNAL 中有一个csparse文件夹,将其移动到/usr/local/include/g2o/EXTERNAL下,cmake、make install即可。

Q2:
关于关于高博3d2d程序报错的改动
《视觉SLAM十四讲》第六讲g2o实践代码报错解决方法
g2o初始化一些

code0 为原始代码,在新装的g2o等库中出现错误,原因参考上述文献(链接)。
code1和code2为改动实现的两种方法。两个位置的code1或code2要对应

	//DirectBlock* solver_ptr = new DirectBlock ( linearSolver );     //code0
    std::unique_ptr<DirectBlock> solver_ptr ( new DirectBlock ( std::unique_ptr<DirectBlock::LinearSolverType>(linearSolver)));  code1
    // g2o::OptimizationAlgorithmGaussNewton* solver = new g2o::OptimizationAlgorithmGaussNewton( solver_ptr ); // G-N code0
    g2o::OptimizationAlgorithmLevenberg* solver (new g2o::OptimizationAlgorithmLevenberg(std::move(solver_ptr)));  // code 1
    //g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg ( solver_ptr ); // L-M  //code0
	//DirectBlock* solver_ptr = new DirectBlock ( linearSolver );   //code0
	DirectBlock* solver_ptr = new DirectBlock ( std::unique_ptr<DirectBlock::LinearSolverType>(linearSolver) );  //code 2
    // g2o::OptimizationAlgorithmGaussNewton* solver = new g2o::OptimizationAlgorithmGaussNewton( solver_ptr ); // G-N code 0
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg (std::unique_ptr<DirectBlock>(solver_ptr));  //code2
    //g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg ( solver_ptr ); // L-M  //code0

ch7:段错误 (核心已转储)

执行书中的以下代码时:

build/pose_estimation_3d2d 1.png 2.png d1.png d2.png

出现错误:

-- Max dist : 94.000000 
-- Min dist : 4.000000 
一共找到了79组匹配点
段错误 (核心已转储)

参考文献:
BUG(跑slam14-ch7-2d3d时)
视觉SLAM十四讲,OpenCV库使用时出现已放弃(核心已转储)
后,回到文件,发现,是图片名字有误(采用第一版的源码库)。将原来的1_deepth.png 2_deepth.png 与执行代码对应即可。

其他:

c++: fatal error: 已杀死 signal terminated program cc1plus

原因:运行内存不足
[https://blog.csdn.net/baidu_26954729/article/details/92428426](https://blog.csdn.net/baidu_26954729/article/details/92428426)
https://www.jianshu.com/p/c4ef42f6b2ec
解决方法:
增加运行内存
方法1:减少运行线程。
方法2:直接增加运行内存(如加内存条,虚拟机多分配内存等)。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值