黑芝麻A1000-Ubuntu20.04(三)ORB_SLAM3编译运行

0 前言

在BST A1000 Linux SDK V2.3.1.2中,黑芝麻团队已经导入了github上的ORB_SLAM3工程,我们只需要在容器中编译,再放进开发板上运行即可。

这里为了方便理解操作,我先将ORB-SLAM3从容器中拷贝到宿主机,在宿主机上简单修改一些代码,再放进容器中编译,最后拷贝到开发板上运行。

容器:a1000b-sdk-fad-2.3.1.2 (创建过程看我上一篇)
宿主机:台式电脑 Ubuntu20.04系统
开发板:A1000(烧录的SDK版本v2.3.1.2)

1 在容器中查找ORB-SLAM3

1)运行容器

docker exec -it a1000b-sdk-fad-2.3.1.2 bash

2)查找SLAM位置

find / -name "ORB-SLAM3"

在这里插入图片描述

3)查看SLAM文件结构

cd /opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/SLAM/ORB-SLAM3
ls

在这里插入图片描述

2 将ORB-SLAM3从容器中拷贝到宿主机

从容器中把ORB-SLAM3拷贝到宿主机上:

docker cp a1000b-sdk-fad-2.3.1.2:/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/SLAM/ORB-SLAM3 /home/stk/heizhima

在这里插入图片描述

3 在宿主机中简单修改ORB-SLAM3

在/ORB-SLAM3/src/System.cc添加一行消息:

cout << "**************hello A1000!!!***************" <<endl;

在这里插入图片描述保存。

4 将修改后的ORB-SLAM3从宿主机拷贝到容器中编译

为了区分,将ORB-SLAM3改名为ORB-SLAM3-one

docker cp /home/stk/heizhima/ORB-SLAM3-one a1000b-sdk-fad-2.3.1.2:/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/SLAM

在这里插入图片描述此时,容器中就能看到ORB-SLAM3-one
在这里插入图片描述
在容器中编译:

cd ORB-SLAM3-one
chmod +x build.sh
./build.sh

在这里插入图片描述

5 将编译好的ORB-SLAM3-one拷贝到宿主机

终端输入:

docker cp a1000b-sdk-fad-2.3.1.2:/opt/bstos/2.3.1.2/sysroots/aarch64-bst-linux/usr/include/src/SLAM/ORB-SLAM3-one /home/stk/heizhima

在这里插入图片描述

6 将相关文件从宿主机拷贝到开发板上

1)启动开发板,在userdata中创建ORBSLAM3文件夹,用于存放slam3工程相关文件:

adb shell
cd userdata
mkdir ORBSLAM3

在这里插入图片描述
2)在宿主机的ORB-SLAM3-one中进入终端,拷贝lib文件并创建库链接:
黑芝麻A1000链接的库路径是/usr/lib(可通过指令echo $LD_LIBRARY_PATH查询):
在这里插入图片描述

给的参考方法也是直接拷贝到/usr/lib/路径中

adb push lib/libORB_SLAM3.so* /usr/lib/
adb push Thirdparty/DBoW2/lib/libDBoW2.so* /usr/lib/
adb push Thirdparty/g2o/lib/libg2o.so* /usr/lib/
adb push lib/libautoplt_orbslam_proto.so* /usr/lib/

由于根目录存储空间有限,且不利于后续增减,这里我做了更改:
在A1000的/userdata/ORBSLAM3中创建lib文件夹,将编译产生的库文件拷贝到该文件夹中:

adb push lib/libORB_SLAM3.so* /userdata/ORBSLAM3/lib/
adb push Thirdparty/DBoW2/lib/libDBoW2.so* /userdata/ORBSLAM3/lib/
adb push Thirdparty/g2o/lib/libg2o.so* /userdata/ORBSLAM3/lib/
adb push lib/libautoplt_orbslam_proto.so* /userdata/ORBSLAM3/lib/

在这里插入图片描述
此时,A1000的/userdata/ORBSLAM3/lib/中就有了所需的库文件
在这里插入图片描述
接着,在保留原库路径基础上,添加/userdata/ORBSLAM3/lib/新的库路径:

export LD_LIBRARY_PATH=/userdata/ORBSLAM3/lib:$LD_LIBRARY_PATH

查看A1000库路径链接,增加了/userdata/ORBSLAM3/lib:

echo $LD_LIBRARY_PATH

在这里插入图片描述

3)在宿主机的ORB-SLAM3-one中进入终端,拷贝以下文件:

adb push Examples/Monocular/mono_euroc /userdata/ORBSLAM3/
adb push Examples/Monocular/mono_kitti /userdata/ORBSLAM3/
adb push Examples/Monocular/mono_bst_dataset /userdata/ORBSLAM3/
adb push Examples/Monocular/mono_bst_realtime /userdata/ORBSLAM3/
adb push Examples/Monocular/EuRoC_TimeStamps/EuRoC_TimeStamps /userdata/ORBSLAM3/
adb push Examples/Monocular/EuRoC.yaml /userdata/ORBSLAM3/
adb push Examples/Monocular/KITTI00-02.yaml /userdata/ORBSLAM3/
adb push Examples/Monocular/KITTI03.yaml /userdata/ORBSLAM3/
adb push Examples/Monocular/KITTI04-12.yaml /userdata/ORBSLAM3/
adb push Examples/Monocular/BST-03.yaml /userdata/ORBSLAM3/
adb push Vocabulary /userdata/ORBSLAM3/

4)下载数据集并拷贝到开发板上
Euroc数据集下载地址
Kitti数据集下载地址
这里下载Euroc数据集的MH_03_medium为例。

先在开发板中创建一个文件夹来存放数据集

cd ORBSLAM3
mkdir data

在这里插入图片描述
将数据集拷贝到开发板上:

adb push MH_03_medium /userdata/ORBSLAM3/data/

在这里插入图片描述

6 在开发板中运行

在开发板中进入ORBSLAM3:

./mono_euroc ./Vocabulary/ORBvoc.txt EuRoC.yaml ./data/MH_03_medium ./EuRoC_TimeStamps/MH03.txt 0

最后一个参数表示是否启用可视化工具,不启用为0,启用为1,如果启用了可视化工具,需
要在其配置文件EuRoC.yaml中配置可视化数据发送频率。

Viewer.IntervalImage: 1.0 //发送图像间隔
Viewer.IntervalMatrix: 0.3 //发送目标位姿间隔
Viewer.IntervalMapPoints: 0.5 //发送点云地图间隔

在使用可视化功能时,请务必检查配置文件中的上述配置参数是否存在、格式是否正确(保留一位小数且大于0),且在使用可视化功能时,需要配置cyber环境。(SDK v2.3.1.2无需配置)

没接显示器下,成功运行结果:
在这里插入图片描述在这里插入图片描述
可以将KeyFrameTrajectory.txt拷贝出来,查看:

adb pull /userdata/ORBSLAM3/KeyFrameTrajectory.txt /home/stk/heizhima/ORB-SLAM3-one/

在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值