slam学习 - 基本VO代码学习

news/2024/5/20 3:09:24/文章来源:https://blog.csdn.net/qq_43110298/article/details/128157773

本打算学习 orb -slam3 源码,但还是先把《slam 14》上的代码看完再说,至少把整个流程走一遍。

相关参考

https://blog.csdn.net/weixin_44684139/article/details/105305564
https://blog.csdn.net/qq_35590091/article/details/97111744

代码需求分析

按照书上的内容,把代码分为一下几个类别

  1. Camera类别【功能,工具人】
  2. frame类别【主要基本对象,机器人的相关东西】
  3. MapPoint类【主要被观测对象,现实世界的点】
  4. Map类【领导,上面的两个太多了,人员优化一下】
  5. VisualOdometry 类【公司或者说某个具体项目需求,可以理解为 main 函数】

在这里插入图片描述

代码流程

1. 两步前端

首先要知道他的目的是:一共有5步,求这5步拍摄的位置和方向(也就是求每一步的变换矩阵)。
方法:只依据当前和前一帧的信息计算变换矩阵。
步骤:(不包括异常处理等步骤)

步骤函数
提取关键点extractKeyPoints
特征匹配featureMatching
计算位姿poseEstimationPnP
得出第二针图像中某些点的3D位置,为下次pnp准备setRef3DPoints
将第二针插入map的数组中addkeyframe

2. 局部地图前端

大概的变换只在上述第四步: 以前是和前辈比较,现在是和人才库(局部地图)比较。
变化的目的是:维护一个局部地图。(这个版本好像没有全局地图的概念)
那显而易见,如果想要维护局部地图那就必须要有:

  1. 增加地图点
  2. 删除地图点
  3. 【?不知道slam14讲中0.4版本的代码里面有没优化地图点的】

删除比较容易,如何添加地图点呢?这个回答不错:

optimizeMap()这个函数实现了添加新点(嵌套着addMapPoints())。向地图中增加关键点的机制是:当前帧的关键点一旦和地图点匹配上了,那么就无视他。没有匹配上的关键点需要映射到世界坐标系中,增加局部地图点的规模。具体看函数:void Map_VisualOdometry::addMapPoints()

问题1 但这里什么叫匹配上了?什么叫没有匹配上呢?其实就是特征匹配,以前是两张图匹配,现在是 图-地图 模式。匹配好的点放在 match_3dpts_,match_2dkp_index_。具体加入三维地图点的机制:

  1. 先 图 - 地图 的特征点进行匹配(100个配对点 - > 阈值法筛选80个)
  2. 如果没有匹配上(可能是orb特征差距过大),但毕竟也是有深度的点,直接加入地图中。(适用于快速移动的时候)
  3. 这也是 optimizemap的作用:删除看不见的、边缘的,增加新的点

问题2 这个 addkeyframe 关键帧是指什么?即只要旋转或者平移超过一定距离就可以被认为是关键。

问题3 既然局部地图都有了,关键帧用来做什么的?这个时候又没有回环检测!这个我也没看到有什么大用处…

总结

在这里插入图片描述
学习这个主要是为了orbslam的学习铺垫,不然看天书了。

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

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

相关文章

耗时大半个月收整全套「Java架构进阶pdf」

花了我大半个月时间收整了全套的「Java架构进阶pdf」,这一波下来,刷完你就会知道,真真香啊,我的心血果然,没白费! 请注意:关于全套的「Java架构进阶pdf」,我会从面试-筑基-框架-分布…

npm vue 路由之一级路由(npm默认已经集成了vue)

npm vue 路由之一级路由&#xff08;npm默认已经集成了vue&#xff09; 文档https://v3.router.vuejs.org/zh/installation.html npm install vue-router3.5.2 --save 1.在App.vue上面添加 <router-view></router-view>2.在main.js上面添加 import VueRouter fro…

Lattice库联合ModelSim仿真FIFO

