PL-SLAM

文章目录

    • PL-SLAM
      • 摘要
      • 系统介绍
        • 综述
        • 方法综述
      • LINE-BASED SLAM
        • 一、基于线的SLAM
        • 二、基于线和点的BA
        • 三、全局重定位
      • 使用线条初始化地图
      • 实验结果
    • 说明
      • 位姿求解
      • 三角化
      • LSD 直线检测算法
        • 📊 **一、核心原理**
        • ⚙️ **二、实现方法**
        • 📐 **三、应用场景**
        • ⚖️ **四、优缺点与优化**
        • **优缺点对比**
        • 💎 **总结**
    • End

摘要

译文

  • ——众所周知,低纹理场景是依赖点对应的几何计算机视觉算法的主要致命弱点之一,尤其是对于视觉 SLAM。 然而,在许多环境中,尽管纹理较低,但仍然可以可靠地估计基于线的几何基元,例如在城市和室内场景中,或者在结构化边缘占主导地位的所谓“曼哈顿世界”中。 在本文中,我们提出了一种解决方案来处理这些情况。 具体来说,我们建立在 ORB-SLAM 的基础上,大概是当前最先进的解决方案,无论是在准确性还是效率方面,并扩展其公式以同时处理点和线对应。
  • 我们提出了一种解决方案,即使大多数点从输入图像中消失,它也可以工作,而且有趣的是,它可以仅通过检测三个连续帧中的线对应关系来初始化。 我们在 TUM RGB-D 基准测试中彻底评估了我们的方法和新的初始化策略,并证明了线的使用不仅提高了原始 ORB-SLAM 解决方案在纹理不良帧中的性能,而且在序列帧中系统地改进了它 结合点和线,不影响效率。

描述

  • 首先指出了为什么要使用线特征:

    • 对于ORB-SLAM,如果在低纹理场景,或者是图像有运动模糊时,系统就会失效,但是在这些场景中往往还有线条,所以就希望能够应用线特征。
    • 同时,论文中说明了使用的线特征的难点在哪里:
      • 1)要找到合适的线条检测子和参数化方式
      • 2)从线匹配去计算位姿的可靠性是低于用点的,而且这些线特征对遮挡非常敏感
      • 3)使用端点还可以对orb点特征的代码进行部分复用
    • 最终,选择了用端点来参数化,原因是:这种方式对于遮挡和无检测的情况更加鲁棒。

系统介绍

综述
  • 跟orb-slam一样,Tracking线程 用来估计相机的位姿和决定是否要加入新关键帧;通过局部地图构建将新关键帧信息增加到地图并用BA优化;Loop closing线程 持续的进行闭环检测并修正。

请添加图片描述

方法综述

在PL-SLAM中,与线特征相关的处理包括了:

  • 检测:使用LSD的方法,时间复杂度是 O ( n ) O(n) O(n),n为图片中像素的个数。

  • 三角化:

  • 匹配:

    • 使用了以 Line Band Descriptors为基础的方法,通过一个关系图(relational graph)当前的线会和已经在地图中的线进行配对。
    • 在获得了初始的map-to-image的线特征对集合后,所有在局部地图中的线都被投影到图像上,进一步寻找匹配对,然后,如果这个图片有足够多的新环境信息,他就会被标记为关键帧,它对应的线会被三角化并添加进地图。
  • 线的剔除:从少于三个视点或少于 25% 的帧中看到的线会被丢弃(剔除)。

  • 优化:线在地图中的位置使用局部BA进行优化。

  • 重定位: 注意,因为对整个地图进行线的匹配的计算量非常大,所以回环检测中只使用点特征。

LINE-BASED SLAM

一、基于线的SLAM

1、线段代替直线

  • 对于线的描述,采用了 端点(endpoints) 的方法,毕竟现实中,几乎不不可能碰到无限延伸的直线,几乎都是线段,所以,用端点的方法来描述直线是比较合理的。

2、计算直线齐次方程

  • 我们假设 P , Q ∈ R 3 P, Q \in R^3 P,QR3 是空间直线的两个端点, p d , q d ∈ R 2 p_d, q_d \in R^2 pd,qdR2是其在图像中的投影坐标,另外,记 p d h , q d h ∈ R 3 p_d^h, q_d^h \in R^3 pdh,qdhR3 是对应的齐次坐标。于是,我们可以得到直线的参数:

    • I = p d h × q d h ∣ p d h × q d h ∣ I = \frac{p_d^h \times q_d^h}{ |p_d^h \times q_d^h| } I=pdh×qdhpdh×qdh
  • 其次坐标说明:

    • 对于向量(x,y,1),可以在几何意义上理解为是在【第三维为常数的】平面上的一个二维向量。
    • 这种用3维向量表示2维向量,或者一般而言,用一个n+1维的向量表示一个n维向量的方法称为齐次坐标表示法。。

