一起自学SLAM算法:10.1 RTABMAP算法

news2024/12/29 9:16:46

连载文章,长期更新,欢迎关注:

同前面介绍过的大多数算法一样,RTABMAP也采用基于优化的方法来求解SLAM问题,系统框架同样遵循前端里程计、后端优化和闭环检测的三段式范式。这里重点讨论RTABMAP两大亮点,一个亮点是支持视觉和激光融合,另一个亮点是内存管理机制。下面将从原理分析、源码解读和安装与运行这3个方面展开讲解RTABMAP算法。

10.1.1 RTABMAP原理分析

经过前面章节的学习,相信大家对一些具体的SLAM框架实现过程已经不陌生了。因此在正式介绍RTABMAP的原理之前,先来看一下RTABMAP与其他一些SLAM框架的异同之处,如图10-1所示。比较维度主要在输入(Inputs)和输出(Online Outputs),常见的输入包括双目相机(Stereo)、RGB-D、多相机(Multi)、IMU、单线雷达(2D Lidar)、多线雷达(3D Lidar)和里程计(Odom),而输出包括位姿(Pose)、二维占据地图(2D Occupancy)、三维占据地图(3D Occupancy)和点云地图(Point Cloud)。同前面已经介绍过的Gmapping、Cartographer、ORB-SLAM2等相比可以说RTABMAP的表现近乎完美,RTABMAP的输入支持视觉(Stereo、RGB-D、Multi)、激光(2D Lidar、3D Lidar)和里程计(Odom),而输出则支持位姿(Pose)、二维占据地图(2D Occupancy)、三维占据地图(3D Occupancy)和点云地图(Point Cloud)。激光传感器的优点是可以直接感知环境障碍物信息并生成可以用于机器人自主导航的二维占据地图(2D Occupancy)或三维占据地图(3D Occupancy),这也是为什么大多数能够进行自主导航的机器人用的都是激光SLAM。视觉传感器的优点是感知到的信息量大,定位过程的位姿(Pose)不易丢失。当然像Stereo和RGB-D这样能直接感知深度信息的视觉传感器,如果最终构建出来的是稠密点云地图(Dense Point Cloud),那么也可以将稠密点云地图转换成二维占据地图(2D Occupancy)或三维占据地图(3D Occupancy)后用于机器人自主导航。而里程计(Odom)一般由安装在车轮上的编码器提供(这种情况也叫轮式里程计),里程计能提供短期运动信息在局部建图过程为位姿估计提供预测信息,当环境特征缺失时里程计也能提供短期位姿估计。

图10-1  RTABMAP与其他框架比较

1.RTABMAP系统框架

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

2.内存管理机制(STM、WM和LTM)

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

3.里程计节点(Odometry Node)

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

4.局部地图

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

5.闭环检测与图优化

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

6.全局地图

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

10.1.2 RTABMAP源码解读

上面讨论完RTABMAP的原理,现在就来解读RTABMAP的源码,其代码框架如图10-14所示。与前面已经分析过的算法类似,RTABMAP的代码由接口部分和核心库部分组成。rtabmap_ros功能包实现了算法的ROS接口,其中的主节点rtabmap负责启动算法主逻辑,而算法的底层具体实现被封装在rtabmap核心库之中。

图10-14  RTABMAP代码框架

1.rtabmap_ros功能包

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

2.rtabmap核心库

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

10.1.3 RTABMAP安装与运行

学习完RTABMAP算法的原理及源码之后,大家肯定迫不及待想亲自安装运行一下RTABMAP体验一下真实效果。庆幸的是,rtabmap核心库的ROS版本已支持到 noetic,而rtabmap_ros的ROS版本已支持到ros2,可以说是版本更新最及时的一个SLAM框架了。在第1章中已经声明过,本书在Ubuntu18.04和ROS melodic环境下进行讨论,所以下面就以ROS melodic版本的rtabmap和rtabmap_ros为例进行安装和运行。

