orbslam2基础

目录

  • 一、 内容概要
  • 二、 orbslam2基础介绍
  • 三 、 orbslam2安装
    • 3.1 安装依赖
    • 3.2 安装orbslam2
    • 3.3 下载Kitee数据集
  • 四、 进行ORBSLAM2仿真
  • 五、 心得体会
  • 六、 参考链接

一、 内容概要

  1. orbslam2基础介绍
  2. orbslam2安装
  3. orbslam2使用案例:orbslam2+kitti数据集序列图像

二、 orbslam2基础介绍

ORB-SLAM2是一种用于单目、双目和RGB-D摄像头的实时视觉定位与地图构建系统。它是由伦敦帝国学院的Raul Mur-Artal、Juan D. Tardós和J. M. M. Montiel等人开发的,是ORB-SLAM的改进版本。ORB-SLAM2结合了特征提取、跟踪、建图和定位的功能,可以在实时性和鲁棒性之间取得平衡,适用于各种环境和场景。它在计算机视觉和机器人领域得到广泛应用,可以用于自主导航、增强现实、室内导航等多个领域。
优点:
· 实时性:ORB-SLAM2能够在实时性要求较高的情况下进行定位和地图构建,适用于实时应用。
· 鲁棒性:它采用了ORB特征点描述符和RANSAC等方法,对于光照变化、视角变化等场景具有一定的鲁棒性。
· 支持多种摄像头:ORB-SLAM2支持单目、双目和RGB-D摄像头,具有较好的适用性。
· 开源:作为开源项目,ORB-SLAM2具有广泛的用户群体和社区支持,用户可以自由获取和修改源代码。
缺点:

· 对动态场景不稳定:在存在大量动态物体的场景中,ORB-SLAM2可能会出现定位漂移或者地图构建不准确的情况。
· 对重复纹理区域敏感:在具有重复纹理的区域,ORB-SLAM2可能会出现匹配错误的情况,影响定位和地图构建的准确性。
· 对于大规模环境的处理有限:在大规模环境下,ORB-SLAM2可能会受限于内存和计算资源的限制,无法有效处理大规模地图构建和定位任务。

三 、 orbslam2安装

3.1 安装依赖

依赖列表:

  1. Pangolin0.5
  2. Eigen3.1以上
  3. Sophus
  4. Ceres
  5. OpenCV
  6. g2o
  7. DBoW3
    可以从此链接下载:
    https://github.com/Gongkaka/slambook2/tree/master/3rdparty

注意!安装过程中出现虚拟机无响应或报错:

在这里插入图片描述
请扩充虚拟机内存后重试
在这里插入图片描述

下面是具体安装流程

  • Pangolin
#若没有从上面链接下载则使用:git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build && cd build
cmake ..
sudo make -j8
sudo make install
  • Ceres
#安装依赖
sudo apt-get install  liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-devgit clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir ceres-solver-build
cd ceres-solver-build
cmake ..
make -j8
sudo make install
  • opencv安装
    我多次测试发现orbslam2在opencv版本号为2.-的环境下报错率较低,所以我建议下载opencv2
    进入opencv官方下载链接选择2.-版本下载,我下载的是2.4.13.6
cd opencv-2.4.13.6
mkdir build
cd build
cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

漫长的等待

make
sudo make install

完成后开始配置环境

sudo gedit ~/../../etc/ld.so.conf.d/opencv.conf

在里面添加:

/usr/local/lib

保存后

sudo ldconfig

再进入另一个文件

sudo gedit ~/../../etc/bash.bashrc

添加以下两行

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

如果之前安装过其他版本的opencv,添加过这个配置可以不用添加
多版本opencv可以参考这个链接https://blog.csdn.net/learning_tortosie/article/details/80594399

  • g2o
#安装依赖:
sudo apt-get install qt5-qmake qt5-default libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3 libcholmod3
#若没有从上面链接下载则使用:git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build
cd build
cmake ..
make -j8
sudo make install
  • DBoW3
