学习《视觉SLAM十四讲》——ch5实践踩坑及解决方法总结

记录学习高博的《视觉SLAM十四讲》ch5过程中自己遇到的问题,分享也是记录,大家有什么问题可以一起讨论沟通,互相学习!!!

问题1:opencv配置报错

首先,ch5中的示例程序需要安装opencv库,第一步一定要安装好opencv库,opencv库的安装这里不再赘述,由于在前几讲中我安装了eigen3.4.0库,并随之配置了sophus库,但不知为何配置opencv总是报下面的错误。

解决方法:

于是开始了度娘模式,总结到这个错误通常与Eigen库的AVX512支持有关。首先,确保当前使用的是与OpenCV兼容的Eigen版本。可以尝试以下步骤来解决问题:

(1)更新Eigen: 下载最新版本的Eigen库。(当前我下载的就是最新的Eigen版本)
(2)检查AVX512支持: 确保你的处理器和编译器支持AVX512指令集。若不支持,考虑禁用AVX512优化。

cmake -D CMAKE_BUILD_TYPE=Release -D WITH_AVX512=OFF ..

(3)配置CMake: 在CMake配置阶段,确保Eigen的路径被正确设置,并且没有不兼容的配置选项。

一通操作下来并没有什么卵用,于是开始检查Eigen库的版本,发现明明安装的是3.4.0版本,但在Macros.h中查看的版本是3.4.90,令我十分不解,至今也不知道为什么!!!

我想大概是与这个有关系,于是尝试卸载当前安装的Eigen库,重新安装配置了Eigen3.3.9版本库,安装结束后同样方式查看版本号,这时就正常显示3.3.9版本了,接下来尝试重新编译下opencv,此时成功编译!!!!!喜大普奔!!!!!

至于为什么安装eigen3.4.0版本后系统会显示3.4.90版本,如果友友们知道还请麻烦留言或评论告诉我一声!感谢感谢!!!

问题2:重新配置sophus库内存不足

由于之前的sophus库是通过eigen3.4.0(实则3.4.90)编译的,所以这里需要重新配置sophus库,再重新编译sophus库时遇到了内存不足导致编译进程失败!

c++: fatal error: 已杀死 signal terminated program cc1plus
compilation terminated.
make[2]: *** [test/core/CMakeFiles/test_se3.dir/build.make:76:test/core/CMakeFiles/test_se3.dir/test_se3.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:388:test/core/CMakeFiles/test_se3.dir/all] 错误 2
make: *** [Makefile:146:all] 错误 2

解决方法:

1、检查系统资源及磁盘空间

通过下面命令检查系统内存

#检查系统内存
free -h

#检查磁盘空间
df -h

2、清理磁盘空间

删除不必要的文件和缓存:

#删除系统上的临时文件
sudo apt-get clean
sudo apt-get autoclean

#删除旧的日志文件
sudo rm -rf /var/log/*.log
#删除缓存文件
sudo rm -rf /var/cache/*

3、增加交换空间(若清理磁盘空间也不能解决)

借鉴其他博主方法,通过创建swap分区增加虚拟机空间,解决了编译杀死进程问题,最后编译成功。下面是创建swap分区的方法:

# 创建分区路径
sudo mkdir -p /var/cache/swap/
# 设置分区的大小
# bs=64M是块大小,count=64是块数量,所以swap空间大小是bs*count=4096MB=4GB
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=64M count=64
# 设置该目录权限
sudo chmod 0600 /var/cache/swap/swap0
# 创建SWAP文件
sudo mkswap /var/cache/swap/swap0
# 激活SWAP文件
sudo swapon /var/cache/swap/swap0
# 查看SWAP信息是否正确
sudo swapon -s

参考链接:

【问题解决】C++: fatal error: Killed signal terminated program cc1plus-优快云博客

问题3:示例代码make错误

在编译示例代码imageBasics、rgbd、stereo时,make项目时都会出现类似错误,如下图所示:

解决方法:

这个错误一般是链接问题,说明在编译过程中找不到 OpenCV 库的实现。具体来说,undefined reference 表示在编译阶段找不到对应的库函数实现。这个问题通常发生在以下几种情况:

1、未正确链接 OpenCV 库:确保在 CMakeLists.txt 中正确指定了 OpenCV 库的链接。

2、OpenCV 库路径设置错误:确保 OpenCV 的路径在 CMake 配置中正确设置。

一般通过检查以下几个步骤便可解决:

1、检查 CMakeLists.txt:确认 CMakeLists.txt 文件中包含了对 OpenCV 库的链接。

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

2、确认 OpenCV 已正确安装:使用以下命令检查 OpenCV 是否已安装。

pkg-config --modversion opencv

3、重新配置 CMake:如果已经更改了 CMakeLists.txt 文件,需要重新配置 CMake 以更新设置。

mkdir build && cd build
cmake ..
make

我通过步骤1方法,在每个项目的CMakeLists.txt 中添加opencv库的链接,解决了这个问题!!运行结果如下图所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ron__ronner

感谢支持,希望能够帮助到你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值