ORB-SLAM策略思考之优化器策略

ORB-SLAM策略思考之优化器策略

优化器策略

1 跟踪线程中的优化策略

  1. 地图初始化阶段:BA优化(初始化帧位姿固定,优化地图点位姿和第二帧位姿)
    1. 当ORB-SLAM判断地图初始化的地图点足以进入地图点位置第二帧位姿优化阶段时,以初始化帧的相机坐标系为世界坐标系,基于相机的重投影误差进行优化,值得注意的是,这里地图点会分别投影到第二帧和初始化帧中去,即一个地图点会产生两个误差边,值得注意的是,在这部分优化的过程中,需要将初始化帧位姿对应的顶点进行固定。
  2. 恒速模型跟踪阶段:BA优化(地图点位置固定,优化跟踪地图点的当前帧位姿
    1. 在恒速模型跟踪阶段,ORB-SLAM系统认为,被跟踪的地图点的位置是准确无误的,因此以被跟踪的地图点作为参照,将被跟踪地图点投影到当前帧的像素坐标系中去,这里地图点对应的顶点只有一条误差边,值得注意的是,这部分地图点的只是投影到当前帧的像素坐标系中去,对当前地图点对应的其他帧不进行优化处理。值得注意的是,这部分优化过程中,需要将跟踪到的地图点位置固定
  3. 基于上一帧的跟踪阶段:BA优化(地图点位置固定,优化跟踪地图点的当前帧位姿
    1. 基于上一帧的跟踪阶段和基于恒速模型的跟踪阶段对应的优化是相同的,只是跟踪匹配的方式不同,基于恒速模型跟踪的是重投影匹配的方式,即将上一帧对应的地图点,基于速度信息(位姿偏差)进行重投影匹配,而基于上一帧的跟踪阶段使用的是窗口匹配的方式,即在当前帧的对应上一帧的特征点的位置画一个圆,根据先验的金字塔层级进行2D描述子之间距离计算和匹配。
  4. 重定位阶段:BA优化(地图点位置固定,优化跟丢的当前帧位姿)
    1. 在重定位阶段,将当前重定位的候选匹配关键帧拿出来之后,使用基于词袋的匹配方式,找到与当前帧的特征点对应的地图点,将这些地图点投影到当前帧中来,使用和恒速模型相同的优化手段进行优化。
  5. 局部地图点跟踪阶段:BA优化(地图点位置固定,通过局部地图增加匹配,对当前帧位姿进行二次优化
    1. 在跟踪线程中,跟踪局部地图是上述跟踪阶段的后面,主要目的就是通过二阶相连共视图的方式寻找构建局部地图,使用局部地图进行匹配数目的增加,值得注意的是,这里的优化手段依然固定地图点的方式,与恒速模型跟踪中使用的优化方式一致。

2 局部建图线程中的优化策略

  1. 局部BA阶段:BA优化(与当前关键帧二阶相连关键帧固定,优化当前关键帧,与当前关键帧一阶相连关键帧的位姿地图点位置
    1. 局部建图线程中,维护了最近新增地图点信息,以此为媒介,删除全局地图中的冗余地图点信息(只有这个作用!!
    2. 在局部建图阶段的BA优化中,拿出与当前关键帧一阶相连的关键帧、二阶向量的关键帧,以当前关键帧和与其一阶相连的关键帧中的地图点作为局部地图点。以局部地图点和上述涉及到的关键帧为顶点,构建地图点和关键帧之间的重投影约束。值得注意的是,其中的二阶相连关键帧只提供额外的约束信息,并不参与优化,进行固定。

3 回环闭合线程中的优化策略

  1. 计算SIM3阶段:BA优化(固定地图点,优化回环闭合两帧之间的SIM3矩阵)
    1. 这里值得注意的是,在回环闭合线程中,使用RANSAC算法得到初步的SIM3变换矩阵后,使用基于SIM3的相互投影匹配,实现了两关键帧之间的匹配,与之前匹配方式不同的是,两关键帧对应特征点匹配成功后,都对应的是同一个地图点,但是这种情况匹配成功后两关键帧对应的还是两个不同的地图点,只是由于位姿误差积累和尺度误差导致的,这里就是对闭环关键帧对应的SIM3矩阵进行计算,以此来校正误差。
    2. 该优化过程涉及到的顶点有,匹配特征点对应的不同地图点位置,两个关键帧之间对应的一个SIM3变换矩阵,使用该变换矩阵将匹配特征点对应的地图点进行相互投影,产生优化边。值得注意的是,在优化过程中,需要将对应位置的地图点进行固定
  2. 位姿校正阶段:使用本质图优化(位姿图优化,固定回环闭合匹配关键帧的位姿
    1. 位姿图优化中的边包含的内容如下:
      1. 生成树内的关键帧对应的连接边
      2. 历史产生的所有的回环连接边
      3. 共视图中,共视权重超过100的连接边
      4. 本次回环新生成的连接边中满足共视权重大于100或者满足有一端连接是当前关键帧或者当前回环闭合匹配关键帧的连接边
    2. 所有的关键帧都参与位姿图优化

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用GPU租用平台AutoDL

AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 1.价格 截取的部分,价格可以说是非常的优惠了,比其他很多平台都要低,如果是学生党还可以享受到会员价格 2.申请学生认证 只需要有在学校申请的邮箱即可 3.租用GPU 点击右上角控制台 点击…

【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】

实验五、古典密码(中) 实验目的和原理简介参见博客:古典密码(上) 一、实验内容 1、弗纳姆密码(Vernam Cipher) (1)、算法原理 加密原理: 加密过程可以用…

多线程-Thread类及常见方法

目录 1.什么是Thread类 1.1Thread 的常⻅构造⽅法 1.2 Thread 的⼏个常⻅属性 2.启动⼀个线程 - start() 经典面试题:start 和run 区别 3.中断⼀个线程 方法一: 方法二: 4.等待⼀个线程 - join() 5. 获取当前线程引用 方法一: 方法二…

【Linux】—— 命名管道详解

命名管道是一种在操作系统中用于进程间通信的机制,它允许不同的进程之间通过管道进行数据交换。与匿名管道相比,命名管道具有更多的灵活性和功能。在本博客中,我们将深入探讨命名管道的概念、用途以及如何在编程中使用它们。 目录 &#xff…

多线程(看这一篇就够了,超详细,满满的干货)

多线程 一.认识线程(Thread)1. 1) 线程是什么1. 2) 为啥要有线程1.3) 进程和线程的区别标题1.4) Java的线程和操作系统线程的关系 二.创建线程方法1:继承Thread类方法2:实现Runnable接口方法3:匿名内部类创建Thread子类对象标题方法4:匿名内部类创建Runn…

139:leafle加载here地图(v3软件多种形式)

第139个 点击查看专栏目录 本示例介绍如何在vue+leaflet中添加HERE地图(v3版本的软件),并且含多种的表现形式。包括地图类型,文字标记的设置、语言的选择、PPI的设定。 v3版本和v2版本有很大的区别,关键是引用方法上,请参考文章尾部的API链接。 直接复制下面的 vue+leaf…

SpringCloud之Nacos的学习、快速上手

1、什么是Nacos Nacos是阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案,用来实现配置中心和服务注册中心。 Nacos 快速开始 2、安装运行nacos nacos下载地址 下载地址: https://github.com/alibaba/nacos/rel…

冒泡排序-BubbleSort

1、基本思路 从数组的左边开始,比较两个元素的大小,当左边大于右边时,更换左右元素位置,否则不改变;接着向右移动一步,比较第二个元素和第三个元素的大小,重复上述操作,直到最后一个…

VMware workstation安装FreeBSD14.0虚拟机并配置网络

VMware workstation安装FreeBSD14.0虚拟机并配置网络 FreeBSD是类UNIX操作系统,FreeBSD带有多个软件包,并覆盖了广阔的应用领域,且都是免费和易于安装的。该文档适用于在VMware workstation平台安装FreeBSD14.0虚拟机。 1.安装准备 1.1安装…

Spring+SprinMVC+MyBatis配置方式简易模板

SpringSprinMVCMyBatis配置方式简易模板代码Demo GitHub访问 ssm-tpl-cfg 一、SQL数据准备 创建数据库test,执行下方SQL创建表ssm-tpl-cfg /*Navicat Premium Data TransferSource Server : 127.0.0.1Source Server Type : MySQLSource Server Versio…

QCustomPlot 曲线数据结构与存取

对了,我开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中。感兴趣的朋友可以搜索“里先森sements”来关注,欢迎来玩~! 通常,我们对QCustomPlot中的曲线数据无外乎增、删、改…

xshell配置隧道转移规则

钢铁知识库,一个学习python爬虫、数据分析的知识库。人生苦短,快用python。 xshell是什么 通俗点说就是一款强大ssh远程软件,可以方便运维人员对服务器进行管理操作,功能很多朋友们自行探索,今天只聊其中一个功能点那…

【RHCSA服务搭建实验】之apache

虚拟web主机类型 一、基于端口 1.vim /etc/httpd/conf.d/vhost2.conf ---- — 改变http服务默认访问路径 <directory /testweb1>allowoverride none 表示不允许覆盖其他配置require all granted 表示允许所有请求 </directory> <virtualhost 0.0.0.0:…

分布式系统中为什么需要使用消息队列

本文转载自 linkedkeeper.com 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。 当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&#…

【Docker】使用Docker安装Nginx及部署前后端分离项目应用

一、Nginx介绍 Nginx是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。它是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的&#xff0c;公开版本1.19.6发布于2020年12月15日。其将源代码以类BSD许可证的形式发布&#xff0c;因它…

RLC如何通过改变频率实现输出稳压

当开关频率工作在容性区域时&#xff0c;容抗抵消完感抗还有剩余&#xff0c;所以容抗感抗可以近似为一个容抗Cr,但加上频率的改变&#xff0c;容抗又可以近似为一个可调电阻 那又改如何控制频率&#xff0c;保持输出稳压&#xff1f; 当输入与输出电压不变时&#xff0c;Rac变…

尝试解决githubclone失败问题

BV1qV4y1m7PB 根据这个视频 似乎是我的linux的github似乎下好了 我没有配置好 比如我的ssh-key 现在根据视频试试 首先需要跳转到ssh的文件夹&#xff1a; cd ~/.ssh 然后生成一个ssh-key&#xff1a; ssh-keygen -t rsa -C "<github资料里的邮箱>" 然后…

Python(18)--文件输入/输出 Ⅱ

​ 大家好&#xff01;我是码银&#x1f970; 欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 前言 前一篇文章&#xff08;python(17)–文件的输入/输出-CSDN博客&#xff09;介绍了如何操作文本文件和二进制文件&#xff0c;以及对应…

跨站点请求伪造攻击 - Cross Site Request Forgery (CSRF)

什么是CSRF 最好理解CSRF攻击的方式是看一个具体的例子。 假设你的银行网站提供一个表单,允许当前登录用户将钱转账到另一个银行账户。例如,转账表单可能如下所示: <form method="post"action="/transfer"> <

SpringBoot 更新业务场景下,如何区分null是清空属性值 还是null为vo属性默认值?

先看歧义现象 值为null 未传递此属性 所以此时如何区分null 时传递进来的的null&#xff0c;还是属性的默认值null? 引入方案 引入过滤器&#xff0c;中间截获requestBodyData并保存到HttpServletRequest&#xff0c;业务层从HttpServletRequest 获取到requestBodyData辅…