orbslam2基础

2024-05-08 06:52
文章标签 基础 orbslam2

本文主要是介绍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过程及遇到的问题与解决

这篇关于orbslam2基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/969621

相关文章

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou