ORB-SLAM3运行自制数据集进行定位教程

本文讲述了在公共数据集稀缺的情况下,如何利用OpenCV、ORB-SLAM3和Cmake构建自定义数据集,通过爬虫获取手机录下的应急救援视频,并对视频进行处理,以评估SLAM系统在实际场景中的性能,从而优化模型的过程。
该文章已生成可运行项目,

目前手上有一个特定的任务,做应急救援的视觉SLAM,目前公共数据集比较少,考虑自建数据集,从网络上爬虫火灾、地震的等手机录制的视频,应用一些现有成熟ORB-SLAM3系统到这个数据集上看效果,然后根据效果得到一些模型改进思路。首先制作相机标定文件,然后使用Cmake工程结合ORB-SLAM3,接着爬虫获取智能手机录制应急救援场景的视频文件,对应时间戳信息,将视频分成多帧图片,最后得到自制数据集。

一、系统配置

系统版本
ubuntu20.04
OpenCV3.4.13
Eigen3.2.10
Pangolin0.6

二、制作数据集

1、脚本编写

#include <opencv2/opencv.hpp>
#include "System.h"
#include <string>
#include <chrono>   // for time stamp
#include <iostream>
using namespace std;
// 参数文件与字典文件
// 如果你系统上的路径不同,请修改它
string parameterFile = "./test.yaml";
string vocFile = "./Vocabulary/ORBvoc.txt";
// 视频文件,若不同请修改
string videoFile = "./test.mp4";
int main(int argc, char **argv) {
 // 声明 ORB-SLAM4 系统
    ORB_SLAM2::System SLAM(vocFile, parameterFile, ORB_SLAM2::System::MONOCULAR, true);
 // 获取视频图像
  cv::VideoCapture cap(videoFile);    // 参数0为usb相机
  // 记录系统时间
  auto start = chrono::system_clock::now();

while (1) {
        cv::Mat frame;
        cap >> frame;   // 读取相机数据

        if ( frame.data == nullptr )
            continue;
        // rescale because image is too large
        cv::Mat frame_resized;
        cv::resize(frame, frame_resized, cv::Size(640,360));
        auto now = chrono::system_clock::now();
        auto timestamp = chrono::duration_cast<chrono::milliseconds>(now - start);
        SLAM.TrackMonocular(frame_resized, double(timestamp.count())/1000.0);
        cv::waitKey(30);
    }
    return 0;


}

2、配置文件编写

%YAML:1.0
 
#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
 
# Camera calibration and distortion parameters (OpenCV) 
Camera.fx: 500.0
Camera.fy: 500.0
Camera.cx: 320.0
Camera.cy: 240.0
 
Camera.k1: 0.262383
Camera.k2: -0.953104
Camera.p1: -0.005358
Camera.p2: 0.002628
Camera.k3: 1.163314
 
# Camera frames per second 
Camera.fps: 30.0
 
# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 0
 
#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------
 
# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000
 
# ORB Extractor: Scale factor between levels in the scale pyramid     
ORBextractor.scaleFactor: 1.2
 
# ORB Extractor: Number of levels in the scale pyramid    
ORBextractor.nLevels: 8
 
# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast            
ORBextractor.iniThFAST: 10
ORBextractor.minThFAST: 5
 
#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize: 2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500

将两个文件复制到ORB_SLAM3根目录下
在这里插入图片描述

3、录制视频素材

(1)将手机横向拍摄
(2)开始拍摄时,首先手机左右缓慢水平移动,为了是ORB-SLAM3初始化正常,像“螃蟹”一样左右移动小步即可
(3)五秒左右,再慢慢往前走,不要走的太快,转弯时不要太快,防止跟踪丢失
(4)录制完成后,将其复制到ORB_SLAM3文件下,重命名为test.mp4

4、修改CMakeLists.txt

修改ORB_SLAM3里面的CMakeLists.txt,添加如下代码:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
add_executable(test test.cpp)
target_link_libraries(test ${PROJECT_NAME})

在这里插入图片描述

5、编译运行

cd ORB_SLAM3
mkdir build
cd build
cmake ..
make -j
cd ..
./test

在这里插入图片描述

本文章已经生成可运行项目
### 安装必要的依赖 为了在 Ubuntu 18.04 上成功配置并运行 ORB-SLAM3 数据集测试,首先需要安装一系列依赖项。这包括但不限于 `libssl-dev` 和 Boost 库。 对于 OpenSSL 开发库的安装可以通过简单的命令完成: ```bash sudo apt-get install libssl-dev ``` Boost 是 C++ 的一个重要第三方库,在某些情况下即使官方文档未提及也需要手动安装以避免编译错误。获取 Boost 可通过其官方网站 http://www.boost.org/users/download/ 下载指定版本,并按照如下指令解压和安装[^2]: ```bash tar -xvf boost_1_77_0.tar.gz cd ./boost_1_77_0 ./bootstrap.sh sudo ./b2 install ``` ### 配置 Eigen 库 由于较新的 Eigen 版本可能与特定 SLAM 实现存在兼容性问题,因此建议安装一个经过验证可以工作的旧版——Eigen 3.2.1。可以从 Eigen 官方网站下载源码包后依照下面的过程来构建和安装该库[^3]: ```bash # 解压缩Eigen源代码 tar xf eigen-eigen-*.tar.bz2 cd eigen-eigen-* # 创建并进入build目录准备编译 mkdir build && cd build # 清除之前的编译残留以防干扰新一次的编译过程 rm -rf * # 使用CMake工具生成Makefile文件 cmake .. # 编译项目 make # 将编译好的库文件复制到系统的标准位置以便其他程序能够找到它们 sudo make install ``` 值得注意的是,在此过程中如果遇到任何有关于找不到 Macro.h 文件的问题,则可能是由于 Pangolin 构建时未能正确识别已安装的 Eigen 路径所引起的;此时应当确保清理掉先前存在的 build 文件夹再尝试重新编译。 ### 获取 ORB-SLAM3 并设置环境变量 接着便是从 GitHub 或者作者提供的链接处克隆 ORB-SLAM3 源码仓库以及相关联的子模块。之后修改默认提供的 shell script (`build.sh`) 来适应个人需求比如调整线程数为 `-j4` 加速编译流程。 最后一步就是实际执行这个脚本来启动整个项目的编译工作了: ```bash chmod +x build.sh ./build.sh ``` 当一切顺利完成后就可以加载想要使用的数据集来进行实验啦!
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客范儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值