【学习总结】ORBSLAM3使用自己相机数据

本文仅用于自己学习总结。本文档记录如何修改ORBSLAM3的接口,用自己的图片和数据。

单目视觉,无IMU,离线数据运行的配置过程

euroc_examples.sh

首先从euroc_examples.sh这个运行指令改。这个文件在最新版的代码中被删掉了,但通过翻commit的版本,这个文件应该是这个样子:

pathDatasetEuroc='/home/larrydong/codeGit/ORB_SLAM3_larrydong/data' #Example, it is necesary to change it by the dataset path
#------------------------------------
# Monocular Examples
echo "Launching MH01 with Monocular sensor"
./Examples/Monocular/mono_euroc \
	./Vocabulary/ORBvoc.txt \
	./Examples/Monocular/EuRoC.yaml \
	"$pathDatasetEuroc"/MH01 \
	./Examples/Monocular/EuRoC_TimeStamps/MH01.txt \
	dataset-MH01_mono

即运行了mono_euroc程序,输入参数有5个:词袋文件、配置文件、图片数据路径、时间戳文件、输出路径。接下来一个个改。

mono_euroc.cc

从这个文件可以看出,对于单目非IMU的读取,首先是根据一个时间戳文件读取图片:时间戳文件的每一行就是图片路径下每个图片的文件名。因此自己采集的数据需要导出时间戳和图像。

为此写了个简单的代码,将rosbag数据中的图像导出到图片和时间戳文件:
https://github.com/LarryDong/usb_cam_utils/tree/main/image_writer
这里有一个坑,我如果存成.png格式图像,运行时无法初始化。后面存成.bmp格式则正常很多。怀疑是png格式压缩比较离谱?所以后面一律用bmp格式,需要修改对应LoadImages函数里面的加载。

同时代码默认是没有开启可视化的,需要将SLAM系统的false选项设置为true

// ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, false);
ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, true);

对这个文件做完必要的修改后,就是在CMakeLists.txt中增加编译。

CMakeLists.txt

初看这个CMakeLists.txt并编译,没有找到编译后输出的可执行程序在哪里,即euroc_examples.sh的第一行:./Examples/Monocular/mono_euroc。后来发现,在CMakeLists中有一行Set设定了输出路径。这里我进行修改,将输出路径CMAKE_RUNTIME_OUTPUT_DIRECTORY设定为$Project/Apps/build路径,同时增加对应的cpp文件usb_cam.cc

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Apps/build)
add_executable(my_own
    Apps/src/usb_cam.cc
)
target_link_libraries(my_own ${PROJECT_NAME})

camera.yaml

这里修改相机和SLAM的配置文件,首先对相机进行标定获得内参,然后修改对应参数。这里遇到一个坑,p1和p2参数需要设置为0.0,设置为0时运行会报错找不到p1参数。由于是离线模式,fps等参数实际没有用到。

File.version: "1.0"
Camera.type: "PinHole"
Camera1.fx: 1042.7
Camera1.fy: 1044.3
Camera1.cx: 948.5
Camera1.cy: 488.9

Camera1.k1: 0.0055
Camera1.k2: 0.0129
Camera1.p1: 0.0				# 设置为0时运行报错 Camera1.p1 是空,所以改成了0.0
Camera1.p2: 0.0

Camera.width: 1920
Camera.height: 1080
Camera.newWidth: 1920
Camera.newHeight: 1080
# Camera frames per second 
Camera.fps: 20
# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1

TODO:

IMU和在线运行的配置后面再写吧。

猜你喜欢

转载自blog.csdn.net/tfb760/article/details/129364598