Ubentu18.0+ORBSLAM2

Ubentu18.0+ORB-SLAM2+摄像头

引言:

​ 在视觉同步定位与地图构建(Simultaneous Localization and Mapping, SLAM)领域,ORB-SLAM2系统的出现标志着重要的技术进步。这个著名的SLAM系统由Juan D. Tardós、Raúl Mur-Artal等人开发,引入了多项创新技术,能够在不同环境下实现高精度和高效率的实时定位和地图构建。ORB-SLAM2不仅在科学研究中扮演着关键角色,它的高灵活性和广泛的适用性也使其在自动驾驶、机器人导航以及增强现实等多个行业中有着广泛的应用前景。

本次实验的主要任务是了解和掌握ORB-SLAM2的核心内容、搭建ORB-SLAM2环境、并成功运行TUM数据集,进一步扩展到使用标定摄像头采集的数据进行实时环境检测。通过这一系列的实验步骤,不仅可以深入理解ORB-SLAM2的工作原理和强大功能,而且对于未来在更复杂的实际场景中的视觉SLAM应用有重要的启示和指导意义。

希望你在本次学习过后,能够有一定的收获!!!

推荐歌曲—Falling Down

​ 冲啊!!!! ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶

文章目录

  • Ubentu18.0+ORB-SLAM2+摄像头
    • 一、任务介绍
    • 二、ORB-SLAM2相关介绍
      • 1. 特点
      • 2. 应用
        • 机器人导航
        • 增强现实
        • 移动增强现实应用
      • 3. 发展
    • 三、ORB-SLAM2 环境搭建
      • 1、安装工具
      • 2、安装Pangolin
      • 3、安装Eigen
      • 4、安装ORB_SLAM2
      • 下载ORB_SLAM2源代码:
      • 准备编译环境:
      • 编译ORB_SLAM2:
      • 在ROS中编译ORB_SLAM2:
      • 加速构建过程:
    • 四、跑通TUM数据集
    • 五、摄像头实时检测
      • 1. 修改标定文件
      • 2.查看摄像头话题
      • 3.修改代码
      • 4.运行指令
    • 七、心得总结

一、任务介绍

  1. 了解ORBSLAM2的相关内容
  2. 使用ORBSLAM2跑通TUM数据集
  3. 使用将标定后的摄像头,进行数据采集,使用摄像头的数据进行环境检测

二、ORB-SLAM2相关介绍

ORB-SLAM2是一个著名的视觉SLAM(Simultaneous Localization and Mapping,即同时定位与地图构建)系统,由Juan D. Tardós、Raúl Mur-Artal等人开发。它在多种环境下都能实现高精度的实时定位和地图构建,以及大规模环境中的持久定位能力。作为ORB-SLAM系列的第二代,ORB-SLAM2在其前代的基础上做出了重要改进,让我们逐一了解。

1. 特点

  • ORB特征

ORB-SLAM2使用ORB(Oriented FAST and Rotated BRIEF)特征来从图像中提取特征点。ORB特征相对于其他特征如SIFT、SURF,具有计算效率高、性能稳定的优势,特别是在实时应用和计算资源有限的环境中表现突出。

  • 三种模式的地图初始

ORB-SLAM2提供了三种地图初始化模式:单目、双目和RGB-D。这让ORB-SLAM2能够适用于更广泛的应用场合,满足不同硬件配置和环境需求,极大地提升了其灵活性和通用性。

  • 回环检测

回环检测是ORB-SLAM2中的一个关键特性,它使系统能够识别出当前视野与先前访问过的场地之间的关联。通过这种方式,ORB-SLAM2能够纠正累积的定位误差,确保长时间操作的精度。它采用了DBOW2来实现高效的回环检测。

  • 局部地图

ORB-SLAM2引入了局部地图的概念,这使它在处理大规模环境时更加高效。系统会仅优化当前视野内及其附近的关键帧和地图点,而不是整个地图,这显著提高了计算效率。

  • 全局优化