#若没有从上面链接下载则使用:git clone https://github.com/stevenlovegrove/Pangolin.git
cd DBoW3
mkdir build
cd build/
cmake ..
make
sudo make install

3.2 安装orbslam2

  1. 首先新建一个ros工作区(也可以用现有的)
mkdir -p ~/ws_orbslam/src
cd ~/ws_orbslam
catkin_init_workspace src
catkin_make
source devel/setup.bash

然后将orb_slam2下载到主目录

cd ~
git clone https://github.com/raulmur/ORB_SLAM2.git
cd ~/ORB_SLAM2
sudo chmod +x build.sh
./build.sh

然后编译一下

sudo chmod +x build_ros.sh
./build_ros.sh

看到进度为100%和拥有这三个文件即视为安装成功
在这里插入图片描述
在这里插入图片描述

3.3 下载Kitee数据集

官方网站
在这里插入图片描述

官网下载过程比较繁琐,而且下载速度慢,可以进入以下链接选择下载
https://blog.csdn.net/wyy13273181006/article/details/107686370
可以选择其中一个数据集
在这里插入图片描述
任选

四、 进行ORBSLAM2仿真

进入ORB_SLAM2根目录
最后就是训练集,根据自己文件设置

#执行命令:ORB-SLAM2支持单目、双目和RGBD数据,这里选择mono_kitti的单目数据集来运行和调试。
#运行命令格式为:
./mono_kitti path_to_vocabulary path_to_settings path_to_sequence
#该命令共有4个参数:#mono_kitti:为ORB-SLAM2编译生成的针对MONO_KITTI数据集的可执行文件,一般路径为ORB-SLAM2工程目录下Examples/Monocular/mono_kitti;#path_to_vocabulary为所选词典的路径,路径为ORB_SLAM2/Vocabulary/ORBvoc.txt;#path_to_settings为配置文件,存放在ORB-SLAM2/Examples/Monocular下,运行时选择了KITTI00-02.yaml(可选择别的),该配置文件中存放的相机的内参和外参,提取特征时候图像金字塔相关参数,可视化过程中用到的参数;
./mono_kitti ~/ORB_SLAM2/Vocabulary/ORBvoc.txt KITTI00-02.yaml ~/ws_orbslam/src/data_odometry_gray/00/

效果:
在这里插入图片描述
0929
常见报错可以参考:
ROS melodic 安装运行 ORB_SLAM2过程及遇到的问题与解决

五、 心得体会

在深入研究和仿真ORB-SLAM2的过程中,我深刻体会到了这个开源视觉SLAM(Simultaneous Localization and Mapping)系统的强大和复杂性。通过实际操作和测试,我对ORB-SLAM2的实时性、鲁棒性和对多种摄像头的支持有了更直观的理解。

首先,ORB-SLAM2的实时性给我留下了深刻的印象。在仿真过程中,系统能够快速地处理输入的图像序列,并实时输出相机的位姿和构建的地图。这对于需要快速响应的应用场景,如自动驾驶和机器人导航,是非常关键的。实时性的实现得益于ORB-SLAM2高效的特征提取和匹配算法,以及优化的地图管理和更新策略。

其次,ORB-SLAM2的鲁棒性也让我感到赞叹。在仿真中,我尝试了各种光照条件、视角变化和动态场景,ORB-SLAM2都能够较好地应对。特别是在光照变化较大的场景中,ORB-SLAM2仍然能够稳定地跟踪和定位,这得益于ORB特征点描述符对光照变化的鲁棒性。此外,ORB-SLAM2还采用了RANSAC等方法来过滤错误的匹配,进一步提高了系统的鲁棒性。

此外,ORB-SLAM2对多种摄像头的支持也让我感到非常满意。在仿真中,我分别测试了单目、双目和RGB-D摄像头的数据,ORB-SLAM2都能够适应并稳定地运行。这种广泛的适用性使得ORB-SLAM2可以应用于各种不同的场景和设备,极大地扩展了其应用范围。