1.RTABMAP安装

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

2.RTABMAP离线运行

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

3.RTABMAP在线运行

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

参考文献

【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

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

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

相关文章

python实现问卷星自动填写(可以跳过智能验证)

最近有一个社会实践需要做问卷调查,突发奇想搞一个自动化脚本,省事省米 1 下载依赖selenium selenium是一款网页爬虫重要的工具。 2 安装chrome驱动 这里需要准备chrome浏览器以及对应的驱动。需要注意的是驱动的版本需要和chrome保持一致。 chrome…

Mybatis框架介绍及使用

文章目录1. 概述1.1什么是框架1.2 Mybatis是什么1.3 Mybatis流程分析2. 参数的使用2.1 保存时获取插入id2.2 #{}与${}的区别2.3 parameterType 的使用2.4 SqlMapConfig.xml 中配置的内容3. 动态SQL3.1 <if>标签3.2 <where>标签3.3 <foreach > 标签3.4 抽取重…

ipv6内网穿透,有ipv6地址外网无法访问

问题描述 光猫已经开启ipv6&#xff0c;并且电脑/服务器已经有ipv6地址&#xff0c;只能通过ipv6局域网访问&#xff0c;外网/手机流量访问设备 原因分析&#xff1a; 光猫没有关闭防火墙路由器入站防护 解决方案&#xff1a; 1.光猫没有关闭防火墙 这里以中国移动的光猫为…

(17)目标检测算法之 YOLOv8 算法改进详细解析

目标检测算法之 YOLOv8 算法改进详细解析 1.YOLO的一些发展历史 YOLOv1&#xff1a;2015年Joseph Redmon和 Ali Farhadi等 人&#xff08;华盛顿大学&#xff09; YOLOv2&#xff1a;2016年Joseph Redmon和**Ali Farhadi等人*&#xff08;华盛顿大学&#xff09;* YOLOv3&am…

【JavaEE】多线程之线程安全(volatile篇),wait和notify

目录 内存可见性问题 volatile关键字 从JMM的角度来看内存可见性 wait和notify wait notify-notifyAll 内存可见性问题 首先运行一段代码&#xff0c;线程t1 用 Mycount.flag 作为标志符&#xff0c;当不为0的时候就跳出循环&#xff0c;线程t2 通过输入来改变 Mycount.f…

springboot 入门

springboot是什么 传统的开发模式下&#xff0c;无论是基于xml或注解&#xff0c;都要做许多配置&#xff0c;如果项目中集成越多的其他框架&#xff0c;配置内容也会越多。为了让开发人员以最少的配置去开发应用&#xff0c;springboot诞生了。springboot的原则是约定大于配置…

VSCode中4个Settings(JSON)的区别与联系

目录 &#x1f525; 前言 1. Preferences: Open Default Settings(JSON) 2. Preferences: Open User Settings 3. Preferences: Open Settings(JSON) 4. Preferences: Open Workspace Settings(JSON) &#x1f525; 总结 &#x1f525; 前言 在VSCode中输入快捷键ctrlsh…

读书笔记:梯度法求函数的最小值 gradient_method.py ← 斋藤康毅

● 由多元函数全部变量的偏导数汇总而成的向量称为梯度&#xff08;gradient&#xff09;。梯度指示的方向是各点处的函数值减小最多的方向。● 虽然梯度的方向并不一定指向最小值&#xff0c;但沿着它的方向能够最大限度地减小函数的值。因此&#xff0c;在寻找函数的最小值&a…

一篇五分生信临床模型预测文章代码复现——Figure 8 生存曲线鲁棒性分析

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

Linux输入子系统简析

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 本文基于 Linux 4.14 内核源码进行分析。 3. 简介 Linux 内核输入子系统&#xff0c;负责对系统中的输入设备进行管理。 一方面&#xf…

Spring Cloud_Ribbon负载均衡服务调用

