ORB_SLAM3运行EuRoC、TUM数据集和自己准备的单目鱼眼相机图像

        ORB_SLAM3首次加入了鱼眼相机支持。我们想要使用自己的鱼眼相机图片序列测试对应效果,需要做一定的准备和处理:

目录

一、ORB_SLAM3下载和编译

1.1  安装

1.2  编译:直接./build.sh卡死

二、运行EuRoC数据集

2.1  数据集下载

2.2  运行数据集

2.3  运行命令

三、运行TUM数据集

3.1  TUM数据集下载

3.2  数据集运行

3.3  运行命令

四、单目鱼眼序列要求

五、自己的单目序列运行


一、ORB_SLAM3下载和编译

1.1  安装

        官网地址:

GitHub - UZ-SLAMLab/ORB_SLAM3: ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

        找一个合适的文件夹,运行终端:

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3

        下载好的文件夹名称为ORB_SLAM3.

        github上有需要安装的库,可以参考我的教程:

ubuntu升级eigen到3.4.0_eigen3.4_浅梦语11的博客-CSDN博客

ubuntu安装Sophus_浅梦语11的博客-CSDN博客

ubuntu16.04安装Pangolin库_浅梦语11的博客-CSDN博客

Ubuntu16.04 C++安装opencv教程_浅梦语11的博客-CSDN博客

        注意:Eigen不能安装3.4.0, 可能会报错TensorXXX的,网上多是 没有文件 的报错,但如果安装3.4.0报错为:Eigen/CXX11/src/Tensor/TensorBlock.h:1303:7: error: the value of ‘j’ is not usable in a constant expression

        实际是因为版本和tensorflow不对应导致的,找了半天发现一个说安装3.3.7版本的可以。安装后不报错。

1.2  编译:直接./build.sh卡死

        官网命令:

cd ORB_SLAM3
chmod +x build.sh
./build.sh

        但是这个一般的电脑容易卡死。实际可以打开ORB_SLAM3文件夹主目录内的build.sh文件:这个文件就是编译的汇总文件,其文件内容为:

echo "Configuring and building Thirdparty/DBoW2 ..."

cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

cd ../../g2o

echo "Configuring and building Thirdparty/g2o ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

cd ../../Sophus

echo "Configuring and building Thirdparty/Sophus ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

cd ../../../

echo "Uncompress vocabulary ..."

cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..

echo "Configuring and building ORB_SLAM3 ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4

        实际前面几个库的编译都很容易,最后一行的ORBSLAM3的make -j4容易卡死。

        只需要将最后一行改为make,不加选项即可。编译应该会慢一些,但是不会卡死。

二、运行EuRoC数据集

2.1  数据集下载

        参考我的博客:ORB_SLAM2下载编译及运行EuRoC数据集_euroc数据集下载_浅梦语11的博客-CSDN博客

         数据集官网地址为:

kmavvisualinertialdatasets – ASL Datasets

        下载一个ASL Dataset Format就行。解压出一个mav0文件夹即可。例如,我们下载Machine Hall01数据集,解压到MH01文件夹内。

2.2  运行数据集

         运行这些数据集可以用Examples文件夹内的示例。使用可执行文件mono_euroc

         

        可执行文件mono_euroc有四个输入参数:词库、相机配置文件yaml、数据集序列地址、数据集对应时间戳文件(.txt)。代码为:

./Examples/Monocular/mono_euroc 词库文件.txt 配置文件.yaml 数据集序列 数据集对应时间戳.txt

        其中,词库文件可以用自带的,位于ORB_SLAM3/Vocabulary文件夹内的ORBvoc.txt文件。这个文件在编译的时候有一行命令是解压这个文件夹内的压缩文件,解压缩出来就是这个词库文件。后续其他的数据集也可以使用这个文件。

        填入代码为:

./Vocabulary/ORBvoc.txt

         相机配置文件yaml,在ORB_SLAM3/Examples/Monocalur/ 文件夹内有不少,会写明相机的一些类型、参数等,大部分都是单目相机,RealSense_T265.yaml文件内是鱼眼相机(Camera.type: "KannalaBrandt8")。在EuRoC数据集,用EuRoC.yaml文件就行,内容为:

        对应应该填入:

./Examples/Monocular/EuRoC.yaml

         数据集地址,写到mav0文件夹上一级就行,例如我们解压缩mav0到MH01文件夹内,则对应应该输入的地址为   

/home/  /xxxxx/MH01

        时间戳文件,为.txt文件,在ORB_SLAM3/Examples/Monocalur/ 文件夹内有两个数据集的(RuRoC和TUM),分别放在EuRoC_TimeStamps和TUM_TimeStamps文件夹内。这一节用EuRoC数据集的MH01数据集,则对应文件为:

./Examples/Monocular/EuRoC_TimeStamps/MH01.txt

2.3  运行命令

        汇总得到,总的命令为:

./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml 数据集地址/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt

三、运行TUM数据集

3.1  TUM数据集下载

        官网:

Computer Vision Group - Datasets - Visual-Inertial Dataset

         我下载的corridor4的512x512,就是第四行第四个文件。解压到对应文件夹,解压出一个dataset-corridor4_512_16文件夹:

3.2  数据集运行

        数据集用可执行文件mono_tum_vi。与前面差不多,参数也是四个。

./Examples/Monocular/mono_tum_vi 词库文件.txt 配置文件.yaml 数据集序列 数据集对应时间戳.txt

        第一个不变,第二个配置文件改为同文件夹的./Examples/Monocular/TUM1.yaml文件。

        数据集序列需要具体到cam1内的data(mav0内的一个文件夹),对应的数据集时间戳文件于./Examples/Monocular/TUM_TimeStamps/文件夹内,根据对应corridor4数据集的512分辨率版本选择txt文件为:

./Examples/Monocular/TUM_TimeStamps/dataset-corridor4_512.txt

3.3  运行命令

        最终运行命令为:

./Examples/Monocular/mono_tum_vi ./Vocabulary/ORBvoc.txt ./Examples/Monocular/TUM1.yaml 数据集地址/dataset-corridor4_512_16/mav0/cam1/data ./Examples/Monocular/TUM_TimeStamps/dataset-corridor4_512.txt

        因为时间戳对应的图片名称是cam1文件夹内的,而不是cam0内的。TUM数据集是双目鱼眼相机+IMU的数据。

        改一改数据集地址就行

四、单目鱼眼序列要求

        通过前面操作,其实可以看出改动的基本就是数据集地址,数据集时间戳文件。当然其实相机文件也是要改的,改成对应相机的参数。

        单目鱼眼相机用的是可执行文件mono_tum_vi。需要的数据集就是一个全是png图片的文件夹。要求为:

        1.文件内为png图片

        2.png图片名为20位的时间戳(实际名字类似12345678912345678900.png)

        那么实际对应的时间戳文件(.txt),包含的就是时间戳,一行一个20位的时间戳,实际运行用时间戳+‘.png’就是图片名称。

        那么我们需要准备一个文件夹,放好存储好的图片,要求20位数字名称的png图片,类似:

        然后创建一个txt,内容为: (这个时间戳有实际的就用实际的,要不只有不同图的位姿变换是准的)

...
00000000123400000000
00000000123500000000
00000000123600000000
00000000123700000000
...

        假设数据集文件夹为:/home/xxx-username/slam/000

        时间戳文件放到了原先的./Examples/Monocular/文件夹内新创建的my_TimeStamps文件夹内

        配置文件为my.yaml

五、自己的单目序列运行

        对应运行命令为:

./Examples/Monocular/mono_tum_vi ./Vocabulary/ORBvoc.txt ./Examples/Monocular/配置文件.yaml 数据集地址 时间戳文件.txt

        参考四的位置,为:

./Examples/Monocular/mono_tum_vi ./Vocabulary/ORBvoc.txt ./Examples/Monocular/my.yaml /home/xxx-username/slam/000 ./Examples/Monocular/my_TimeStamps/my.txt

        运行结果为:

 

        最后有平均用时之类的。 

        产生的轨迹文件为:ORB_SLAM3主文件夹内的CameraTrajectory.txt和KeyFrameTrajectory.txt。其中,以CameraTrajectory.txt为例,一行8个数据,代码中代表:

lT  twc(0)  twc(1)  twc(2)  q.x  q.y  q.z  q.w

        其中,lT为时间戳,q为单位四元数,twc为平移向量

猜你喜欢

转载自blog.csdn.net/weixin_43907136/article/details/130273186