然而,在仿真过程中,我也遇到了一些问题和挑战。首先,ORB-SLAM2对动态场景的处理能力有限。在存在大量动态物体的场景中,ORB-SLAM2可能会出现定位漂移或者地图构建不准确的情况。这需要我们在实际应用中结合其他方法,如语义分割或光流法等,来提高对动态场景的处理能力。

其次,ORB-SLAM2对重复纹理区域敏感。在具有重复纹理的区域,ORB-SLAM2可能会出现匹配错误的情况,影响定位和地图构建的准确性。这需要我们在实际应用中注意选择合适的特征点和匹配策略,以减少这种情况的发生。

最后,ORB-SLAM2在处理大规模环境时可能会受限于内存和计算资源的限制。这需要我们在实际应用中采用一些优化策略,如分块处理、地图压缩等,来降低系统的资源消耗。

总的来说,ORB-SLAM2是一个强大而复杂的视觉SLAM系统,具有实时性、鲁棒性和对多种摄像头的支持等优点。通过仿真和测试,我对其有了更深入的理解,也发现了一些问题和挑战。我相信在未来的研究和应用中,ORB-SLAM2将会得到更广泛的应用和发展。

六、 参考链接

  1. https://blog.csdn.net/learning_tortosie/article/details/80594399
  2. https://blog.csdn.net/wakeup_high/article/details/138011781?spm=1001.2014.3001.5502
  3. https://blog.csdn.net/weixin_56566649/article/details/124355140
  4. ubuntu 上 opencv2 的安装与配置
  5. ROS melodic 安装运行 ORB_SLAM2过程及遇到的问题与解决

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maxpooling2d的C++细节实现

最大池化是一种常见的操作,用于减小输入特征图的大小并提取最显著的特征。PyTorch提供了torch.nn.functional.max_pool2d 函数来执行这个操作,如果不具备pytorch环境,可以通过C实现这个操作,更清楚地了解其原理; PyTo…

转发_重定向

1.Servlet/JSP单独使用的弊端 当我们用Servlet或者JSP单独处理请求的时候 Servlet:拼接大量的html字符串 造成可读性差、难以维护JSP:使得html和Java代码互相交织 也造成了可读性差、难以维护的后果 最合适的做法就是两者结合使用 2.ServletJSP处理请…

OpenCV4.9如何将失焦图片去模糊滤镜(67)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9的基于距离变换和分水岭算法的图像分割(66) 下一篇 :OpenCV4.9去运动模糊滤镜(68) 目标 在本教程中,您将学习: 什么是退化图像模型失焦图像的 PSF 是多少如何恢复…

【Linux调试器】:gdb的使用(常见指令)

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux调试器gdb的使用,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通…

消除模型盲区,让透明件身后模型无所遁形

使用SOLIDWORKS设计产品出工程图,当模型中存在透明零部件时,由于位置摆放可能会遮挡其他零件。 这会影响零件在工程图中展示装配关系。 通常我们会采用剖视图或改变视图方向来展示被遮挡的零件。 SOLIDWORKS 2023版本发布了工程图中透视透明的零部件功能…

BUG:conda: command not found解决方法

文章目录 报错信息解决方法 报错信息 conda: command not found解决方法 直接输入 source ~/.bashrc看看这时输入conda有没有显示。如果没有的话,输入 vim ~/.bashrc 输入i进入编辑模式。之后 export PATH$PATH:[你自己conda的安装目录]输入vim的保存命令: ES…

分布式锁讲解

概括 分布式锁是一种用于在分布式系统中实现同步机制的锁。在单机系统中,我们可以使用如Java中的synchronized关键字或者 ReentrantLock来实现线程间的同步,但在分布式系统中,由于多个节点(服务器)之间的并发操作&am…

hbase建表预分区的2种方法

以下案例建表并设置预分区,分别测试以下2种方法 1.固定散列 示例:rowkey以日期为前缀 create ‘test’,‘cf1’, SPLITS > [‘202401’, ‘202402’, ‘202403’] put ‘test’,‘20240101’,‘cf1:name’,‘20240101’ put ‘test’,‘20240102’,‘cf1:name’,‘2024010…

