【入坑ORB-SLAM3系列1】NVIDIA Xavier NX安装编译ORB-SLAM3


前言

开始前先说一下大致的整个过程,各位dalao对应自己需要的部分去看就可以,也为我自己做一个记录。

  1. 我因为是之前在这个系统上跑过ORB-SLAM2,所以没有安装Pangolin、Eigen等库的过程,如有需要可以拜读其他dalao的文章

  2. 在NX上常规编译无法通过,经高人指点,我按照最普通的三部曲进行编译

  3. 经过漫长的编译后,非ROS下可以运行,ROS下直接报错:段错误(核心已转储)[图片太大、放不上来]。

  4. 删库重装,再进行一次。这次无论是否在ROS下都无法运行

  5. 开始找原因。这个error的本质原因:内存、源码、硬件,
    常规处理方法:输出core文件,gdb调试慢慢一行行查。说实话,肯定不是配置问题,有人已经跑成功了,而且这么大的工程,我并不想去慢慢gdb查。

  6. 开始摸索,查找错误信息后:
    ① 有dalao指出:将所有CMakeLists文件中的-march=native全删掉,然后重新编译。亲测,没用。
    ② github dalao指出:OpenCV版本的问题,换成3.2.0。我没试,因为动了原来的OpenCV版本,肯定会影响一些原来配置好的文件的。换了也不是百分百管用。
    ③ 又dalao指出:放两天就好了,玄学操作。亲测,没用(别问我为什么会试)。

最后搁置了几天,毕竟不想换OpenCV和gdb调试。

几天后,有交流学习的dalao亲测换了OpenCV版本确实不会出现段错误了,我去翻阅了作者github上的readme,发现作者确实只在OpenCV3.2和4.4上测试过,有可能真的是版本差异问题导致的。

于是,换OpenCV4.4.0,成功运行了。建议:① 装较高版本,高版本功能会更全,一劳永逸;② 原来的不要删,直接考虑多版本共存,理由见上。

ok,开始记录一下整个过程。


一、下载ORB-SLAM3库

  1. 直接下载压缩包,直接git clone可能有些文件会不一样。
    github:https://github.com/UZ-SLAMLab/ORB_SLAM3

  2. 解压到/home目录下的一个文件夹中,我放在了ORBSLAM3里。


二、非ROS下编译

常规的方法是:修改作者编写好的脚本文件,然后运行即可。

但我这么做,直接卡死,可能最好还是得优化一下整个工程才适合放进ARM中。

1. 编译第三方库Thirdparty:
分别进入DBoW2词袋库和g2o优化库进行如下操作。

mkdir build
cd bulid
cmake ..
make -j4		# 按照自己的实际情况安排核数

2. 成功后,返回根目录(我的是ORBSLAM3)下,重复上述操作进行编译

mkdir build
cd bulid
cmake ..
make -j4		# 按照自己的实际情况安排核数

此时就可以在非ROS环境下运行例程了(可以打开根目录下的XXX_examples.sh文件查看例程运行的源码格式)

注:注意留意一下Vocabulary中的ORB字典是否已经解压。

3. 运行demo测试

我们测试一下EuRoC MH01数据集下的单目VIO模块:
回到根目录ORBSLAM3下,打开终端:
命令格式如下:

模式  词库路径  该模式下的配置文件  数据库路径  数据库的时间戳与数据名

我的运行命令如下:

./Examples/Monocular-Inertial/monocular-inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ~/Dataset/MH_01_easy ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_monoi

三、ROS环境下编译

1. 将ros工作空间路径加入.bashrc文件中

我的是

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/nvidia/ORBSLAM3/Examples/ROS

source一下:source ~/.bashrc

2. 开始编译安装

当然,ros编译安装的脚本也是会卡崩。故

从根目录进入Examples-ROS-ORB_SLAM3中

mkdir build
cd bulid
cmake ..
make -j4		# 按照自己的实际情况安排核数

我在安装过程中出现了error:make: *** 没有指明目标并且找不到 makefile。 停止。

[rosbuild] Error from directory check: 
/opt/ros/melodic/share/ros/core/rosbuild/bin/check_same_directories.py 
/opt/ros/melodic/share/ORB_SLAM3 /home/nvidia/ORBSLAM3/Examples/ROS/ORB_SLAM3

在这里插入图片描述

一大段错误,其实应该是跟系统编译了多个ORB-SLAM3工程的原因,我之前重新安装完OpenCV后,直接把原来ORB-SLAM3工程全删了,原工程已经在/opt/ros/melodic/share下建立了一个软连接,现在需要将这个同名软连接取消掉,再重新建立一个(你也可以换个名咯):

① 先到/opt/ros/melodic/share目录下,删除原来的ORB_SLAM3软连接

sudo rm -r ORB_SLAM3

② 对当前工程在/opt/ros/melodic/share目录下建立软连接

sudo ln -s /home/nvidia/ORBSLAM3/Examples/ROS/ORB_SLAM3 /opt/ros/melodic/share/ORB_SLAM3

最后重新编译一下。

3. 测试运行:

#第一个终端
roscore
#第二个终端
rosrun ORB_SLAM3 Mono_Inertial /home/nvidia/ORBSLAM3/Vocabulary/ORBvoc.txt /home/nvidia/ORBSLAM3/Examples/Monocular-Inertial/EuRoC.yaml true
#第三个终端
rosbag play /home/nvidia/Dataset/MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /imu0:=/imu

第三个终端中输入的话题中,模式与包要相一致。


2022.01.24更新:

关于v1.0版本,用Opencv4.0+编译错误的解决方法
https://github.com/UZ-SLAMLab/ORB_SLAM3/issues/442


总结

其实就是OpenCV读矩阵函数因为版本不同导致运行不了,这篇单纯就是个记录吧。

如果碰到这个问题不想再装OpenCV可以尝试将OpenCV输出的格式换成你自己想要/算法要的那个格式,再导进去。

共勉。


Reference:

  1. https://blog.csdn.net/crp997576280/article/details/115690725
  2. https://blog.csdn.net/weixin_44401286/article/details/102752767
  3. 计算机视觉life
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jay_z在造梦

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值