目录一、概述1.是什么2.官网资料3.能干嘛二、Ribbon负载均衡演示1.架构说明2.POM三、Ribbon核心组件Irule1.IRule2.如何替换3.新建package&#xff08;注意&#xff1a;包的位置&#xff09;4.上面包下新建MySelfRule规则类5.主启动类添加RibbonClient6.测试四、Ribbon负载均衡…

Python将JSON格式文件导入 redis,多种方法

在导入前需要先确定你已经安装 Redis&#xff0c;并且可以启动相关服务。 windows 上启动 redis 的命令是 redis-server.exe redis.windows.conf&#xff0c;效果图如下&#xff1a; 文章目录使用 Python 连接 redis安装 redis 与 导入使用代码连接 Redis写入键值操作 JSON 文…

第26章 分布式缓存数据库配置的定义实现

1 Core.Configuration.CacheConfig namespace Core.Configuration { /// <summary> /// 【缓存配置--类】 /// <remarks> /// 摘要&#xff1a; /// 通过该类中的属性成员实例对“appsettings.json”文件中的1个指定缓存项(键/值对)在内存或指定分布式软件中…

mysql-installer-community-8.0.22.0安装教程

1. 下载 mysql-installer-community-8.0.22.0安装包 首先去官网&#xff1a;https://dev.mysql.com/downloads/installer/ 下载MySQL。 2. 默认Next 3. 点击Execute 4. 同意安装 5. 点击Next后点Yes 6. 点击Execute 这里出现10个选项是正确的&#xff0c;如果不是&#xff0c;…

C++ vector 容器介绍

C vector 容器介绍 C的vector是标准库中常见的一种容器&#xff0c;使用起来非常方便&#xff0c;可以用来代替c原本的数组。vector是种容器&#xff0c;类似数组一样&#xff0c;但它的size可以动态改变。vector的元素在内存中连续排列&#xff0c;这一点跟数组一样。由于vect…

队列同步器AQS的实现与分析——独占锁模式

AQS独占锁模式源码分析1、tryAcquire()、acquire()方法2、addWaiter()方法3、acquireQueued()方法4、shouldParkAfterFailedAcquire()方法5、tryRelease()、release()方法1、tryAcquire()、acquire()方法 protected boolean tryAcquire(int arg) {throw new UnsupportedOperat…

glassfish任意文件读取漏洞

glassfish任意文件读取漏洞1.简介1.1.漏洞类型1.2.漏洞成因1.3.语法搜索1.4.影响版本2.漏洞复现2.1.POC2.2.访问地址2.3.GlassFish的敏感目录2.3.1.获取数据库密码2.3.2.获取GlassFish的后台密码2.4.POC脚本1.简介 GlassFish是一款强健的商业兼容应用服务器&#xff0c;达到产品…

MyEclipse提示过期,MyEclipse Subscription Expired激活方案

一、错误描述 紧接上文&#xff0c;虽然解决了MyEclipse提示过期问题&#xff0c;但是你会发现出现一行红色提示如下&#xff1a; 1.错误日志 Product activation must be completed within 5 days. 2.错误说明 产品激活必须在5天内完成。 二、解决方案 从错误日志很明显的可…

C++语法复习笔记-2. c++基础句法

文章目录1. 图灵机与三种基本结构1. 顺序结构2. 分支结构自定义结构-枚举结构体与联合体结构体数据对齐问题3. 循环结构三种循环结构反汇编查看三种结构效率实例&#xff1a;输出所有形如aabb的四位数的完全平方数方案1: 构造aabb数&#xff0c;再判断方案2&#xff1a;反向操作…

《网络编程实战》学习笔记 Day10

系列文章目录 这是本周期内系列打卡文章的所有文章的目录 《Go 并发数据结构和算法实践》学习笔记 Day 1《Go 并发数据结构和算法实践》学习笔记 Day 2《说透芯片》学习笔记 Day 3《深入浅出计算机组成原理》学习笔记 Day 4《编程高手必学的内存知识》学习笔记 Day 5NUMA内存知…