通过**全局BA(Bundle Adjustment)**实现了对整个地图的优化,这个过程通常在检测到回环后触发。它能够进一步提高系统的定位和地图重建精度。

2. 应用

ORB-SLAM2作为一个先进的视觉SLAM系统,通过创建精确的实时地图并实现实时定位,使得其在许多技术领域内均有广泛的应用前景。下面对各个领域的应用进行更为详细的探讨。

  • 自动驾驶

ORB-SLAM2在自动驾驶领域至关重要。它对车辆的环境进行3D建模,提供了准确的定位,支持车辆理解周围环境,并预测其他交通参与者的动作。进一步地,ORB-SLAM2能够帮助自动驾驶车辆在没有详细预先加载的地图情况下导航,增强车辆在复杂城市或乡村环境下的适应性和安全行驶能力。

  • 机器人导航

在机器人导航中,ORB-SLAM2被利用来实现室内外机器人的自主定位与路径规划。无论是用于家庭清洁机器人还是工业级探索机器人,ORB-SLAM2都能够提供精确的地图信息和位置估计,使得机器人避开障碍物、优化路径,并且完成复杂的任务。对于搜救机器人,ORB-SLAM2能够帮助它们在灾难现场进行有效的地图构建和快速导航,从而救出生还者。

  • 增强现实

在增强现实(AR)应用中,ORB-SLAM2的地图创建和定位能力为真实世界与虚拟内容的无缝融合提供了基础。它可应用于手机AR游戏,提供实时的环境跟踪,以便动态渲染虚拟对象。此外,在AR头盔和眼镜中,ORB-SLAM2可用于稳定跟踪用户的视角,增强用户体验和互动性。

  • 移动增强现实应用

在移动设备上,ORB-SLAM2允许应用通过实时的相机数据理解用户周围的环境,为例如室内导航和家具布局等应用提供准确的空间信息。通过手机或平板电脑,用户可以可视化地看到3D地图的创建过程,这也为实时地图绘制和室内设计等功能奠定了基础。

3. 发展

ORB-SLAM2之后,研究团队又推出了ORB-SLAM3,进一步扩展了系统的能力,包括对多传感器系统的支持等,体现了视觉SLAM技术的持续发展和完善。

ORB-SLAM2不仅因其卓越的性能和广泛的应用受到认可,也为视觉SLAM的研究和发展提供了重要的基石。随着技术的进步和研究的深入,视觉SLAM将在未来的智能系统中扮演着更加重要的角色。

三、ORB-SLAM2 环境搭建

1、安装工具

配置前需要下载cmake、gcc、g++和Git工具。

下载cmake

sudo apt-get install cmake

下载git

sudo apt-get install git

下载gcc和g++

sudo apt-get install gcc g++

2、安装Pangolin

在安装pangolin之前,先安装依赖项。

sudo apt-get install libglew-dev
sudo apt-get install libpython2.7-dev

下载安装Pangolin。可能会有点慢,如果因为网不太好断开了,再重新执行一次下列命令即可。

git clone https://github.com/stevenlovegrove/Pangolin.git

下载好后,进入Pangolin文件夹。

cd Pangolin

创建编译文件夹,命名为build。

mkdir build

进入文件夹进行配置。

cd build

执行如下命令,编译过程有点慢,需要花费较长的时间。
但是这里也可以使用make -j等命令速度会稍快一些,但如果电脑性能不佳,还是使用make命令较好。

sudo make -j8
编译安装。

sudo make install

3、安装Eigen

使用下列命令来安装eigen

sudo apt-get install libeigen3-dev

4、安装ORB_SLAM2

如果你打算在ROS(Robot Operating System)环境中运行ORB_SLAM2,进行视觉SLAM的实验和研究,那么将源代码放置在工作空间的src目录下通常是最佳做法。这里提供了一个详细的步骤,将帮助你顺利完成ORB_SLAM2的下载和安装。

  • 环境准备:

首先,我们假设你已有一个名为catkin_ws的ROS工作空间,你可以通过如下命令进入到其src目录下:

cd ~/catkin_ws/src/

确保你位于工作空间的src文件夹内,这是ROS建议的源代码存放目录,以保持整体结构组织清晰。

  • 下载ORB_SLAM2源代码:

接着,我们将通过Git来克隆ORB_SLAM2的官方仓库,这将确保你获得最新的稳定版本:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

该命令将会创建一个名为ORB_SLAM2的目录,其中包含了必要的所有文件。

  • 准备编译环境:

之后,我们需要进入到ORB_SLAM2文件夹中,进行编译准备:

cd ORB_SLAM2

一旦进入该目录,我们必须确保build.sh脚本文件具有执行权限。通过以下命令,你可以修改文件权限:

chmod +x build.sh
  • 编译ORB_SLAM2:

编译ORB_SLAM2是通过执行build.sh脚本实现的。在开始编译之前,请确保所有依赖已正确安装。执行以下命令开始编译过程:

./build.sh

如果在编译过程中遇到包含usleep未声明的错误,说明你需要查看ORB_SLAM2文档中的“问题2”解决方法,通常这涉及到一些与系统兼容性相关的修改。

  • 在ROS中编译ORB_SLAM2:

为了在ROS环境中使用ORB_SLAM2,你需要运行它的ROS封装包。首先,给予build_ros.sh脚本文件执行权限,然后将ORB_SLAM2例子的路径添加到你的ROS包路径中,最后运行封装包的编译脚本:

chmod +x build_ros.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
./build_ros.sh
  • 加速构建过程:

最后的编译过程可能需要一些时间,你可以使用如下命令以允许编译过程使用多线程,加快速度:

make -j8

这里的-j8表示允许同时运行8个编译任务。根据你的机器性能,你可以选择一个适当的线程数;如果你的电脑性能有限,请注意不要设置过高的线程数,以避免过高的负载。相应地,你可能需要编辑build.shbuild_ros.sh脚本文件中指定并行任务数的部分。

完成这些步骤后,ORB_SLAM2就已经成功安装在你的ROS环境中了。现在,你可以开始探索视觉SLAM的强大功能了。祝你在SLAM项目上有所创新和突破!

四、跑通TUM数据集

  • 下载数据集
  1. 首先,需要下载TUM数据集。可以从以下链接下载:TUM RGB-D 数据集。确保下载的是rgbd_dataset_freiburg1_desk2数据集。
  2. 将下载的数据集放置在ORB-SLAM2目录下的一个名为Data的文件夹中。如果最初将数据集下载到了其他地方(如“下载”文件夹),请将其复制到Data文件夹中。
  3. 打开终端,导航到ORB-SLAM2文件夹。可以通过在文件夹上右键点击并选择“在终端打开”来实现。
  4. 按照ORB-SLAM2的README中的说明,在终端中执行以下命令:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

注意,上述命令中的PATH_TO_SEQUENCE_FOLDER应替换为您下载的数据集所在的路径,以及选择正确的TUM.yaml配置文件。根据我的文件路径,我使用以下命令:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ~/Desktop/rgbd_dataset_freiburg1_desk2

确保在运行上述命令之前进入ROS的环境,可以使用以下命令启动roscore:

roscore

这将启动ROS核心服务,以确保ORB-SLAM2正常运行。

  • 运行结果展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、摄像头实时检测

1. 修改标定文件

在之前的实验中,我们进行了海康威视摄像头的标定,在这个地方我们便使用到了

在这里插入图片描述

2.查看摄像头话题

  1. 启动ROS

    roscore
    
  2. 启动摄像头驱动节点:

    roslaunch usb_cam usb_cam-test.launch
    
  3. 查看话题

rostopic list

在这里插入图片描述

3.修改代码

在/home/lx567/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc 下进行代码修改

在这里插入图片描述

重新编译

./build_ros.sh

4.运行指令

 rosrun ORB_SLAM2 Mono ~/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

