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

在这里插入图片描述

本文章已经生成可运行项目
<think>好的,我现在需要帮助用户了解如何使用ORB-SLAM3运行KITTI数据集。首先,我应该回顾一下用户提供的引用内容,看看里面有哪些有用的信息。 用户引用了三篇资料,其中提到了ORB-SLAM2的运行命令,包括单目模式、词袋参数文件和数据集路径。还有关于evo工具安装和使用的内容,以及ORB-SLAM3适配KITTI数据集的操作步骤。用户现在关心的是ORB-SLAM3的具体配置和运行方法,可能还涉及轨迹评估。 首先,我应该整理ORB-SLAM3的基本运行步骤。通常,运行SLAM算法需要几个步骤:环境配置、数据集准备、修改配置文件、执行命令、结果评估。用户提到的引用中,ORB-SLAM2的命令分成四部分,包括可执行文件、词袋参数、数据集路径,这可能对ORB-SLAM3也有参考价值。 ORB-SLAM3支持多种传感器模式,比如单目、双目、RGB-D等。KITTI数据集主要提供双目和激光雷达数据,但ORB-SLAM3可能更适合使用双目或者单目视觉。需要确认ORB-SLAM3对KITTI的支持情况,可能需要调整配置文件中的相机参数,比如基线、分辨率、内参等。 接下来,数据集准备。KITTI数据集需要按照一定的结构存放,比如图像序列、时间戳文件。用户可能需要下载数据集,并组织成ORB-SLAM3要求的格式。引用3中提到适配操作,可能包括时间戳的转换或路径设置。 然后是编译和安装ORB-SLAM3。需要确保依赖项安装正确,比如Pangolin、OpenCV、Eigen等。如果用户遇到编译错误,可能需要检查这些依赖的版本是否兼容。 修改配置文件部分,可能需要调整相机参数文件,比如KITTI的yaml文件。例如,在ORB-SLAM3的配置目录中,找到KITTI的示例配置文件,检查相机内参、畸变参数、图像尺寸等是否与数据集一致。如果有双目配置,还需要设置左右目图像的路径和基线长度。 运行命令部分,根据ORB-SLAM3的不同模式(单目、双目、立体惯性等),执行相应的可执行文件。例如,运行双目模式可能需要调用stereo_kitti的可执行文件,并传入词汇表文件、配置文件和数据集路径。引用1中的ORB-SLAM2命令结构可以作为参考,但ORB-SLAM3可能有不同的参数顺序或可执行文件名称。 轨迹评估方面,用户可能需要使用evo工具,像在ORB-SLAM2中一样。保存轨迹文件后,用evo的指令计算绝对位姿误差或绘制轨迹。引用2详细介绍了evo的使用方法,包括不同数据集的评估步骤,这可能对用户有帮助。 用户可能遇到的常见问题包括:数据集路径错误、配置文件参数不匹配、依赖库版本问题、轨迹保存格式不正确导致evo无法解析等。需要提醒用户注意这些点,并提供解决建议,比如检查路径是否正确,确认时间戳文件存在,或者重新编译代码。 另外,引用3提到ORB-SLAM3适配KITTI的具体操作,可能包括修改数据集加载部分的代码,或者提供特定的启动脚本。用户可能需要参考相关的博客或文档进行调整,例如处理双目图像序列或调整时间戳同步。 总结下来,回答的结构应该是分步骤的:环境准备、数据集下载与配置、修改参数文件、运行命令、评估结果,最后是常见问题。同时,需要引用提供的资料,特别是关于evo工具的使用和ORB-SLAM3适配的部分。确保用户能够按照步骤操作,并处理可能出现的错误。</think>### 使用ORB-SLAM3运行KITTI数据集步骤详解 #### 1. **环境准备** - **安装依赖项** 确保已安装`Pangolin`、`OpenCV`、`Eigen3`和`DBoW2`等依赖库,并完成ORB-SLAM3的编译: ```bash git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git cd ORB_SLAM3 chmod +x build.sh ./build.sh ``` - **安装evo工具** 用于轨迹评估,通过以下命令安装: ```bash pip install evo --upgrade --no-binary evo ``` #### 2. **数据集准备** - **下载KITTI数据集** 从[KITTI官网](http://www.cvlibs.net/datasets/kitti/eval_odometry.php)下载双目图像序列(如`data_odometry_gray`)和对应的真值轨迹文件(如`poses`)[^3]。 - **组织数据集结构** 确保图像按以下格式存放: ``` KITTI_ROOT ├── sequences │ └── 00 │ ├── image_0 # 左目图像 │ ├── image_1 # 右目图像 │ └── times.txt └── poses └── 00.txt # 真值轨迹 ``` #### 3. **修改配置文件** - **调整相机参数** 在`ORB_SLAM3/Examples/Stereo/KITTI00-02.yaml`中,修改相机内参、畸变系数和基线等参数,需与KITTI相机的标定文件一致。例如: ```yaml Camera.fx: 718.856 Camera.fy: 718.856 Camera.cx: 607.1928 Camera.cy: 185.2157 Camera.bf: 0.53716 # 基线 × 焦距 ``` #### 4. **运行ORB-SLAM3** - **执行双目模式** 使用以下命令启动: ```bash ./Examples/Stereo/stereo_kitti \ Vocabulary/ORBvoc.txt \ Examples/Stereo/KITTI00-02.yaml \ /path/to/KITTI_ROOT/sequences/00 ``` 参数依次为:词袋文件、配置文件、数据集路径[^1]。 #### 5. **轨迹评估** - **保存ORB-SLAM3输出轨迹** 运行时会生成`CameraTrajectory.txt`,需将其转换为KITTI格式(每行12个数值,表示3D位姿)。 - **使用evo计算误差** 执行以下命令对比估计轨迹与真值: ```bash evo_ape kitti KITTI_gt.txt ORB-SLAM3_traj.txt -va --plot ``` 此指令计算绝对位姿误差(APE)并可视化结果[^2]。 --- #### **常见问题与解决** 1. **图像路径错误** - 现象:程序报错`Unable to load image at path...` - 解决:检查`KITTI_ROOT`路径是否正确,确保图像文件名按序号排列(如`000000.png`)。 2. **轨迹格式不兼容** - 现象:evo无法解析轨迹文件 - 解决:将轨迹文件转换为KITTI标准格式,或使用`evo_traj kitti`指令强制转换。 3. **相机参数不匹配** - 现象:跟踪丢失或地图漂移 - 解决:核对`KITTI00-02.yaml`中的`fx/fy/cx/cy/bf`是否与数据集标定一致[^3]。 ---
评论 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、付费专栏及课程。

余额充值