Contents

ORB-SLAM

ORB-SLAM

ORB-SLAM是Raúl Mur-Artal等人在2015年提出的一种基于ORB特征点的单目SLAM算法框架。
该框架继承了PTAM的场景识别(place recognition)技术, 应用了具有尺度感知(scale-aware)的闭环技术,在大尺度操作中利用了共视信息(covisibility information)。
它是一个完整的SLAM解决方案,提供了位姿跟踪、地图构建、闭环检测的功能。 后来在2017年,原作者又做了一些改进并增加了双目和深度相机的支持,发布了ORB SLAM2。

https://github.com/raulmur/ORB_SLAM

https://github.com/raulmur/ORB_SLAM2

1. 总体框架

下图是从论文中扣下来的系统框图,左图是ORB-SLAM,右图是ORB-SLAM2的。两者大体上是没有什么差别的,虽然在ORB-SLAM2中没有体现单目,但是它完全可以处理。可以说左图所描述的系统完全是右图的一个子集,ORB-SLAM2是在ORB-SLAM的基础上进行的扩展,并且增加了双目、RGB-D相机的接口。

在 ORB-SLAM 系列中,ORB-SLAM2 相对于 ORB-SLAM1 更加成熟和功能丰富,而且在配置上也相对更加简单。ORB-SLAM2 的设计目标之一就是提高易用性,降低配置的复杂性。以下是一些 ORB-SLAM2 相对于 ORB-SLAM1 的优点和简化配置的方面:

单目、双目、RGB-D通用支持: ORB-SLAM2 相比 ORB-SLAM1 提供了更为通用的支持,可以用于单目相机、双目相机以及RGB-D相机。
这使得用户可以更方便地根据实际需求选择不同类型的相机。

更多的配置文件: ORB-SLAM2 引入了更多的配置文件,例如 Monocular、Stereo、RGB-D 对应的配置文件,
这使得用户能够更容易地选择合适的配置文件而不必手动修改源代码。

简化了参数设置: ORB-SLAM2 的参数设置更加直观,并提供了详细的注释。配置文件中包含了丰富的注释和说明,
用户可以通过修改配置文件轻松调整参数。

使用 CMake 构建系统: ORB-SLAM2 使用 CMake 作为构建系统,这使得编译和构建过程更加方便,而不需要手动配置编译选项。

总体而言,ORB-SLAM2 在设计上更符合易用性的原则,为用户提供了更多选择和更清晰的配置方式。虽然任何 SLAM 系统的配置都可能有一定的复杂性,但相对于 ORB-SLAM1,ORB-SLAM2 的配置相对更加直观和简单。

Eigen3版本

1
2
3
locate eigen3/Eigen/src/Core/util/Macros.h

/usr/include/eigen3/Eigen/src/Core/util/Macros.h

vim Macros.h

查看当前正在使用的Eigen版本_/3rdparty/eigen/eigen/src/core/util/macros.h-CSDN博客

ROS

ORBSLAM 编译运行记录

Ubuntu18.04安装ROS Melodic

ROS安装过程中如何解决 rosdep update 命令出现错误

ORB-SLAM2 是一个用于实时单目、双目和RGB-D相机SLAM的开源项目。与ORB-SLAM1不同,ORB-SLAM2 不依赖于ROS(Robot Operating System)。ORB-SLAM2被设计为独立于ROS的SLAM系统,因此在使用时并不需要ROS。

虽然 ORB-SLAM2 不需要 ROS,但它可以与ROS集成使用。可以将 ORB-SLAM2 作为 ROS 节点运行,与其他 ROS 节点进行通信,共享数据,并在 ROS 系统中进行 SLAM 和定位。

总的来说,ORB-SLAM2是一个独立的SLAM库,可以独立于ROS使用,也可以与ROS集成。

安装教程

安装ORB_SLAM过程中碰到的一些问题解答(教程) - AI牛丝

orb-slam的安装/配置/运行_Fishmemory的博客-CSDN博客_orbslam环境配置

运行ORB-SLAM笔记_编译篇(一) - Being_young - 博客园

源码编译

ORB-SLAM2环境配置及运行_orbslam2环境配置-CSDN博客

dataset

Computer Vision Group - Dataset Download

源码解读

无处不在的小土-index

SLAM学习笔记 - ORB_SLAM2源码运行及分析 - tszs_song - 博客园

ORB-SLAM1

ORB-SLAM1(Oriented FAST and Rotated BRIEF - Simultaneous Localization and Mapping)是一个用于实时单目视觉SLAM(Simultaneous Localization and Mapping)的开源项目。该系统主要基于关键点提取、特征描述、帧间特征匹配和位姿估计等技术,结合图优化方法进行视觉SLAM的建图和定位。

以下是ORB-SLAM1的源码主要组成部分和一些关键的实现概念:

特征提取与描述:
    FAST特征提取器: 使用了Oriented FAST特征检测算法,该算法对于图像中的角点非常敏感,可以快速而鲁棒地检测到关键点。
    BRIEF特征描述器: 使用二进制描述符来描述每个关键点,采用旋转BRIEF以考虑图像旋转。

初始化:
    单目初始化: 初始的视觉里程计使用了通过对极几何约束估计的相机运动。
    初始化地图点: 利用帧间特征匹配和三角化来初始化地图点。

跟踪:
    特征匹配: 对于每一帧,使用先前关键帧的地图点和当前帧提取的特征进行匹配。
    光流追踪: 在跟踪失败时,采用光流法进行特征点的追踪。

局部地图:
    局部地图管理: 维护了一个局部地图,包含附近帧的关键点和地图点。
    特征匹配和位姿估计: 使用图优化方法对局部地图进行特征匹配,进而估计相机位姿。

全局地图优化:
    关键帧选择: 选择一些关键帧作为全局地图优化的参考帧。
    图优化: 利用优化框架(如g2o)进行全局地图的优化,优化相机位姿和地图点的位置。

回环检测:
    回环检测: 利用局部地图和全局地图进行回环检测,检测到回环时对地图和位姿进行调整。

重新定位:
    重新定位: 当跟踪丢失时,利用重新定位算法通过地图点匹配来恢复相机位姿。

地图保存与加载:
    地图保存: 将生成的地图保存到磁盘上,以便后续的加载和使用。

ORBSLAM2

ORBSLAM2系统流程所有细节_51CTO博客_orbslam2运行

/posts/orb-slam/ORB-SLAM2.png

FAQ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
roslaunch ExampleGroovyOrNewer.launch
... logging to /home/uav/.ros/log/41725bdc-6245-11ed-8ae1-8038fb4ad945/roslaunch-uav-NUC10i5FNK-6341.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

Resource not found: ORB_SLAM-master
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/opt/ros/melodic/share
The traceback for the exception was written to the log file
1
2
**export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH_TO_PARENT_OF_ORB_SLAM
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/uav/tmp/zhaoyun/SLAM/ORB_SLAM-master**

报错解决

运行 roslaunch ExampleGroovyOrNewer.launch

出现:

Resource not found: ORB_SLAM-master
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/opt/ros/melodic/share
The traceback for the exception was written to the log file

解决:

从零开始跑ORB_SLAM2(三) 使用Realsense D435相机跑ORB_SLAM2生成稀疏点阵_no realsense devices were found!-CSDN博客

sudo ln -s /home/ushio/catkin_s/ORB_SLAM2/Examples/ROS/ORB_SLAM2 /opt/ros/kinetic/share/ORB_SLAM2

运行

roslaunch命令

roslaunch 是用于启动ROS(Robot Operating System)节点的命令。通过 roslaunch可以按照一个或多个配置文件启动一个或多个ROS节点,以及它们的参数和特定的配置。这样可以更方便地管理和组织ROS系统。

以下是 roslaunch 命令的基本语法:

roslaunch package_name file_name.launch

其中:

package_name 是包含启动文件的ROS软件包的名称。
file_name.launch 是要加载的启动文件的名称。

rosbag命令

rosbag 是 ROS 中用于记录和回放消息数据的工具。它允许你捕获 ROS 主题发布的消息,保存它们到文件中,以及在需要时回放这些消息。以下是一些常见的 rosbag 命令用法:
记录消息到bag文件:

rosbag record -o output_filename.bag topic1 topic2 …

闪退

core dump错误

解决:禁用march=native编译选项

  • march=native 是 GCC 编译器中的一个选项,用于根据当前 CPU 架构自动选择目标架构。这个选项会让编译器生成最适合当前主机架构的代码。

具体而言,-march=native 选项会启用与当前主机 CPU 兼容的最大架构。它会检测当前系统的 CPU 类型,并生成与该 CPU 兼容的代码。这样可以充分利用目标 CPU 的特性,提高程序的执行效率。

ubuntu22.04+ORB_SLAM2运行报错:New map created with 530 points double free or corruption (out) Aborted_运行orb-slam2 aborted (core dumped)-CSDN博客