零基础学SLAM踩过的坑小结(7.20~)

 2022.7.20

1.KDevelop导入项目时显示“unable to create configuration file“的解决方案

在网上一直没有找到什么我能看得懂的方法,包括有几篇帖子提到把项目放在/home目录下也试过了,未果,依然报下图的错误。自己新建了一个项目编译一切正常,也能打开。

研究了一下,新建的项目都在/home/yq(用户名)/projects里面,因此把文件夹整体复制到该目录下,问题解决,该文件夹作为project打开

2022.7.21

2.eigen安装过但是编译的时候显示“没有那个文件或目录”

在csdn其他文章上随便一找也能找到。主要问题是安装了eigen3之后,系统去/usr/include文件夹中找Eigen和unsupported找不到,可以使用如下命令建立软链接链接到这两个文件夹里。

cd /usr/include
sudo ln -sf eigen3/Eigen Eigen//强行建立软链接,ln -sf a b意为b-->a的软链接
sudo ln -sf eigen3/unsupported unsupported

好像最初想法来自c++ - fatal error: Eigen/Dense: No such file or directory - Stack Overflow

 22.8.1

最近一直在研究数学推导,老师布置给我看ORB-SLAM3的文献,整理文献费了不少时间。。今天才开始重新看第四章李代数部分。

3. 因为我看的第二版的书,sophus库在使用的时候又报了不少错。编译过程中显示so2.cpp中有错误,lvalue required as left operand of assignment,应该按照提示更改so2.cpp中的语句,改成:

unit_complex_.real(1.);
unit_complex_.imag(0.) ;

编译通过。我是直接git clone安装的github上的库,别忘了最后一步编译结束需要安装一下:

sudo make install

然后需要更改useSophus.cpp中的头文件,把最后一行include改成

#include "sophus/se3.h"
#include "sophus/so3.h"

因为是新版书有的地方语法不太一样,把所有SO3d和SE3d里面的d都去掉,然后更改CMakeLists.txt文件。加入以下语句:

set (Sophus_LIBRARIES "/usr/local/lib/libSophus.so")
include_directories( ${Sophus_INCLUDE_DIRS})

因为安装的是非模板的Sophus,所以把最后一行语句注释掉:

#add_subdirectory(example)

成功编译通过产生结果。

参考:视觉slam14讲 Ubuntu18.04下 Sophus李代数库使用 以及报错处理_ppipp1109的博客-CSDN博客

4. 编译trajectoryError.cpp时遇到undefined reference to 'Sophus::SE3::SE3(Sophus::SE3 const&)' 问题的解决方案

还是打开CMakeLists.txt查看一下,发现代码中有一些关于UBUNTU20的语句,但是我用的是18.04版本。。尝试把相关语句全部去掉,并且参考了这一位的代码,加上了c++11标准,以及链接Sophus库的相关语句:

slam14讲 跑第四讲例程遇到的问题_完颜小白的博客-CSDN博客
 

add_compile_options(-std=c++11)
find_package(Pangolin REQUIRED)
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})
include_directories(${Pangolin_INCLUDE_DIRS})
set (Sophus_LIBRARIES "/usr/local/lib/libSophus.so")
add_executable(trajectoryError trajectoryError.cpp)
target_link_libraries(trajectoryError ${Pangolin_LIBRARIES})
target_link_libraries(trajectoryError ${Sophus_LIBRARIES})

编译运行成功,但是到结果的时候报错:Assertion '!groundtruth.empty()&& !estimated.empty()' failed. 原因是用KDevelop执行的时候是在build文件夹下执行的,但是build文件夹下没有groundtruth.txt和estimated.txt文件,所以要退出build再退出example然后执行,把跟文件路径相关的语句改为:

string groundtruth_file='../../example/groundtruth.txt';
string estimated_file='../../example/estimated.txt';

运行成功,产生正确的结果。

参考:slambook2(ch4)—— Ubuntu18.04查看eigen库版本 + 安装Sophus库(模板类) + 例程演示_@曾记否的博客-CSDN博客_ubuntu查看eigen版本

22.8.2 笑死,今天发现了一个叫摸鱼侠的小程序,开始摸鱼!

5.今天开始运行第五章代码,下载opencv的时候又遇到了一些问题。。

实验室的网不太好,之前下载几次opencv的源代码,用unzip命令解压的时候总是遇到这种错误:

Archive:  opencv-3.4.16.zip
   End-of-central-directory signature not found.  Either this file is not
   a zipfile, or it constitutes one disk of a multi-part archive.  In the
   latter case the central directory and zipfile comment will be found on
   the last disk(s) of this archive.

查了一些解决方案,有说用其他软件解压的,但是这个压缩包只有7-80M,最后实验室网好了突然unzip命令解压成功,于是得到结论,是之前下载的压缩包不完整。。一般这样大的zip文件都不至于不用unzip命令,出现这样的错误大概就是压缩包不完整。

6. 安装opencv需要的依赖,在安装libjasper-dev的时候提示无法定位,参考了一些文章,解决问题:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

参考:无法定位libjasper-dev_向日葵骑士Faraday的博客-CSDN博客_无法定位软件包libjasper-dev

7. 复制文件夹的时候突然再次提示unable to create configuration files的错误,退出去发现复制过来的project文件夹上有个锁头图标,打开终端,进入该文件夹所在目录,输入

sudo chmod -R 777 imageBasics//imageBasics是文件夹名称

然后锁头消失,可以正常把该文件夹作为工程打开。

8. 在运行第五章程序的时候报错be like undefined reference to 'cv::Mat::Mat()'很多行,直觉判断应该是CMakeLists.txt文件里链接出问题了,在提供的代码上增加了这一句:

find_package(OpenCV REQUIRED)

再编译一下就通过了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值