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相机,找出上一帧中具有有效深度值且不是地图点的特征点,将其中较近的点作为上一帧新的临时地图点, 并记录在向扯mlpTempo…...
2025西湖论剑-babytrace
前言 就做了下题目,pwn1/3 都是签到,pwn2 后面绕 ptrace 有点意思,简单记录一下 漏洞分析 子进程中的读/写功能没有检查负数的情况,存在越界读写: void __fastcall get_value(__int64 *int64_arr) {__int64 ll; //…...
绘图专用,26个常见流程图符号及其解释
关注作者 当您设计网站、构建应用程序或绘制业务系统时,您需要一种方法来清晰地绘制步骤和用户流程。虽然您可以使用流程图来概述这些过程,但箭头和方框只能帮助您到目前为止。为了清楚地表达您的意思,您需要流程图符号。 为了帮助解释每个流…...
【个人学习记录】软件开发生命周期(SDLC)是什么?
软件开发生命周期(Software Development Life Cycle,SDLC)是一个用于规划、创建、测试和部署信息系统的结构化过程。它包含以下主要阶段: 需求分析(Requirements Analysis) 收集并分析用户需求定义系统目标…...
自学SpringBoot笔记
概念 什么是SpringBoot? Spring Boot 是基于 Spring Framework 的一款开源框架,主要用于简化 Spring 应用程序的开发。它通过提供一系列的 开箱即用的功能 和 自动配置,让开发者可以快速构建生产级别的独立应用程序,而无需手动配…...
03JavaWeb——Ajax-Vue-Element(项目实战)
1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序…...
[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、日常开发团队要求规范,需要对开发需求代码进行单元测试并要求行覆盖率达到要求,DevOps流水线也会开设相关门禁阀值阻断代码提交,一般新增代码行覆盖率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报错信息,猜测是navicat默认连接超时导致的,后面换成idea一个插件虽然慢但连接上了 2013 - Lost connection to MySQL server at reading initial communication packet 2.启动xxl-job会报错,网上有人mysql驱动与数据库不匹…...
在线图片像素颜色拾取工具
在线图片像素颜色拾取工具,非常方便的一个工具,无需登录,用完就走。 包括中文和英文版本。 https://getcolor.openai2025.com...
Qt之登录界面(splash)
在上一篇多文档窗口设计(MDI)的基础上增加了一个登录界面(splash). 该模块可以扩展为常规的软件登录界面。 界面展示如下 如果用户名和密码输入正确,则调到MDI界面,如果用户名和密码一共输入三次以上,则程序强制退出…...
NotebookLM:Google 最新 AI 笔记助理解析与实战应用
NotebookLM:Google 最新 AI 笔记助理解析与实战应用 在 AI 驱动的生产力工具不断进化的今天,Google 推出的 NotebookLM(Notebook Language Model)成为了一款备受关注的智能笔记助理。它结合了 Google 的大语言模型(LL…...
软路由系统iStoreOS 一键安装 docker compose
一键安装命令 大家好!今天我来分享一个快速安装 docker-compose 的方法。以下是我常用的命令,当前版本是 V2.32.4。如果你需要最新版本,可以查看获取docker compose最新版本号 部分,获取最新版本号后替换命令中的版本号即可。 w…...
vue3本地文件下载
开发记录: vue3本地下载文件要把文件放到public下,如果放在src里面可能会出现这个问题...
纯代码实现给WordPress添加文章复制功能
在给wordpress添加内容时,有时会遇到文章复制的功能,但是wordpress又没有这个功能。把下面一段代码添加到functions.php文件中,就可以实现这个功能。 /** Function for post duplication. Dups appear as drafts. User is redirected to the…...
Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
目录 前言1. 基本知识2. Java代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线!! 对于Java的基本知识推荐阅读: java框架…...
【PyQt】图像处理系统
[toc]pyqt实现图像处理系统 图像处理系统 1.创建阴影去除ui文件 2.阴影去除代码 1.创建阴影去除ui文件 UI文件效果图: 1.1QT Desiger设置组件 1.两个Pushbutton按钮 2.两个label来显示图像 3.Text Browser来显示输出信息 1.2布局的设置 1.先不使用任何La…...
Ruby语言的循环实现
Ruby语言的循环实现深入探讨 在程序设计中,循环是一种常见的控制结构,用于重复执行某些代码块。不同的编程语言提供了不同类型的循环结构,以满足不同的需求。Ruby是一种灵活且易于使用的编程语言,其循环实现方式独具一格…...
javaEE安全开发 SQL预编译 Filter过滤器 Listener 监听器 访问控制
前言 java开发和其他开发的不同并且更安全就是因为他拥有简单的预编译机制 filter 过滤器 和 listener 监听器 这个很重要 就是 web应用监听器和过滤器是在 Servlet 之前的并且 我们的请求和响应都需要经过 两者的同意才可以通过 缺一不可 、 Listener 安全方面 监听器…...
一体机cell服务器更换内存步骤
一体机cell服务器更换内存步骤: #1、确认grdidisk状态 cellcli -e list griddisk attribute name,asmmodestatus,asmdeactivationoutcome #2、offline griddisk cellcli -e alter griddisk all inactive #3、确认全部offline后进行关机操作 shutdown -h now #4、开…...
Hadoop•用Web UI查看Hadoop状态词频统计
听说这里是目录哦 通过Web UI查看Hadoop运行状态🐇一、关闭防火墙二、在物理计算机添加集群的IP映射三、启动集群四、进入HDFS的Web UI 词频统计🦩1、准备文本数据2、在HDFS创建目录3、上传文件4、查看文件是否上传成功5、运行MapReduce程序6、查看MapRe…...
rhel7.9利用有网络环境打包ansible
RHEL7.9激活(可省略) # 注册 subscription-manager register --usernameyour_username --passwordyour_password --auto-attach # 查看订阅状态 subscription-manager list # 将 “enabled1” 改为 “enabled0” vi /etc/yum/pluginconf.d/subscription-manager.conf 配置阿…...
vim文本编辑器三种模式的转换关系
输入模式 ———— 末行模式 输入模式和末行模式不能相互转换。 输入模式 ———— 命令模式 输入模式可以通过点击esc进入命令模式。 命令模式可以通过点击i进入输入模式。 末行模式 ———— 命令模式 末行模式可以通过点击esc进入命令模式。 命令模式可以通过shift&…...
深度学习:大模型Decoding+MindSpore NLP分布式推理详解
大模型推理流程 1. 用户输入提示词(Prompt) 假设用户输入为:“从前,有一只小猫,它喜欢……” 我们的目标是让模型生成一段完整的故事。 2. 模型处理用户输入 2.1 分词:输入提示被分词为模型可以理解的…...
【JVM中的三色标记法是什么?】
JVM中的三色标记法是什么? 一、基本概念二、标记过程三、优势与问题四、漏标与多标的解决方案三色标记法(Tri-color Marking Algorithm)是Java虚拟机(JVM)中一种用于追踪对象存活状态的垃圾回收算法。 它基于William D. Hana和Mark S. McCulleghan在1976年提出的两色标记法…...
数据库服务体系结构
1. 数据库服务应用配置 服务进行配置有什么作用? 实现服务运行启动 实现某些功能 应用配置有三种方式? 利用编译安装进行配置 编写配置文件信息 ,.默认的配置文件: /etc/my.cnf 利用启动命令参数配置信息,mysqld_safe --skip-grant-tables --…...
vscode项目依赖问题
必读 一定要将前端下拉的项目备份一下,很容易运行导致依赖报错,重新下载 命令 使用幽灵分解器安装 pnpm install 替代 npm install 设置淘宝NPM镜像源 yarn config set registry https://registry.npmmirror.com 查看目前依赖包的版本 npm list ant-d…...
R数据分析:有调节的中介与有中介的调节的整体介绍
单独的有调节的中介或者有中介的调节好多同学还大概能看明白,但是两个东西一起说我发现大部分同学就懵逼了。今天我就尝试将两种方法一起讲讲,重点帮助大家厘清两种方法的异同。 先从整体上看下两者的概念: 有中介的调节首先落脚在调节,调节作用必须是显著的,并且这个调…...
RabbitMQ-消息可靠性以及延迟消息
目录 消息丢失 一、发送者的可靠性 1.1 生产者重试机制 1.2 生产者确认机制 1.3 实现生产者确认 (1)开启生产者确认 (2)定义ReturnCallback (3)定义ConfirmCallback 二、MQ的持久化 2.1 数据持久…...
大连网站建设短期培训班/国际军事新闻最新消息
问题描述: 有一张表File_Info,有若干字段,其中有2个字段FileName(文件名称)和FileVer(文件版本号)。 现在的表数据是这样的,FileName字段的名称可能有一样的(重复的&…...
开发移动网站/sem公司
计算机应用基础评课稿范本篇一:计算机应用基础评课稿今天听了杨老师的一节高三复习课,感受颇深。下面就这堂课谈谈我个人的体会,不妥之处请各位领导、老师批评指正。一、教学设计思路清晰,教学内容整合合理、教学目标明确一节好课…...
丹徒网站建设咨询/影响关键词优化的因素
硬件平台:飞思卡尔IMX6 内核版本:kernel3.0.35 问题来源: 开发板的默认显示方式是FPC接口800*480的屏,本项目中用到的屏是工业级的1024*768接口的LVDS屏,更换屏之后,除了移植相应的屏驱动和触摸驱动之外&…...
行业网站建设多少钱/b站推广费用一般多少
本文对《mysql必知必会》前14章进行总结;总的来说,这一部分主要讲述了mysql的基本操作和重要概念1、选择数据库和表选择数据库:USE (数据库名) 显示可用数据库:show databases 显示可用表:show…...
网站如何做301转向/杭州seo公司排名
电脑网络自动连接如何设置?宽带连接在基本电子和电子通讯是描述续号或者是电子线路包含或者是能够同时处理较宽的频率范围,它是一种相对的描述方式,频率的范围愈大,也就是频宽愈高时,传送资料相对增加。下面就由学习啦小编来给大…...
企业如何在网站做认证/今天热点新闻事件
使用pycharm时常出现 the IDE is running low on memory 的问题,表示pycharm这款IDE使用内存不足,需要在系统内存充足的情况下扩充IDE memory。(推荐:pycharm教程)首先,打开File —> Appearance —>Windows Options —>…...