Meta-SR: A Magnification-Arbitrary Network for Super-Resolution

CVPR2019https://github.com/XuecaiHu/Meta-SR-Pytorch 问题引入 首个解决任意尺度超分问题的模型,借鉴了meta-learning的思想;weight prediction strategy(meta-learning):神经网络的权重是由另一个神经网络预测的,而不是通过从…

计算机中GPU快不行的几个标志,看下有没有你遇到的

GPU是处理图形密集型任务的主要组件。尽管它非常耐用,但它最终会磨损并开始失效。在到达生命的终结之前,它通常会显示出即将发生故障的迹象,需要及时修复或更换。本指南详细介绍了这些标志。 在我们开始之前 在深入研究GPU故障的迹象之前,重要的是要承认,下面提到的一些…

Cad图纸加密软件哪个最好用?成都企业都在用的透明加密软件是什么?

企业数据泄露事情频繁发生,为企业带来了不可计算机的经济损失,以及巨大的经营风险。在DT时代的到来,每一家企业的市场竞争本质上是知识产权的竞争,对于制造类企业来讲知识产权无疑是企业的cad图纸,制造类企业cad图纸的…

Java中常用类String的不可变性详解

Java中常用类String的不可变性详解 在Java编程中,String类是一个非常重要的基础类,它用于表示和操作字符串序列。然而,String类的一个核心特性是其不可变性(immutable)。这个特性在Java编程中有着重要的影响&#xff…

PXE批量部署,一键安装配置多台Linux系统

目录 一、PXE批量部署的优点 二、搭建PXE远程安装服务器 1. 实验初始化设置 2. 一键安装软件包 3. 复制 vmlinuz、initrd.img、pxelinux.0文件 4. 配置PE启动菜单配置文件 5. 修改配置文件, 启动各个软件服务 6. kickstart自动应答文件修改启动菜单配置文件…

【磁盘】用 gdisk 新增分区、删除分区

相关文章: 【Linux学习笔记16】磁盘的分区、格式化、检验与挂载(blkid、lsblk、UUID、parted查看分区的格式、lvm命令) 1. 用 gdisk 新增分区 如果你是按照鸟哥建议的方式去安装你的 CentOS 7,那么你的磁盘应该会预留一块容量来做练习的。如果没有的话…

什么是静态住宅代理IP?

静态住宅代理(也称为静态ISP代理)是最流行的代理类型之一。它们也是隐藏您的身份并保持在线匿名的最佳方法之一。您为什么要使用住宅代理而不是仅使用常规代理服务?下面我具体分享。 一、什么是静态住宅代理? 首先,我…

【iOS】事件传递与响应机制

文章目录 前言事件UIEvent一、事件传递遍历顺序 二、手势识别三、响应机制UIResponder(响应者)响应者链 四、相关应用扩大button点击范围穿透事件 总结 前言 提到响应者链与事件传递,如果看过其他人的博客,经常能看到这经典的三张…

苍穹外卖Day06笔记

疯玩了一个月,效率好低,今天开始捡起来苍穹外卖~ 1. 为什么不需要单独引入HttpClient的dependency? 因为我们在sky-common的pom.xml中已经引入了aliyun-sdk-oss的依赖,而这个依赖低层就引入了httpclinet的依赖,根据依…

Docker部署Metabase

文章目录 Docker安装MetabaseCentOS7安装Docker获取最新的 Docker 镜像启动Metabase容器在Metabase初始化时查看日志访问Metabase Metabase 的 ClickHouse 驱动程序安装环境简介删除容器创建容器下载click house驱动放入驱动重启容器将元数据库连接到 ClickHouse报错解决 Docke…

【华为OD机试C卷D卷】部门人力分配(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 部门在进行需求开发时需要进行人力安排。 当前部门需要完成 N 个需求,需求用 requirements 表述,requirements[i] 表示第 i 个需求的工作量大小,单位:人月。 这部…

代码随想录算法训练营第36期DAY23

DAY23 530二叉搜索树的最小绝对差 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(null…