PlanarSLAM:基于结构化约束的视觉SLAM

news2024/12/24 11:40:21

1. 摘要

在我们所熟知经典SLAM系统,以ORB-SLAM为代表的通过特征点法在相机位姿估计方面有很好的表现,但在一些人为构造的弱纹理环境下,由于缺少可靠的特征点的缘故,导致表现性能下降。

针对此种问题,作者通过根据周围环境的几何特征来提升结构化环境下的SLAM追踪和建图准确性。除特征点以外,我们还可以利用结构化环境提供的大量线和面的特征来进行SLAM系统的追踪与建图。

在SLAM的追踪模块中,作者对位置和姿态进行了解耦合的优化处理,同时利用曼哈顿假设对位姿进行优化。对于建图部分,从稀疏到稠密不同等级的地图可以以较低的计算量进行重建。作者使用实例化网格的策略,根据平面网格实例的独立性来建立稠密地图。

2. 引言

解决长期漂移问题一般有两种方法:一是回环检测,二是对环境结构进行假设,例如曼哈顿假设。

下图就是典型的曼哈顿结构中的建图流程。环境中包含线和面,它们朝向笛卡尔坐标系的三个正交方向中的一个。在室内场景中,墙、地面、屋顶一般在任何一个房间中都是相互正交或者平等的,非常符合曼哈顿假设。

 本文主要贡献

  • 基于曼哈顿假设原理,对位姿进行解耦。通过联合平面上的点、线特征以及附加的基于曼哈顿约束的位姿优化过程来提升位姿估计的准确性。
  • 提出平面实例化网格方法,将稀疏点云中生成一个轻量化环境表征。
  • 提出在结构环境下具有高精度的实时RGB-D SLAM系统。

3. 场景结构分析

作者结合点、线、面这三者的特征来对提高系统在结构化弱纹理场景下的稳定性,点特征采用ORB特征点,特征点的提取通过LSD方法[A Fast Line Segment Detector with a False Detection Control],由于RGB-D的缘故,我们可以直接得到稠密点云,通过 Efficient Organized Point Cloud Segmentation with Connected Components 这篇文章的思想来根据有序点云进行平面分割,平面方程用\pi = (\vec{n}, d)进行表示。

在点线提取环节,由于RGB-D相机得到的深度图在物体边界处会出现深度不连续的先天性弱势,当我们将特征根据深度值和相机内参进行投影至相机坐标系下时,势必会存在由于深度错误导致投影的不准确情况,为克服这种情况对系统的影响,作者采用啦一个小trick:对3D线进行滤波,即通过RANSAC的方法对线段上的外点进行剔除。

平面的法向量提取这块,作者采用法向量平滑的方式进行处理,即我取一个10×10大小的patch法向量的平均值来对当前法向量进行平滑。而后将我们提取的平面采用Point-Plane SLAM Using Supposed Planes for Indoor Environments 所介绍的数据关联的方法与我们已有平面进行匹配。大致思想就是说我们先对比它们之间的法向量角度的差异,如果小于一定阈值10度,我们可以再将它们的点到面的距离进行对比,如果小于0.1m的话,我们将其插入已观测地图中,同时在地图中加入平面平行和垂直关系为后续的追踪线程提供约束。

3.1. 位姿解耦与优化

在追踪线程中包含相机的旋转、平移的估计以及最后的位姿优化过程。位姿的接耦这部分作者推荐三篇论文供大家学习。

  • Divide and Conquer: Efficient ensity-based Tracking of 3D Sensors in Manhattan Worlds
  • Globally Optimal Manhattan Frame Estimation in Real-time
  • Visual Odometry with Drift-free Rotation Estimation Using Indoor Scene Regularities

后续我会针对这三篇论文进行整理,分享一下我们如何基于曼哈顿大世界的位姿解耦问题,在这里大家只要清楚作者通过在曼哈顿坐标系下求得了我们当前帧与曼哈顿坐标系的旋转矩阵

与,基于此我们就可以求得当前帧到世界坐标系下的旋转矩阵:

通过这种方式我可以先单独将旋转矩阵分解出来,这样的做法区别于之前根据我们典型的根据相邻帧的对极几何约束所求的本质矩阵或基础矩阵不同,每一帧是在我们的曼哈顿坐标下对旋转矩阵进行求解,这的好处是我们可以杜绝根据由于相邻帧的位姿估计所导致的误差的累计,当然我们通过在曼哈顿世界坐标系下求解的旋转矩阵也仍然存在误差,只不过没有累积误差这一说。

平移向量的估计我们通过构建残差方程,通过最小二乘来实现对平移向量的求解,作者根据点、线、面的约束构建了三个子残差方程,根据特征点的重投影误差所构建的残差方程为:

对于线特征,作者在文章中介绍过于简短,有必要参考论文Accurate and Linear Time Pose Estimation from Points and Lines 在此进行简短的介绍,对线特征的残差构之前,我们使用线特征的归一化法向量来对我们的线特征进行表征。

将线特征的端点P、Q投影至齐次坐标系下与观测量点乘得其残差

关于线段的残差方程为:

面特征的残差方程为:

我们假设我们的观测量服从高斯分布,那最终的非线性最小二乘可以写为:

3.2. 位姿优化

在进行位姿求解过程中,我们均在理想的曼哈顿假设进行位姿的接偶与估计。在实际环境中难免会出现不严格遵循曼哈顿假设的情况是我们的位姿估计存在偏差,所以在获取到初始化位姿后我们需要通过优化模型对其偏差进行补偿。将根据关键帧建立起局部地图投影到当前帧进行匹配搜索,另为作者加入平行和垂直的关系对平面进行约束。

3.3. 建图

在建图部分包含稀疏地图以及平面实例网格地图。其中稀疏地图有点、线以及面的特征组成。建图的策略跟其他经典SLAM类似,即将新观测到的点线面特征保存在局部地图中,然后将质量较高的特征放入全局地图中。这里注意一点就是不同于点、线特征,对于面特征来说我们对于新检测到的面特征在插入到全局地图之前我们需要先检查一下当前面特征是否与已观测到的平面相关联,若关联则将其加入到相关联平面中,否则就以新的平面插入到地图中。

4. 实验验证

作者在与其他SLAM系统进行对比时,选择将回环检测模块关闭来进行对比,取得了不错的实验效果,下面我将在ICL-NUM数据集上同ORB-SLAM2进行对比实验。

误差对比分析针对ICL-NUM的living_room_traj0_frei_png以及traj3_frei_png这两个数据集进行了测试,做了绝对轨迹误差(ape)分析,结果如下所示:

表的左半部分为living_room_traj0_frei_png分析结果,右半部分为traj3_frei_png分析结果。

planar SLAM

ORB-SLAM2的运行轨迹

上图为在traj3_frei_png数据集上测试的相机轨迹。

通过在数据集上的实验对比发现,在弱纹理、结构化场景中,通过将线、面特征加入到ORB-SLAM2的框架中,可以有效的为SLAM位姿提供强有力的约束,提升了SLAM系统的稳定性及精度,但同时由于加入面和线特征的缘故,会增加系统计算资源的投入。由于没有真值进行对比,仅将小车的运动轨迹显示出来。

下面为在走廊环境下的实验效果:

通过实际测试效果来看,Planar在走廊基本实现对自身位姿的准确估计,但在测试过程中需要注意,虽然PlanarSLAM有效的提升了在结构化弱纹理场景下的鲁棒性和精度。但在实际运行中应该避免相机直接面对一堵白墙,此时对相机来说无纹可言,无法有效提升点、线特征导致位姿估计错误。

4. 代码地址

https://github.com/yanyan-li/PlanarSLAM

参考文献

PlanarSLAM:基于结构化约束的视觉SLAM_深蓝学院的博客-CSDN博客_结构化slam

Structure-SLAM: Low-Drift Monocular SLAM in Indoor Environments

RGB-D SLAM with Structural Regularities

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

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

相关文章

介绍两个LVGL开发工具,让你做出更好的UI

环境 V公众号南山府嵌入式回复4001获取 NXP GUI-Guider 介绍的第一个就是恩智浦官方提供的,现在已经更新到1.4.1版本,相对前面的版本,变化还是挺大的,无论是界面设计还是其他的做的都挺不错的。而且特别好的一点是,支…

深度学习之初识篇——小白也能跑通的深度学习万能框架【重点】

目录深度学习环境配置点击下载深度学习环境数据集准备使用自己标注的数据集使用标注软件数据准备VOC标签格式转yolo格式并划分训练集和测试集部署和训练深度学习项目克隆项目获得预训练权重训练自己的模型启用tensorbord查看参数每文一语本文是作为后续跑深度学习的一个案例教程…

K - Kingdom‘s Power 贪心,E-奇环_牛客练习赛106 二分图 鸽笼原理,F-座位_概率期望,G-交换_dp​​​​​​

K - Kingdoms Power 贪心 一开始想的是要想路程最小,那么他一定是先去征服size最小的子树是最好的,然后就wa了,正解应该是按照深度来贪心,对于一个节点u的子节点,按照u走完子节点的步数进行排序,先从步数小…

年产3000吨冲压型果味硬糖生产车间工艺设计

目 录 摘 要 I Abstract II 1绪论 1 1.1选题概述 1 1.2市场分析 2 1.3设计参数和质量标准 3 1.3.1主要设计参数 3 1.3.2质量标准 3 2工艺流程设计 5 2.1工艺流程图 5 2.2工艺说明 5 2.2.1领料 5 2.2.2化糖 5 2.2.3过滤 6 2.2.4真空熬制 6 2.2.5冷却 6 2.2.6加辅料、调和 7 2.2.…