等待数据加载一会,就能够看到对应的效果。

下面展示我的检测效果,我对我的笔记本还有一个小玩具进行建模展示

QQ录屏20240426130808

七、心得总结

首先,我对ORB-SLAM2系统有了更深入的了解。通过下载和配置TUM数据集,我亲身体验到了从理论到应用的过渡。实际操作中的每一个步骤——从环境搭建到参数调整,都让我对ORB-SLAM2系统的复杂性有了更直观的认识。我特别对ORB特征提取的高效性和系统的地图初始化模式留下了深刻印象,这些功能在算法准确快速地完成地图构建和相机定位方面发挥了关键作用。
+
其次,实验过程中遇到的种种挑战,如环境配置的问题、编译错误的解决,也是宝贵的学习机会。每当我碰到难题,深入阅读文档、论坛和相关资料,最终找到解决方案时,我都会感到无比的成就感。这不仅锻炼了我的问题解决能力,也增强了我在面对未知和挑战时的自信心。
+
通过监视摄像头数据的实时处理,我了解到了在现代自动化系统中,如何将摄像头校准、数据采集与实时环境检测相结合的重要性。这样的应用让我认识到视觉SLAM技术在真实世界中的广泛适用性,尤其是在机器人、自动驾驶车辆和增强现实等前沿技术领域。

最后感谢大佬友情链接:

  • https://blog.csdn.net/wowbing2/article/details/106318191
  • https://blog.csdn.net/weixin_44436677/article/details/105587986

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

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

相关文章

RabbitMQ发布确认和消息回退(6)

概念 发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消…

git 基础知识(全能版)

文章目录 一 、git 有三个分区二、git 基本操作1、克隆—git clone2、拉取—git fetch / git pull3、查看—git status / git diff3.1 多人开发代码暂存技巧 本地代码4、提交—git add / git commit / git push5、日志—git log / git reflog6、删除—git rm ‘name’7、撤销恢…

OceanBase开发者大会实录 - 阳振坤:云时代的数据库

本文来自2024 OceanBase开发者大会,OceanBase 首席科学家阳振坤的演讲实录——《云时代的数据库》。完整视频回看,请点击这里 >> 在去年的开发者大会中,我跟大家分享了我对数据库产品和技术一些看法,包括单机分布式一体化&…

字符函数·字符串函数·C语言内存函数—使用和模拟实现

字符函数字符串函数C语言内存函数 1.字符分类函数2. 字符转换函数3. strlen的使用和模拟实现4.strcpy的使用和模拟实现5.strcat的使用和模拟实现6.strcmp的使用和模拟实现7.strncpy的模拟和实现8.strncat的实现和模拟实现9.strncmp函数使用10.strstr的使用和模拟实现11.strtok函…

备考数通HCIE证书4点经验分享!

大家好,我是来自安阳工学院20级网络工程的刁同学,在2023年12月20日成功通过了华为Datacom HCIE认证,并且取得了笔试900多分,实验B的成绩。在此,我想把我的一些考证心得分享给正在备考的小伙伴们。 关于为什么考证 我…