3、有了直线参数,下面再来看线的重投影误差,它是点到线距离之和。

3.1 图像说明误差

  • 请添加图片描述

  • 左图:

    • 真实 P , Q P,Q P,Q 两点投影过来
      • P , Q ∈ R 3 \mathbf{P}, \mathbf{Q} \in \mathbb{R}^3 P,QR3表示3D线特征上的两个3D点(绿色点
      • $\widetilde{\mathbf{p}}, \widetilde{\mathbf{q}} \in \mathbb{R}^2 $是他们在 Image图像平面上的投影点(绿色点
      • l ~ \tilde{l} l~ 是投影的线的系数。
    • 相机本身测量
      • p d , q d ∈ R 2 \mathbf{p}_{\mathrm{d}}, \mathbf{q}_{\mathrm{d}} \in \mathbb{R}^2 pd,qdR2是提取出的线特征(线段)的两个端点,测量值
      • P , Q ∈ R 3 \mathbf{P}, \mathbf{Q} \in \mathbb{R}^3 P,QR3 就是这两个端点反投影回到3D空间中对应的3D点,
      • I I I 是检测到的线的系数。
  • 右图:

    • d 1 、 d 2 d_1、d_2 d1d2 就是我们要的线重投影误差。 d 1 ′ 、 d 2 ′ d'_1、d'_2 d1d2 就是我们要的线重投影误差。
    • (检测到的2D线段(蓝色)和对应的投影的3D线段(绿色)之间的误差)。

3.2 定义线的重投影误差

  • 投影线段的端点与在图像中检测到的直线之间的点到直线距离之和:

    • E line  ( P , Q , I , θ , k ) = E p l 2 ( P , I , θ , k ) + E p l 2 ( Q , I , θ , k )     ( 2 ) E_{\text {line }}(P, Q, I, \theta, k)=E_{p l}^2(P, I, \theta, k)+E_{p l}^2(Q, I, \theta, k) \space \space \space(2) Eline (P,Q,I,θ,k)=Epl2(P,I,θ,k)+Epl2(Q,I,θ,k)   (2)

    • E p l ( P , I , θ , k ) = I T π ( P , θ , K ) E_{p l}(P, I, \theta, k)=I^T \pi(P, \theta, K) Epl

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

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

相关文章

快速手搓一个MCP服务指南(八):FastMCP 代理服务器:构建灵活的 MCP 服务中介层

在分布式系统和微服务架构日益普及的今天,服务间的通信与集成变得至关重要。FastMCP 从 2.0.0 版本引入的代理服务器功能,为 MCP (Model Context Protocol) 生态提供了强大的服务中介能力。本文将深入解析 FastMCP 代理服务器的核心概念、应用场景与实践…

Ubuntu20下安装SAMBA服务

1、安装Samba: 在 Ubuntu 上,打开终端,并运行以下命令以安装 Samba sudo apt update sudo apt install samba 2、配置共享目录 修改共享目录的权限,我的共享目录是samba_share sudo chmod -R 777 ./samba_share 创建Samba用户账号 sud…

Python 数据分析与机器学习入门 (一):环境搭建与核心库概览

Python 数据分析与机器学习入门 (一):环境搭建与核心库概览 本文摘要 本文是 Python 数据分析与机器学习入门系列的第一篇,专为初学者设计。文章首先阐明了 Python在数据科学领域的优势,然后手把手指导读者如何使用 Anaconda 搭建一个无痛、专…

编译UltraleapTrackingWebSocket

最近要在项目中用到 Leap Motion,无意中发现了一个 Go 语言的 Leap Motion 库: https://gobot.io/documentation/platforms/leapmotion/ 示例代码看起来很简单,但是要实际运行起来还需要一些条件。 在示例代码中,我们看到它连接…

[ linux-系统 ] 磁盘与文件系统

1.认识磁盘结构 机械键盘是计算机中唯一的机械设备,磁盘是外设,容量大,速度慢,价格便宜 物理结构: 磁头是一面一个,左右摆动,两个整体移动的,有磁头停靠点磁头和盘面不接触&#x…

Spring AI RAG

目录 Spring AI 介绍 Spring AI 组件介绍 Spring AI 结构化输出 Srping AI 多模态 Spring AI 本地Ollama Spring AI 源码 Spring AI Advisor机制 Spring AI Tool Calling Spring AI MCP Spring AI RAG Spring AI Agent 一、技术架构与核心流程‌ 检索增强生成 (RA…

深入Linux开发核心:掌握Vim编辑器与GCCG++编译工具链

文章目录 一、Vim:终端环境下的编辑艺术1.1 Vim设计哲学:模态编辑的终极实践1.2 高效导航:超越方向键的移动艺术1.3 定制化开发环境:从基础到专业IDE1.4 调试集成:Vim作为调试前端 二、GCC/G:Linux编译基石…

阿里云-spring boot接入arms监控

目标:在ecs中启动一个java应用,且携带arms监控 原理:在java应用启动时,同时启动一个agent探针,时刻监控java应用变化(如:接口调用、CPU、线程池状态等) 1.arms接入中心添加java应用…

昆泰芯3D霍尔磁传感器芯片在汽车零部件中的应用

HUD即抬头显示系统(Head-Up Display),HUD 是一种将重要的车辆或飞行等相关信息(如速度、导航指示、警告信息等)投射到驾驶员或操作员前方视野范围内的透明显示屏或直接投射到风挡玻璃上的技术。 HUD即抬头显示系统(Head-Up Display)&#xff…

new Vue() 的底层工作原理

当你调用 new Vue() 时,Vue.js 会执行一系列复杂的初始化过程。让我们深入剖析这个看似简单的操作背后发生的事情: 1. 初始化阶段 (1) 内部初始化 function Vue(options) {if (!(this instanceof Vue)) {warn(Vue is a constructor and should be cal…

最简安装SUSE15SP7导致大部分命令缺失

我嘞个去~~~明明选择Enable了ssh,结果也没给装。 俺习惯使用NetworkManager管理网络,没给装,用不了nmcli和nmtui。不高兴归不高兴,最简安装的话,也情有可原。我嘞个去去~~连ping、vi都没有装,这也太简了。…

Vue-14-前端框架Vue之应用基础嵌套路由和路由传参

文章目录 1 嵌套路由1.1 News.vue1.2 Detail.vue1.3 router/index.ts2 路由传参2.1 query参数2.1.1 News.vue(传递参数)2.1.2 Detail.vue(接收参数)2.2 params参数2.2.1 router/index.ts(需要提前占位)2.2.2 News.vue(传递参数)2.2.3 Detail.vue(接收参数)2.3 props配置2.3.1 r…

Python网安-ftp服务暴力破解(仅供学习)

目录 源码在这里 需要导入的模块 连接ftp,并设置密码本和线程 核心代码 设置线程 源码在这里 https://github.com/Wist-fully/Attack/tree/cracker 需要导入的模块 import ftplib from threading import Thread import queue 连接ftp,并设置密码…

ES6数组的`flat()`和`flatMap()`函数用法

今天给大家分享ES6中两个超实用的数组函数:flat()和flatMap(),学会它们能让数组处理变得更轻松! 1. flat()函数 1.1 基本介绍 flat()用于将嵌套数组"拍平",即将多维数组转换为一维数组。 1.2 语法 const newArray …

upload-labs靶场通关详解:第15-16关

第十五关 getimagesize函数验证 一、分析源代码 function isImage($filename){$types .jpeg|.png|.gif;if(file_exists($filename)){$info getimagesize($filename);$ext image_type_to_extension($info[2]);if(stripos($types,$ext)>0){return $ext;}else{return false…

【Linux】基础IO流

好的代码自己会说话,清晰的逻辑与优雅的结构,是程序员与世界对话的方式。 前言 这是我自己学习Linux系统编程的第五篇笔记。后期我会继续把Linux系统编程笔记开源至博客上。 上一期笔记是关于进程: 【Linux】进程-CSDN博客https://blog.csdn…

【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(二)

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为…

AD8021ARZ-REEL7【ADI】300MHz低噪声运放放大器,高频信号处理的性价比之选!

AD8021ARZ-REEL7(ADI)产品解析与推广文案 1. 产品概述 AD8021ARZ-REEL7 是 Analog Devices Inc.(ADI) 推出的一款 高速、低噪声运算放大器(Op-Amp),属于 ADI的高性能放大器系列,专为…

WPF学习笔记(11)数据模板DataTemplate与数据模板选择器DataTemplateSelector

数据模板DataTemplate与数据模板选择器DataTemplateSelector 一、DataTemplate1. DataTemplate概述2. DataTemplate详解 二、DataTemplateSelector1. DataTemplateSelector概述2. DataTemplateSelector详解 总结 一、DataTemplate 1. DataTemplate概述 DataTemplate 表示数据…

【V6.0 - 听觉篇】当AI学会“听”:用声音特征捕捉视频的“情绪爽点”

系列回顾: 在上一篇 《AI的“火眼金睛”:用OpenCV和SHAP洞察“第一眼缘”》 中,我们成功地让AI拥有了视觉,它已经能像一个严苛的“质检员”一样,评判我视频的画质和动态感。 但我的焦虑并没有完全消除。因为我发现&a…