当前位置: 首页 > news >正文

ORB-SLAM2源码学习:MapPoint.cc④: 新增地图点总结

前言

让我们来总结ORB-SLAM2 中的新增地图点。

1.在第一阶段跟踪中的恒速模型跟踪中新增地图点

针对双目相机或RGB-D相机,找出上一帧中具有有效深度值且不是地图点的特征点,将其中较近的点作为上一帧新的临时地图点, 并记录在向扯mlpTemporalPoints 中。注意,这里因为是临时地图点,所以没有添加地图点的相互观测和属性信息(最佳描述子、平均观测方向、观测距离范围)。

ORB-SLAM2源码学习:Tracking.cc:Tracking::UpdateLastFrame更新上一帧位姿并创建临时地图点-CSDN博客

void Tracking :: UpdateLastFrame ()
{//Step 1 : 利用参考关键帧更新L - 帧在世界坐标系F 的位姿//······//Step 2 : 对于双门相机或RGB-D 相机,为上一帧生成新的临时地图点//······//加入上一帧的地图点中mLastFrame.mvpMapPoints[i] =pNewMP;//标记为临时添加的地图,之后会全部删除mlpTemporalPoints.push_back(pNewMP);

2.第二阶段跟踪结束后新建关键帧时

针对双目相机或RGB-D相机,找出当前帧中具有有效深度值且不是地图点的特征点,将其中较近的点作为当前帧的新的地图点。与函数Tracking::UpdateLastFrame()功能类似,不同之处是这里添加的是真正的地图点, 会添加地图点和关键帧的相互观测和属性信息,如最佳描述子、平均观测方向、观测距离范围。

....
MapPoint* pNewMP = new MapPoint(x3D,pKF,mpMap);// 这些添加属性的操作是每次创建MapPoint后都要做的pNewMP->AddObservation(pKF,i);pKF->AddMapPoint(pNewMP,i);pNewMP->ComputeDistinctiveDescriptors();pNewMP->UpdateNormalAndDepth();mpMap->AddMapPoint(pNewMP);mCurrentFrame.mvpMapPoints[i]=pNewMP;
....

ORB-SLAM2源码学习:Tracking.cc: void Tracking::CreateNewKeyFrame 创建新的关键帧-CSDN博客

3.局部建图线程中

1.在局部建图线程中,用当前关键帧与相邻关键帧通过三角化生成新的地图点。这里地图点会添加相互观测和属性信息,如最佳描述子、平均观测方向、观测距离范围,并且会将新增地图点放到一个名为“最近新增地图点”的队列mlpRecentAddedMapPoints中,这些新增的地图点后续需要接受函数MapPointCulling 的检验。

            //三角化生成3D点成功,构造成MapPointMapPoint* pMP = new MapPoint(x3D,mpCurrentKeyFrame,mpMap);// Step 6.9:为该MapPoint添加属性:// a.观测到该MapPoint的关键帧pMP->AddObservation(mpCurrentKeyFrame,idx1);            pMP->AddObservation(pKF2,idx2);mpCurrentKeyFrame->AddMapPoint(pMP,idx1);pKF2->AddMapPoint(pMP,idx2);// b.该MapPoint的描述子pMP->ComputeDistinctiveDescriptors();// c.该MapPoint的平均观测方向和深度范围pMP->UpdateNormalAndDepth();mpMap->AddMapPoint(pMP);

ORB-SLAM2源码学习:LocalMapping.cc: LocalMapping::CreateNewMapPoints生成新的地图点-CSDN博客

2.在局部建图线程中, 将当前关键帧的地图点分别与一级、二级相连关键帧的地图点进行正向融合和反向融合。这里的融合包括替换或新增地图点,并且会添加相互观测。最后会统一更新地图点的属性信息。

    ....vpMapPointMatches = mpCurrentKeyFrame->GetMapPointMatches();for(size_t i=0, iend=vpMapPointMatches.size(); i<iend; i++){MapPoint* pMP=vpMapPointMatches[i];if(pMP){if(!pMP->isBad()){// 在所有找到pMP的关键帧中,获得最佳的描述子pMP->ComputeDistinctiveDescriptors();// 更新平均观测方向和观测距离pMP->UpdateNormalAndDepth();}}}....

ORB-SLAM2源码学习:LocalMapping.cc: void LocalMapping::SearchInNeighbors 检查并融合当前关键帧和相邻帧(两级相邻)的重复地图点-CSDN博客

结束语

以上就是我学习到的内容,如果对您有帮助请多多支持我,如果哪里有问题欢迎大家在评论区积极讨论,我看到会及时回复。

相关文章:

ORB-SLAM2源码学习:MapPoint.cc④: 新增地图点总结

前言 让我们来总结ORB-SLAM2 中的新增地图点。 1.在第一阶段跟踪中的恒速模型跟踪中新增地图点 针对双目相机或RGB-D相机&#xff0c;找出上一帧中具有有效深度值且不是地图点的特征点&#xff0c;将其中较近的点作为上一帧新的临时地图点&#xff0c; 并记录在向扯mlpTempo…...

2025西湖论剑-babytrace

前言 就做了下题目&#xff0c;pwn1/3 都是签到&#xff0c;pwn2 后面绕 ptrace 有点意思&#xff0c;简单记录一下 漏洞分析 子进程中的读/写功能没有检查负数的情况&#xff0c;存在越界读写&#xff1a; void __fastcall get_value(__int64 *int64_arr) {__int64 ll; //…...

绘图专用,26个常见流程图符号及其解释

关注作者 当您设计网站、构建应用程序或绘制业务系统时&#xff0c;您需要一种方法来清晰地绘制步骤和用户流程。虽然您可以使用流程图来概述这些过程&#xff0c;但箭头和方框只能帮助您到目前为止。为了清楚地表达您的意思&#xff0c;您需要流程图符号。 为了帮助解释每个流…...

【个人学习记录】软件开发生命周期(SDLC)是什么?

软件开发生命周期&#xff08;Software Development Life Cycle&#xff0c;SDLC&#xff09;是一个用于规划、创建、测试和部署信息系统的结构化过程。它包含以下主要阶段&#xff1a; 需求分析&#xff08;Requirements Analysis&#xff09; 收集并分析用户需求定义系统目标…...

自学SpringBoot笔记

概念 什么是SpringBoot&#xff1f; Spring Boot 是基于 Spring Framework 的一款开源框架&#xff0c;主要用于简化 Spring 应用程序的开发。它通过提供一系列的 开箱即用的功能 和 自动配置&#xff0c;让开发者可以快速构建生产级别的独立应用程序&#xff0c;而无需手动配…...

03JavaWeb——Ajax-Vue-Element(项目实战)

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xf…...

[leetcode](找到vector中的特定元素并删除)无重复字符的最长子串

一.找到vector中的特定元素并删除 #include <iostream> #include <vector> #include <algorithm> int main() { // 示例 vector std::vector<int> vec {1, 2, 3, 4, 5, 6}; // 要删除的元素 int aim 3; // 查找元素 auto it std::fin…...

Mockito+PowerMock+Junit单元测试

一、单元测试用途 1、日常开发团队要求规范&#xff0c;需要对开发需求代码进行单元测试并要求行覆盖率达到要求&#xff0c;DevOps流水线也会开设相关门禁阀值阻断代码提交&#xff0c;一般新增代码行覆盖率80%左右。 二、Mock测试介绍 1、Mock是为了解决不同的单元之间由于…...

Ncat: bind to :::7777: Address already in use报错问题解决

问题描述 Ncat: bind to :::7777: Address already in use. QUITTING. 具体解决方法 If you are in linux environment try, Use netstat -tulpn to display the processeskill -9 <pid> This will terminate the process If you are using windows, Use netstat -…...

Docker 搭建mysql 连接超时问题,xxl-job启动mysql连接报错,禁用dns

1.本地连接Navicat报错信息&#xff0c;猜测是navicat默认连接超时导致的&#xff0c;后面换成idea一个插件虽然慢但连接上了 2013 - Lost connection to MySQL server at reading initial communication packet 2.启动xxl-job会报错&#xff0c;网上有人mysql驱动与数据库不匹…...

在线图片像素颜色拾取工具

在线图片像素颜色拾取工具&#xff0c;非常方便的一个工具&#xff0c;无需登录&#xff0c;用完就走。 包括中文和英文版本。 https://getcolor.openai2025.com...

Qt之登录界面(splash)

在上一篇多文档窗口设计(MDI)的基础上增加了一个登录界面&#xff08;splash&#xff09;. 该模块可以扩展为常规的软件登录界面。 界面展示如下 如果用户名和密码输入正确&#xff0c;则调到MDI界面&#xff0c;如果用户名和密码一共输入三次以上&#xff0c;则程序强制退出…...

NotebookLM:Google 最新 AI 笔记助理解析与实战应用

NotebookLM&#xff1a;Google 最新 AI 笔记助理解析与实战应用 在 AI 驱动的生产力工具不断进化的今天&#xff0c;Google 推出的 NotebookLM&#xff08;Notebook Language Model&#xff09;成为了一款备受关注的智能笔记助理。它结合了 Google 的大语言模型&#xff08;LL…...

软路由系统iStoreOS 一键安装 docker compose

一键安装命令 大家好&#xff01;今天我来分享一个快速安装 docker-compose 的方法。以下是我常用的命令&#xff0c;当前版本是 V2.32.4。如果你需要最新版本&#xff0c;可以查看获取docker compose最新版本号 部分&#xff0c;获取最新版本号后替换命令中的版本号即可。 w…...

vue3本地文件下载

开发记录&#xff1a; vue3本地下载文件要把文件放到public下&#xff0c;如果放在src里面可能会出现这个问题...

纯代码实现给WordPress添加文章复制功能

在给wordpress添加内容时&#xff0c;有时会遇到文章复制的功能&#xff0c;但是wordpress又没有这个功能。把下面一段代码添加到functions.php文件中&#xff0c;就可以实现这个功能。 /** Function for post duplication. Dups appear as drafts. User is redirected to the…...

Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)

目录 前言1. 基本知识2. Java代码 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线&#xff01;&#xff01; 对于Java的基本知识推荐阅读&#xff1a; java框架…...

【PyQt】图像处理系统

[toc]pyqt实现图像处理系统 图像处理系统 1.创建阴影去除ui文件 2.阴影去除代码 1.创建阴影去除ui文件 UI文件效果图&#xff1a; 1.1QT Desiger设置组件 1.两个Pushbutton按钮 2.两个label来显示图像 3.Text Browser来显示输出信息 1.2布局的设置 1.先不使用任何La…...

Ruby语言的循环实现

Ruby语言的循环实现深入探讨 在程序设计中&#xff0c;循环是一种常见的控制结构&#xff0c;用于重复执行某些代码块。不同的编程语言提供了不同类型的循环结构&#xff0c;以满足不同的需求。Ruby是一种灵活且易于使用的编程语言&#xff0c;其循环实现方式独具一格&#xf…...

javaEE安全开发 SQL预编译 Filter过滤器 Listener 监听器 访问控制

前言 java开发和其他开发的不同并且更安全就是因为他拥有简单的预编译机制 filter 过滤器 和 listener 监听器 这个很重要 就是 web应用监听器和过滤器是在 Servlet 之前的并且 我们的请求和响应都需要经过 两者的同意才可以通过 缺一不可 、 Listener 安全方面 监听器…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...