ORB-SALM3配置流程及问题记录

embedded/2025/1/12 3:09:02/

目录

前言

一、OPB-SLAM3基本配置流程

1.下载编译Pangolin

二、ORB-SLAM3配置

1.下载源码

2.创建ROS工作空间并编译ORB-SLAM3-ROS源码

3.尝试编译

三、运行测试


一、OPB-SLAM3基本配置流程

ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM(Simultaneous Localization and Mapping,即同时定位与地图构建)系统。本项目场景基于ubuntu18.04在ROS-noetic基础上进行配置。

1.下载编译Pangolin

Pangolin 是一个轻量级、跨平台的库,主要用于3D、数值或视频程序和算法的原型设计。它在计算机视觉领域被广泛使用,旨在简化数据可视化的过程。主要用于算法开发中的调试过程当中,具有丰富的图像界面;

下面为安装流程:

sudo apt-get install libglew-dev
sudo apt-get install cmake
sudo apt-get install libpython2.7-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
sudo apt-get install libdc1394-22-dev libraw1394-dev
sudo apt-get install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev# 下载并编译Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
sudo make install

测试安装是否成功:

在当前目录下测试输入:

./HelloPangolin

若能出现三色立方体,说明安装成功;

 

二、ORB-SLAM3配置

1.下载源码

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

此时代码包括完整的ORB-SALM项目代码,在ROS环境下,只需部分编译对应部分即可。

2.创建ROS工作空间并编译ORB-SLAM3-ROS源码

新建ROS工作空间:

mkdir -p ~/orbslam3_ws/src
cd ~/orbslam3_ws/
catkin_make
source devel/setup.bash

生成功能包框架:

cd src
catkin_create_pkg orbslam3_ros std_msgs rospy roscpp
cd ..

将ORB-SLAM3的ROS源码复制到工作空间:

cd ~/orbslam3_ws/src/orbslam3_ros
cp -r ~/ORB_SLAM3/Examples/ROS/ORB_SLAM3/* .

 关注CMakeLists.txt中OpenCV版本:

find_package(OpenCV 4.2 REQUIRED)

这里对于opencv的版本要求要具体情况具体分析,如果编译成功,运行出现以下报错,可怀疑为opencv版本问题:

(1)错误信息指出 ORB-SLAM3 在运行过程中遇到了一个 OpenCV 异常,具体是在 setSize 函数中一个断言失败了。

what():  OpenCV(4.6.0) /home/roy/opencv-4.6.0/modules/core/src/matrix.cpp:246: error: (-215:Assertion failed) s >= 0 in function 'setSize'

(2) 这个错误信息再次表明 ORB-SLAM3 在运行过程中遇到了内存不足的问题,导致程序异常终止。具体错误信息是 OpenCV 无法分配足够的内存来处理数据。这通常是因为数据集过大或配置参数不合理导致的,也有可能是版本不匹配。

  what():  OpenCV(4.6.0) /home/roy/opencv-4.6.0/modules/core/src/alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 31420881834160 bytes in function 'OutOfMemoryError'

在修改opencv版本前,可优先猜测计算负荷过重问题,修改特征点数目或分辨率即可;

修改 TUM2.yaml 文件(依据实际使用的配置文件)中的 ORBextractor.nFeatures和图像分辨率参数:

ORBextractor.nFeatures: 500  # 原来是 1000
Camera.width: 320  # 原来是 640
Camera.height: 240  # 原来是 480

3.尝试编译

cd ~/orbslam3_ws
catkin_make
source devel/setup.bash

三、运行测试

首先下载TUM数据集 https://vision.in.tum.de/data/datasets/rgbd-dataset/download 

注意下载tag格式或ROS-bag格式,此处以tag格式为例,下载完成后解压是一个文件夹格式:

其中,assocoate.txt文件为深度图像和RGB图像的时间戳对齐文件,通过associate.py生成:

打开终端,进入到 associate.py  所在目录,即/ORB_SLAM3

/Examples/RGB-D/,之后运行:

python associate.py ../../data/rgbd_dataset_freiburg2_pioneer_360/rgb.txt ../../data/rgbd_dataset_freiburg2_pioneer_360/depth.txt > associations.txt  

其中文件路径以实际情况为准,注意associate.txt文件要与rgb.txt和depth.txt放在同一文件夹下。

可以编写launch文件进行测试:

<launch><!--<node pkg="rosbag" type="play" name="playbag" args="/home/spurs/dataset/rgbd_dataset_freiburg1_plant.bag" />--><node pkg="rviz" type="rviz" name="rviz" args="-d $(find orb_slam3)/rviz/orb_viz_rgbd_mapping.rviz" /><node pkg="orb_slam3" type="ros_rgbd_mapping" name="orb_slam3" args="$(find orb_slam3)/Examples/RGB-D/TUM2.yaml $(find orb_slam3)/Vocabulary/ORBvoc.txt /home/roy/orbslam_ws/dataset/rgbd_dataset_freiburg1_desk" output="screen" /></launch>

注意更改数据路径;

也可以参照官方README文件内容进行测试:

纯单目

rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/image_raw

纯双目

rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false
rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw

RGB-D

rosrun ORB_SLAM3 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
rosbag play rgbd_dataset_freiburg1_xyz.bag

 测试效果:


http://www.ppmy.cn/embedded/153187.html

相关文章

istoreos安装tailscale命令

通用Linux安装命令 curl -fsSL https://tailscale.com/install.sh | sh使用官方软件源安装 opkg update opkg install curl curl -fsSL https://pkgs.tailscale.com/stable/iStoreOS/$(opkg print-architecture).no_armor.gpg | sudo tee /usr/share/keyrings/tailscale-arch…

备考蓝桥杯:顺序表详解(静态顺序表,vector用法)

目录 1.顺序表的概念 2.静态顺序表的实现 总代码 3.stl库动态顺序表vector 测试代码 1.顺序表的概念 要理解顺序表&#xff0c;我们要先了解一下什么是线性表 线性表是n个具有相同特征的数据元素的序列 这就是一个线性表 a1是表头 a4是表尾 a2是a3的前驱 a3是a2的后继 空…

【前端知识】手搓微信小程序

微信小程序开发介绍 知识概述语法解析一、WXML&#xff08;WeiXin Markup Language&#xff09;二、WXSS&#xff08;WeiXin Style Sheet&#xff09;三、JavaScript四、JSON WXML 标签核心JS语法1. 页面配置与生命周期2. 数据绑定3. 事件处理4. 微信小程序API调用5. 模块化6. …

微信小程序防止重复点击事件

直接写在app.wpy里面&#xff0c;全局可以调用 // 防止重复点击事件preventActive(fn) {const self this;if (this.globalData.PageActive) {this.globalData.PageActive false;if (fn) fn();setTimeout(() > {self.globalData.PageActive true;}, 3000); //设置该时间内…

直流无刷电机控制(FOC):电流模式

目录 概述 1 系统框架结构 1.1 硬件模块介绍 1.2 硬件实物图 1.3 引脚接口定义 2 代码实现 2.1 软件架构 2.2 电流检测函数 3 电流环功能实现 3.1 代码实现 3.2 测试代码实现 4 测试 概述 本文主要介绍基于DengFOC的库函数&#xff0c;实现直流无刷电机控制&#x…

更改Endnote在word中的字体输出样式、段落格式问题等

留下记录&#xff0c;以防忘记&#xff01; endnote插入参考文献后的对齐方式和缩进空格 调整EndNote的字体、字号 具体细节后续再完善。

Spring Boot中的依赖注入是如何工作

Spring Boot 中的依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是通过 Spring 框架的核心机制——控制反转&#xff08;Inversion of Control&#xff0c;IOC&#xff09;容器来实现的。Spring Boot 基于 Spring Framework&#xff0c;在应用中自动…

SpringCloud系列教程:微服务的未来(九)认识微服务、微服务拆分

在这篇博客中&#xff0c;我们将深入探讨微服务的基本概念、其核心优势、实现微服务架构时的关键技术与挑战&#xff0c;以及如何在实际项目中应用微服务。通过了解微服务的原理与应用场景&#xff0c;你将能够更好地理解它如何帮助企业解决系统复杂性&#xff0c;提升开发效率…