Vue3+ts(day03:ref和reactive)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈(笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】,记录一下学习笔记,用于自己复盘,有需要学…

tcp inflight 守恒算法的自动收敛

inflight 守恒算法看起来只描述理想情况,现实很难满足,是这样吗? 从 reno 到 bbr,无论哪个算法都在描述理想情况,以 reno 和 bbr 两个极端为例,它们分别描述两种理想管道,reno 将 buffer 从恰好…

Apollo 7周年大会:百度智能驾驶的展望与未来

本心、输入输出、结果 文章目录 Apollo 7周年大会:百度智能驾驶的展望与未来前言百度集团副总裁、智能驾驶事业群组总裁王云鹏发言 直播回放大会相关内容先了解 Apollo开放平台 9.0架构图 发布产品Apollo 定义自己对于智能化的认知百度集团副总裁 王云鹏…

Grafana系列 | Grafana监控TDengine库数据 |Grafana自定义Dashboard

开始前可以去grafana官网看看dashboard文档 https://grafana.com/docs/grafana/latest/dashboards 本文主要是监控TDengine库数据 目录 一、TDengine介绍二、Grafana监控TDengine数据三、Grafana自定义Dashboard 监控TDengine库数据1、grafana 变量2、添加变量3、配置panel 一…

Docker——数据管理和网络通信

目录 一、Docker的数据管理 1.数据卷 2.数据卷容器 3.容器互联 二、Docker镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于Dockerfile 创建 3.1联合文件系统(UnionFS) 3.2镜像加载原理 3.3为什么Docker里的Centos大小才200M 4.Dcok…

鸿蒙OpenHarmony【轻量系统 编写“Hello World”程序】 (基于Hi3861开发板)

编写“Hello World”程序 下方将通过修改源码的方式展示如何编写简单程序,输出“Hello world”。请在下载的源码目录中进行下述操作。 确定目录结构。 开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一…

CSS基础语法

CSS 标签选择器 内嵌式改变标签样式 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><!-- 属于标签选择器 --><style>p{font - size: 16px;color: red;}</style></head><bo…

Git学习路线

1.看书 把这本书看懂就可以了&#xff1b;这个是比较专业的一本书&#xff1b;比较系统&#xff1b;没有书的可以私信我 2.理解Git多个分区和多个分支 多个分区包括&#xff1a;工作区、暂存区、本地仓、本地的远端仓信息、远端仓 多个分区的状态 分支及其变化 3.记住常用命令…

国产麒麟系统下打包electron+vue项目(AppImage、deb)

需要用到的一些依赖包、安装包以及更详细的打包方法word以及麒麟官网给出的文档都已放网盘&#xff0c;链接在文章最后&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&a…

与 Apollo 共创生态:Apollo 七周年大会给带来的震撼

文章目录 一、七年蛰伏&#xff0c;Apollo 迎来“智变”时刻二、Apollo 企业生态计划与开放平台2.1 Apollo X 企业自动驾驶解决方案2.2 Apollo 开放平台携手伙伴共创生态 三、个人感悟 一、七年蛰伏&#xff0c;Apollo 迎来“智变”时刻 让我们把时间倒回到 2013 年&#xff0…

Java设计模式 _创建型模式_原型模式(Cloneable)

一、原型模式 1、原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能比较好。一般对付出较大代价获取到的实体对象进行克隆操作&#xff0c;可以提升性能。 2、实现思路&#xff1a; &#xff08;1&#xff09;、需要克隆的…

微服务之分布式理论概述

一、分布式技术相关的理论 CAP理论 CAP定理(CAP theorem)&#xff0c;⼜被称作布鲁尔定理(Eric Brewer)&#xff0c;1998年第⼀次提出. 最初提出是指分布式数据存储不可能同时提供以下三种保证中的两种以上: (1) ⼀致性(Consistency): 每次读取收到的信息都是最新的; (2) …

【STM32F407+CUBEMX+FreeRTOS+lwIP之TCP记录】

STM32F407CUBEMXFreeRTOSlwIP之TCP记录 注意TCP client(socket)示例 TCP_server(socket)效果 注意 如果连接失败&#xff0c;建议关一下代理软件。 配置方面可以参考一下上一篇UDP的文章 STM32F407CUBEMXFreeRTOSlwIP之UDP记录 TCP client(socket) #define LWIP_DEMO_PORT 8…

【介绍下如何使用CocoaPods】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

chrome浏览器安装elasticsearch的head可视化插件

head插件简介 elasticsearch-head被称为是弹性搜索集群的web前端&#xff0c;head插件主要是用来和elastic Cluster交互的Web前端 head插件历史 elasticsearch-head插件在0.x-2.x版本的时候是集成在elasticsearch内的&#xff0c;由elasticsearch的bin/elasticsearch-plugin…