Lattice联合ModelSim仿真FIFO前言一、添加IP二、库文件添加&#xff08;一&#xff09;方式一&#xff1a;添加器件库到ModelSim&#xff08;二&#xff09;方法二&#xff1a;直接添加器件库到Libray,和tb.v在同一个目录下仿真三、仿真&#xff08;一&#xff09;仿真文件&…

[附源码]Python计算机毕业设计Django基于java的社区管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

计网个人作业03

R14. True or false? a a. Suppose Host A is sending a large file to Host B over a TCP connection. If the sequence number for a segment of this connection is m, then the sequence number for the subsequent segment will necessarily be m 1. 假设主机A通过一…

世界连续动作预测模型-方向模型

🍿*★,*:.☆欢迎您/$:*.★* 🍿 正文 <

[附源码]JAVA毕业设计家庭理财管理系统(系统+LW)

[附源码]JAVA毕业设计家庭理财管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

[附源码]计算机毕业设计医院挂号住院管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计学生在线考试系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计医疗器械公司公告管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]JAVA毕业设计健身房管理系统(系统+LW)

[附源码]JAVA毕业设计健身房管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&a…

python使用opencv画圣诞树和画小星星函数

画星星函数&#xff1a; #img 图片 #x y 坐标 #size 大小 def darw_star(img,x,y,color,size40):poly_linenp.array([[x, y-size], [xint(size/4), y-int(size/4)], [xsize, y-int(size/4)],[xint(0.375*size),yint(size/4)],[xsize,ysize],\[x,yint(0.625*size)],[x-size,ysi…

uni-app入门:自定义tabbar

本文介绍如何使用vant Weapp定义自定义tabbar.按照自定义图标的方式进行添加: 自定义tabbar微信官方链接: https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 1.导入vant weapp并构建npm 项目根目录右键选择外部终端窗口中打开 …

VS系列多通道无线采发仪

VS101/104/208/416/432 是以振弦、温度传感信号为主的多通道无线采发仪&#xff0c;并可扩展其它模拟&#xff08;电流、 电压、电阻&#xff09;信号和数字信号&#xff08;RS485、RS232&#xff09;传感器通道&#xff0c;内置电池&#xff0c;可外接太阳能电池板。最多可实…

【学习记录】Dynaslam源代码魔改-替换MaskRCNN为YoloV5

这两天接了个小任务&#xff0c;需求是替换Dynaslam里面的动态物体识别模块&#xff0c;将MaskRCNN换为YoloV5&#xff0c;这里记录一下过程中遇见的问题。 一、运行Dynaslam Dynaslam本身是一个基于ORBSLAM2的视觉SLAM框架&#xff0c;论文并没有仔细看过&#xff0c;简单来…

期末测试——H5方式练习题

期末考试——H5完成方式——练习题 前言 本练习训练了孩子们的栅格化布局&#xff0c;H5标签&#xff0c;CSS样式&#xff0c;并对列表与菜单进行了强化训练。使孩子们更好的掌握H5布局&#xff0c;为后面的框架教学打好基础。 素材下载地址&#xff1a; 链接&#xff1a;htt…

UltraISO 制作U盘启动盘

1、 从Ubuntu官网http://cn.ubuntu.com/download/下载系统的iso文件 用来制作的U盘需要是FAT32格式的&#xff0c;可以通过格式化U盘更改&#xff08;注意&#xff0c;如果U盘已经写入过隐藏分区了&#xff0c;需要在磁盘管理里面删除相关隐藏分区然后合并为一个大分区后…

open label file.(This can be normal only if you use MScoco)

E:\yolov4-rubish\darknet\our_data\ImagesAug 把标签的txt文件和Jpg文件放在同一个文件夹

12月2日:thinkphp中数据库完结

数据库的查询 聚合查询 聚合查询的几种方法其中将count作为重点来说&#xff0c;由图所示&#xff0c;即为使用count()方法中需要注意的点 count(*)的使用count()中字段名为具体值的使用方法时间查询 官方文档中列举的是使用wheretime()进行查询的方法&#xff0c;但是在日常的…

C++11标准模板(STL)- 算法(std::set_difference)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 计算两个集合的差集 std:…