使用主成分分析进行模态分解(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

HTML入门零基础教程(五)

嗨,大家好,我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助,请支持一波。 希望未来可以一起学习交流。 目录 一、图像标签 1.图像标签 2.图标标签的其它属性 3.图像标签属性注意点: 一、图像标签 1.…

Unity工具 - 快捷任务栏(Taskbar)

在实际项目中,我们会使用很多的工具。根据工具的来源,可以分为:工程内工具,工程外工具。 工程内的工具:多数是由Unity 提供IMGUI工具包实现的,它使用OnGUI函数以及实现它的脚本来绘制和管理用户界面&#x…

【云服务器 ECS 实战】云服务器新手指南(配置+使用详解)

一、写在前面二、ECS 云服务是什么三、云服务器的购买与配置购买云服务器密码与安全组配置远程连接配置,使网络用户可以访问到服务器在服务器部署自己的网页一、写在前面 谈起云计算,相信大家都不陌生,可以说它已经颠覆了我们生活中的很多应…

Tomcat服务器的简介

文章目录1.概念1.1 什么是Web服务器?1.2 静态资源和动态资源1.3 常用服务器产品2. Tomcat的安装2.1 下载2.2 解压安装2.3 Tomcat的目录结构2.4 Tomcat服务器的启动和关闭3.项目部署及访问静态资源3.1 创建项目3.2 web项目部署1.概念 1.1 什么是Web服务器&#xff1…

Vue 官方文档2.x教程学习笔记 1 基础 1.4 模板语法 1.4.2 指令

Vue 官方文档2.x教程学习笔记 文章目录Vue 官方文档2.x教程学习笔记1 基础1.4 模板语法1.4.2 指令1 基础 1.4 模板语法 1.4.2 指令 指令 (Directives) 是带有 v- 前缀的特殊 attribute。 指令 attribute 的值预期是单个 JavaScript 表达式 (v-for 是例外情况)。…

【servelt原理_14_Session对象】

Session对象(重点) 1.Session概述 Session用于记录用户的状态。Session是指在一段时间之内,单个客户端与Web服务端的一连串的交互过程。在一个Session中,客户可能会多次请求访问各种不同的服务器资源 2.Session原理 服务器会为每一次会话分配一个Ses…

3.10、以太网交换机的生成树协议 STP

1、如何提高以太网的可靠性? 若交换机 A 与交换机 B 之间的链路故障 若交换机 A 与交换机 B 和 交换机 C 之间的链路都出现故障 则原来的以太网,变成了三个独立的较小的以太网,它们之间无法通行 1.1、冗余链路提高可靠性 添加冗余链路\col…

Sentinel源码解析-源码环境搭建

文章目录前言一、源码环境搭建1.从github上clone下来sentinel的源码仓库到本地:2. 这里我们想学习1.6版本的sentinel源码,所以切换git分支到release-1.63. 启动sentinel-dashboard:4. 登陆dashboard:5. 启动demo项目:6…

备忘录APP源码和设计报告

摘 要 【关键词】备忘录APP;SQLite数据库;Java语言;Android Studio,Activity,Intent,BaseAdapter 本项目是通过Android Studio开发的一款备忘录手机app,有欢迎页面,登录页面&#x…

MybatisPlus的CRUD接口

create、read、update、delete一、insert 1、插入操作 注意:数据库插入id值默认为:全局唯一id 2、主键策略 (1)ID_WORKER MyBatis-Plus默认的主键策略是:ID_WORKER 全局唯一ID (2)自增策略 要想…

git分支详解——记住这些指令能帮助你解决大部分git的分支问题

Github 之 分支 branch 操作之 查看分支/创建分支/切换分支/提交分支/删除分支/合并分支 等操作 一、简单介绍 二、查看分支 1、查看本地所有分支:git branch 2、查看远程有哪些分支:git branch -r 3、查看所有分支(本地和远程的)…

Egg 1. 快速开始 Quick Start 1.3 一步步 Step by Step 1.3.3 添加静态资源 1.3.4 添加渲染模板

Egg Egg 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Egg1. 快速开始 Quick Start1.3 一步步 Step by Step1.3.3 添加静态资源1.3.4 添加渲染模板1. 快速开始 Quick Start 1.3 一步步 Step by Step 1.3.3 添加静态资源 Egg 有一个名为stat…

【K8S系列】第十讲:kubectl 命令大全

目录 序言 1.基本介绍 1.1 命令格式介绍 2 基础命令 2.1 create 2.2 delete 2.2.1 根据yaml删除资源 2.2.1 根据名称删除资源 2.3 get 2.3.1查看pod列表 2.3.2 查看node 2.3.3 查看svc 2.3.4 查看all 2.3.5 查看ns 2.3.4 查看deploy 2.3 run 2.4 explain 2.…

基于PHP+MySQL珠宝销售网站的设计与开发

大多数时候珠宝是一种身份和高贵的象征,一个价值不菲的珠宝会给人一种高贵的感觉,同时珠光宝气也是人们非常喜欢的一种氛围,尤其是对女生来说,那种金光闪闪的东西总是会在无形中吸引她们的注意力,但是很多时候人们只能到商场或者专卖店购买珠宝,这种珠宝一方面鱼龙混杂,以次充好…

tinymce富文本编辑器的使用

tinymce富文本编辑器的使用 1、基本介绍 tinymce富文本官网:https://www.tiny.cloud/ 中文文档:http://tinymce.ax-z.cn/ tinymce-npm地址:https://www.npmjs.com/package/tinymce tinymce英文文档-示例地址:https://www.tin…