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

目录

前言

一、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

 测试效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/951931.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ介绍与使用

RabbitMQ官网 RabbitMQ 介绍 RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;基于 AMQP&#xff08;高级消息队列协议&#xff09;标准&#xff0c;使用 Erlang 编程语言构建。它是消息队列&#xff08;MQ&#xff09;的一种&#xff0c;广泛应用于分布式系统中&#x…

自然语言处理之jieba分词和TF-IDF分析

jieba分词和TF-IDF分析 目录 jieba分词和TF-IDF分析1 jieba1.1 简介1.2 终端下载1.3 基本语法 2 TF-IDF分析2.1 什么是语料库2.2 TF2.3 IDF2.4 TF-IDF2.5 函数导入2.6 方法 3 实际测试3.1 问题解析3.2 代码测试 1 jieba 1.1 简介 结巴分词&#xff08;Jieba&#xff09;是一个…

rust学习——环境搭建

rust安装&#xff1a;https://kaisery.github.io/trpl-zh-cn/ch01-01-installation.html 1、vscode装插件&#xff1a; toml语法支持 依赖管理 rust语法支持 2、创建demo 3、查看目录 4、执行文件的几种方式&#xff1a; rust安装&#xff1a;https://www.rust-lang.org/z…

Opencv查找、绘制轮廓、圆形矩形轮廓和近似轮廓

查找、绘制轮廓、圆形矩形轮廓和近似轮廓 目录 查找、绘制轮廓、圆形矩形轮廓和近似轮廓1 轮廓查找和绘制1.1 轮廓查找1.1.1 函数和参数1.1.2 返回值 1.2 轮廓绘制1.2.1 函数和参数 1.3 步骤1.4 实际测试绘制轮廓 2 绘制近似轮廓2.1 函数和参数2.2 查找特定轮廓2.3 近似轮廓测试…

K8s Pod OOMKilled,监控却显示内存资源并未打满

1. 问题现象 pod一直重启&#xff0c;通过grafana查看&#xff0c;发现内存使用率并没有100%。 2. 排查过程 2.1 describe查看pod最新一次的状态 可以明显看到&#xff0c;最近一次的重启就是因为内存不足导致的。 2.2 describe 查看node节点状态 找到原因了&#xff0c;原来…

Knowledge Editing through Chain-of-Thought

题目 通过思路链进行知识编辑 论文地址&#xff1a;https://arxiv.org/abs/2412.17727 摘要 大型语言模型 (LLM) 在广泛的自然语言处理 (NLP) 任务中表现出卓越的能力。然而&#xff0c;由于频繁重新训练的成本很高&#xff0c;让这些模型与不断发展的世界知识保持同步仍然是一…

C语言Day14(c程序设计小红书+pta)

目录 &#xff08;一&#xff09;求总天数pta 题目说明&#xff1a; 代码实现&#xff1a; 程序分析&#xff1a; &#xff08;二&#xff09;十进制整数转换成R进制数pta 题目说明&#xff1a; 代码实现&#xff1a; 程序分析&#xff1a; &#xff08;三&#xff09;…

G1原理—3.G1是如何提升垃圾回收效率

大纲 1.G1为了提升GC的效率设计了哪些核心机制 2.G1中的记忆集是什么 3.G1中的位图和卡表 4.记忆集和卡表有什么关系 5.RSet记忆集是怎么更新的 6.DCQ机制的底层原理是怎样的 7.DCQS机制及GC线程对DCQ的处理 提升G1垃圾回收器GC效率的黑科技 G1设计了一套TLAB机制 快速…

算法(二)——一维差分、等差数列差分

文章目录 一维差分、等差数列差分一维差分例题&#xff1a;航班预订统计 等差数列差分例题&#xff1a;三步必杀例题&#xff1a;Lycanthropy 一维差分、等差数列差分 一维差分 差分解决的是 区间修改&#xff08;更新&#xff09;问题&#xff0c;特别是多次区间修改问题&…

nexus搭建maven私服

说到maven私服每个公司都有&#xff0c;比如我上一篇文章介绍的自定义日志starter&#xff0c;就可以上传到maven私服供大家使用&#xff0c;每次更新只需deploy一下就行&#xff0c;以下就是本人搭建私服的步骤 使用docker安装nexus #拉取镜像 docker pull sonatype/nexus3:…

StarRocks Awards 2024 年度贡献人物

在过去一年&#xff0c;StarRocks 在 Lakehouse 与 AI 等关键领域取得了显著进步&#xff0c;其卓越的产品功能极大地简化和提升了数据分析的效率&#xff0c;使得"One Data&#xff0c;All Analytics" 的愿景变得更加触手可及。 虽然实现这一目标的道路充满挑战且漫…

安卓app抓包总结(精)

前言 这里简单记录一下相关抓包工具证书的安装 burp证书安装 安装证书到移动设备(安卓7以后必须上传到设备系统根证书上) 导出证书 openssl x509 -inform DER -in cacert.der -out cacert.pem 转换格式 openssl x509 -inform PEM -subject_hash_old -in cacert.pem …

Nginx代理同域名前后端分离项目的完整步骤

前后端分离项目&#xff0c;前后端共用一个域名。通过域名后的 url 前缀来区别前后端项目。 以 vue php 项目为例。直接上 server 模块的 nginx 配置。 server{ listen 80; #listen [::]:80 default_server ipv6onlyon; server_name demo.com;#二配置项目域名 index index.ht…

嵌入式C语言:二维数组

目录 一、二维数组的定义 二、内存布局 2.1. 内存布局特点 2.2. 内存布局示例 2.2.1. 数组元素地址 2.2.2. 内存布局图&#xff08;简化表示&#xff09; 2.3. 初始化对内存布局的影响 三、访问二维数组元素 3.1. 常规下标访问方式 3.2. 通过指针访问 3.2.1. 指向数…

Google发布图像生成新工具Whisk:无需复杂提示词,使用图像和人工智能将想法可视化并重新混合

Whisk 是 Google Labs 的一项新实验&#xff0c;可使用图像进行快速而有趣的创作过程。Whisk不会生成带有长篇详细文本提示的图像&#xff0c;而是使用图像进行提示。只需拖入图像&#xff0c;即可开始创建。 whisk总结如下&#xff1a; Whisk 是 Google 实验室最新的生成图像实…

Linux下jar包脚本工具

Jar包启动、停止、重启 文章目录 Jar包启动、停止、重启1、 新建脚本2、启动服务脚本代码3、停止服务脚本代码4、重启服务脚本5、赋予脚本可执行权利 1、 新建脚本 vim 脚本明字.sh2、启动服务脚本代码 #!/bin/bash# 设置Java应用的名称&#xff08;可根据实际情况修改&#…

相机和激光雷达的外参标定 - 无标定板版本

1. 实现的效果 通过本软件实现求解相机和LiDAR的外参&#xff0c;即2个传感器之间的三维平移[x, y, z]和三维旋转[roll, pitch, yaw]。完成标定后&#xff0c;可将点云投影到图像&#xff0c;效果图如下&#xff1a; 本软件的优势&#xff1a;&#xff08;1&#xff09;无需特…

Github出现复杂问题 无法合并 分支冲突太多 如何复原

目录 问题再现 解决思路 当然我所指的是在 main 分支开一个新的分支 删除本地文件夹 重新克隆 开一个新分支 切换分支 下载远程分支 文件覆盖 合并到主分支 ​​​​​​​问题再现 太复杂了 无法更改 编译器现状 全部崩溃了 无法更改 即使创建一个新的分支也无济于…

uniapp使用chooseLocation安卓篇

本文章全部以高德地图为例 代码 <view class"bottom"><button click"choose">定位</button> </view> choose() {uni.chooseLocation({success: function(res) {console.log(位置名称&#xff1a; res.name);console.log(详细地…

设计模式-结构型-组合模式

1. 什么是组合模式&#xff1f; 组合模式&#xff08;Composite Pattern&#xff09; 是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。换句话说&#xff0c;组合模式允…