vins-回环检测单独剥离运行

2023-05-16

由于前端如果单纯依靠视觉+imu作为里程计,效果经常不稳定。因此最近做项目的过程中,将前端转化为以里程计(码盘编码器)来进行,相对比较鲁棒。由于这个局部传感器有累计误差,因此长期运行不可靠,因此将vins-mono中回环部分脱离出来。进行独立运行。
这里假定机器人运行的环境是在一个固定,变化相对较小的环境,因此图像数据库不进行更新。即
list<keyframe*> keyframelist
这个只保留载入存储的特征图片。

在vio线程中,通过图像特征跟踪,并三角化特征点,能够得到空间中三维点云的信息。这些点,存在了关键帧的这三个类成员中:
在这里插入图片描述

缺点:这些特征点没有描述子,并且数量比较少,大概在100个以下。因此在构建关键帧的时候,需要两个步骤:
(1)给这些关键点添加描述子信息(brief),这些特征点在这里暂时叫做窗口特征点。
(2)给该帧提取更多的特征点,用fast角点,提取非常多的特征点(500个以上),同样并给这些特征点添加描述子信息。这些特征点在这里暂时叫做姿态特征点。这些姿态特征点没有三维信息,只有像素坐标和归一化坐标两种坐标。

回环匹配分成两个步骤
(1)用bow词袋模型先找出历史的图像数据库中,历史的哪一帧与现在这一帧长得最像。
(2)找出最像的这帧图像,因此历史中这帧关键帧存有非常多的姿态特征点,因此开始进行特征点匹配。

匹配的过程是:
历史的回环候选帧的姿态特征点当前帧窗口特征点 两者之间的匹配。
因为姿态特征点数量远远大于窗口特征点数量,就找和当前帧窗口特征点汉明距离最近的一些姿态特征点。
为什么一个选择姿态特征点,一个选择窗口特征点?
因为至少需要一个特征点是知道3D坐标的。才可能知道当前帧相对于历史帧的位姿。

因此知道了3D坐标,知道了2D坐标的投影,就能够知道回环候选帧在当前帧为真值的情况下,回环候选帧的姿态,与实际的回环候选帧的姿态做一个姿态变换,其实就是当前帧应该做的一个姿态变换。比较饶,不过VINS-MONO确实是这样做的。

VINS-MONO支持地图的保存,保存的信息包括:
1.关键帧图片(optional)
2.关键帧姿态
3.关键帧的姿态特征点2D坐标
4.关键帧的姿态特征点2D归一化坐标
5.关键帧的姿态特征点描述子

现在一个问题是,将vins-mono中回环部分脱离出来。进行独立运行。如果还是按照上面这个思路来做的话,由于需要知道特征点的3D坐标,因此同样也是需要前端的VINS_ESTIMATOR来进行三角化的。因此脱离得不够完全。因此我们需要换一种思路。

因此我们地图保存的信息变成:
1.关键帧图片(optional)
2.关键帧姿态
3.关键帧的窗口特征点2D坐标
4.关键帧的窗口特征点3D坐标
5.关键帧的窗口特征点描述子

保存的这些信息后,现在我们还是按照这个思路
(1)用bow词袋模型先找出历史的图像数据库中,历史的哪一帧与现在这一帧长得最像。
(2)找出最像的这帧图像,因此历史中这帧关键帧存有非常多的姿态特征点,因此开始进行特征点匹配。

但是特征匹配的时候,现在我们匹配的过程是:
历史的回环候选帧的窗口特征点当前帧姿态特征点 两者之间的匹配。
因此知道了3D坐标,知道了2D坐标的投影,就能够知道回环候选帧姿态为真值的情况下,当前帧的姿态。

由于窗口特征点有3D坐标,当前帧只需要特征点的2D坐标,因此整个过程只需要运行一个pose_graph 包即可。

因此,整个流程应该是这样的:
1.在一个熟悉的环境,运行vins-mono完整版,采集关键帧的姿态,完成后,保存关键帧姿态。(保存的信息需要进行修改,从姿态特征点修改为窗口特征点)
2.直接运行修改后的pose_graph包,这个包订阅的消息就只有图像,不需要运行feature_tracking,以及 vins_estimator。

当然了vins-mono为了追求发论文的高精度,因此把很多阈值调的比较苛刻,才认为是回环。因此,在实际运用中,为了追求回环的高输出,我们可以把一些阈值降低,这些阈值包括:
1.词袋模型找最接近的图片,论文中认为最像的图像应该比第二像的图片可信度高一定的阈值。
2.特征点匹配过程中汉明距离的阈值。
3.PNP求解的过程,内点和外点的比例阈值。
4.PNP求解出来特征点内点的数量阈值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vins-回环检测单独剥离运行 的相关文章

  • 改变无线连接、有线连接的优先级

    有线和无线连的是同一个网络 xff0c 当笔记本打开时 xff0c 总是优先使用无线连接 xff0c 如何转变优先级为有线连接呢 xff1f 1 打开网络和共享中心 2 更改适配器设置 xff0c 打开网络连接窗口 3 单击此窗口的高级菜单
  • 杂感一

    从2014年7月工作至今已有快2年了 xff0c csdn的博客从毕业后就很少上了 工作中有很多收获 技术上 也在不断积累和成长中 不管做什么事情 xff0c 要坚持下去 xff0c 方得初心 xff0c 把坚持养成习惯 xff0c 学习如
  • MFC隐藏主窗口的方法

    隐藏基于对话框的MFC应用程序窗口的方法 推荐这个方法 xff0c 非常好用 很多人可能会将窗口创建出来 然后用一个 ShowWindow SW HIDE 的方法去隐藏窗口 当然这是可以做到隐藏的功能 但是有一点不足的地方就是窗口在隐藏之前
  • JSP 通过Servlet将excel数据导入SQL

    1 gt 在网上下载jxl jar 这个JAR包用于Java操作excel 下载后 xff0c 将这个包复制到工程Webroot下的WEB INF下的lib中 xff0c 或是在工程中导入jxl jar包 2 gt 准备excel文件 如图
  • 1=5,2=15,3=215,4=2145,那么5=?

    如题 xff0c 1 61 5 xff0c 2 61 15 xff0c 3 61 215 xff0c 4 61 2145 xff0c 那么5 61 xff1f 答案 xff1a 5 61 1 哎 xff0c 这个题出的 xff0c 没反应过
  • 数值分析上机题Matlab--东南大学出版社(牛顿迭代/逐次超松弛迭代/3次样条插值/复合梯形SimpsonRomberg/四阶经典Runge-Kutta/幂法求特征向量)

    第二章上机题 Newton迭代法 function x err 61 Newton f x0 epsilon 用例 xff1a x err 61 Newton 39 x 3 3 x 39 0 7 0 005 Input f 字符串公式 39
  • 村子里有50个人,每人有一条狗,在这50条狗中有病狗(这种病不传染),于是人们要找出病狗。

    xff29 xff22 xff2d 公司向来以高素质人才作为企业持续竞争力的保证 进入 xff29 xff22 xff2d 公司是差不多每个 xff29 xff34 人的梦想 下面这条 xff29 xff22 xff2d 公司的面试题 xf
  • 删除单向链表中的某一个节点

    已知一个单向链表的表头head xff0c 写出一个删除某一个节点的算法 xff0c 要求先找到此节点 xff0c 然后删除 include lt iostream gt using namespace std typedef struct
  • 多段图的最短路径问题-----动态规划法

    对多段图 xff0c 求最短路径 xff0c 如图 xff1a 对其使用动态规划法 xff1a 阶段 xff1a 将图中的顶点划分5个阶段 xff0c k 状态 xff1a 每个阶段有几种供选择的点s 决策 xff1a 当前状态应在前一个状
  • Ceres-Solver学习笔记(6)

    溯洄从之 xff0c 道阻且长 建模最小化二乘问题 Ceres有两个组成部分 xff0c 一个是建模API xff0c 它提供了一组丰富的工具 xff0c 可以在一段时间内构造一个优化问题 xff0c 另一个是求解程序API xff0c 控
  • hualinux2.1 环境搭建:源码、二进制、yum/apt安装区别

    一 linux软件常用的安装方式 linux软件常见的安装方式一般分以下几种 xff1a 1 源码安装 xff1a 直接通过源代码安装 一般用make或cmake安装 2 二进制安装 xff1a 别人已经帮编译好了 xff0c 拿过来就可以
  • 百度试题---开发测试工程师

    一 问答题 说出常用的几种希哈函数 xff0c 其作用是什么 xff1f 描述OSI 的七层网络结构 xff0c HTTP 工作在哪一层 xff1f 描述一段C 语言代码程序能运行起来的代码要求和执行过程 二 算法设计 有一车苹果 xff0
  • ((硬件spi+dma)+模拟spi)驱动LCD5110

    span class hljs preprocessor ifndef spi dma h span span class hljs preprocessor define spi dma h span span class hljs pr
  • 《Python深度学习》第五章-2(Cats_vs_Dogs)读书笔记

    5 2 在小型数据集上从头开始训练一个卷积神经网络 当数据不够时 xff0c 有以下方法进行处理 xff0c 本节主要是介绍数据增强 5 2 1 深度学习与小数据问题的相关性 深度学习的一个基本特性就是能够独立地在训练数据中找到有趣的特征
  • 无人机原理图、pcb图下载地址

    原理图 pcb图下载地址 无人机pcb电路图原理图 智能家居文档类资源 CSDN文库
  • Win 10 系统下搭建 Python 编程环境,有手就行

    前言 想把一门编程语言学好 xff0c 会搭建编程环境无疑是有必要的 xff0c 纵然有线上集成的编程环境 xff0c 但那高度依赖于网络条件以及诸多情况 xff0c 这使得我们在编程的时候难以存储自己的资料 学习和使用 python 一年
  • Latex小白学习方法和实践

    1 了解简单语法 xff0c 读懂latex解决的问题 xff0c 和其核心方法论 知道latex其实不是万金油 xff0c 只是在熟悉的情况下 xff0c 让你更完美的排版 xff0c 省去可视化下不精确的问题 xff0c 其不会很快的完
  • PADS版本历史

    从加载文件的速度 xff0c 生成的文件大小 xff0c 画图的速度 xff0c 渲染的速度等多方面来说 xff0c 个人认为 PDAS 算是非常不错的一款软件 xff0c 值得学习和使用 大概把其光辉历史罗列一下 xff0c 作为一个回忆
  • 简述Z-Stack的基本工作原理与流程(OSAL操作系统)

    首先上图 xff0c 跟着图中的函数顺序来感受Z Stack的工作流程 xff1a Z Stack协议栈总的来说做了两件事 xff0c 系统的初始化和启动OSAL操作系统 系统初始化 xff1a 从main函数看 xff0c 首先是调用了o
  • 使用MaixPy IDE开发K210

    使用MaixPy IDE快速开发K210 距离我第一次使用MaixPy将近40天了 xff0c 大概花了26天 xff0c 完成了我的毕业设计并且进行了优化 后面我会花时间去和大家分享我的毕设 xff0c 也希望能得到各位码友的意见和建议

随机推荐

  • K210实现人脸识别(附代码解读)

    基于K210的人脸识别门禁 xff08 一 xff09 进入官网 xff08 首次登陆需要注册 xff09 获取人脸识别源码 https wiki sipeed com soft maixpy zh course ai image face
  • K210人脸识别+人脸信息存储

    在我的上一篇博客中已经介绍了如何使用K210实现基本的人脸识别功能 https blog csdn net HuangChen666 article details 113995079 spm 61 1001 2014 3001 5501
  • 旅行商问题--蚁群优化算法求解(matlab实现)

    今天给大家分享一下matlab实现蚁群优化算法 xff0c 解决旅行商问题 在上一篇博客中对蚁群优化算法做了较为详细的介绍 xff0c 有需要的小伙伴可以看一下 https blog csdn net HuangChen666 articl
  • 粒子群优化算法及MATLAB实现

    上一篇博客是关于蚁群优化算法的 xff0c 有兴趣的可以看下 https blog csdn net HuangChen666 article details 115913181 1 粒子群优化算法概述 2 粒子群优化算法求解 2 1 连续
  • A星(A*、A Star)路径规划算法详解(附MATLAB代码)

    首先看看运行效果 xff0c 分别有三种模式 xff0c 代码运行前需要通过鼠标点击设置起点和终点 第一种模式直接输出最短路径 第二种模式输出最短路径的生成过程 第三种模式输出最短路径的生成过程和详细探索的过程 代码获取 gitee链接 x
  • Ubuntu20.04+MAVROS+PX4+Gazebo保姆级安装教程

    Ubuntu20 04 43 MAVROS 43 PX4 43 Gazebo 安装PX4步骤安装MAVROS安装QGCPX4仿真 安装PX4步骤 从github上clone源码 span class token function git s
  • PX4+Offboard模式+代码控制无人机起飞(Gazebo)

    参考PX4自动驾驶用户指南 https docs px4 io main zh ros mavros offboard cpp html 我的另一篇博客写了 键盘控制PX4无人机飞行 PX4无人机 键盘控制飞行代码 可以先借鉴本篇博客 xf
  • 基于ESP32的小型四轴无人机

    粗糙版试飞成功 xff01 陀螺仪部分直接飞线飞了一个模块 xff0c 懒得焊了 不是很水平 xff0c 稳定性不是很好 因为滤波算法中加入的元素太少了 xff0c 目前也就MPU6050的输出数据加入了计算 xff0c 所以很多自稳定性飞
  • PX4无人机 - 键盘控制飞行代码

    PX4无人机 键盘控制飞行代码 仿真效果 实机效果 由于图片限制5M以内 xff0c 只能上传一小段了 xff0c 整段视频请点击链接 Pixhawk 6c 无人机 键盘控制无人机 Offboard模式 核心 xff1a 发布 mavros
  • 【FreeRTOS学习 - 消息队列学习】

    跟着韦东山老师FreeRTOS教学资料的学习记录 FreeRTOS全部项目代码链接 xff08 更新中 xff09 https gitee com chenshao777 free rtos study 本文章一共分为一下几个部分 1 创建
  • 【Linux多线程编程-自学记录】08.Linux多线程互斥量

    Linux多线程编程学习代码 xff08 代码已上传gitee xff0c 还请各位兄弟点个Star哦 xff01 xff09 https gitee com chenshao777 linux thread git 笔记 xff1a 1
  • 【Linux多线程编程-自学记录】09.Linux多线程之读写锁

    Linux多线程编程学习代码 xff08 代码已上传gitee xff0c 还请各位兄弟点个Star哦 xff01 xff09 https gitee com chenshao777 linux thread git 笔记 xff1a 1
  • 【Linux多线程编程-自学记录】10.条件变量

    Linux多线程编程学习代码 xff08 代码已上传gitee xff0c 还请各位兄弟点个Star哦 xff01 xff09 https gitee com chenshao777 linux thread git 笔记 xff1a 1
  • 树莓派4B安装Ros 2 Foxy踩坑记录

    1 通过树莓派官方提供的写卡工具raspberry pi imager选择Ubuntu 20 04 5 xff08 64 bit xff09 xff0c 因为我打算用一个8G的存储卡安装ros 2 xff0c Ubuntu 22 04的比较
  • 港科大vins-fusion初探

    SLAM新手 xff0c 欢迎讨论 关于vins fusion的博客 xff1a 1 初探 xff1a https blog csdn net huanghaihui 123 article details 86518880 2 vio主体
  • vins-fusion代码解读[一] vio主体

    SLAM新手 xff0c 欢迎讨论 港科大vins fusion代码解读 一 vins fusion与vins mono代码结构有很大相似性 这次先看看vins estimator节点内的内容 1 程序入口 xff1a 1 vins est
  • vins-fusion代码解读[二] 惯性视觉里程结果与GPS松耦合

    感谢 slam萌新 xff0c 本篇博客部分参考 xff1a https blog csdn net weixin 41843971 article details 86748719 欢迎讨论 惯性视觉里程结果与GPS松耦合 xff1a g
  • vins-fusion代码解读[四] 图像回环检测loop_fusion主体

    SLAM新手 xff0c 欢迎讨论 这篇主要讲loop fusion包的程序结构 xff0c loop fusion主要作用 xff1a 利用词袋模型进行图像的回环检测 在vinsmono中 xff0c 该程序包处于pose graph包内
  • 基于乐鑫开源ESP32四轴无人机项目分享

    上次说重新焊接一块的 xff0c 周末搞定了 xff0c 基本组装的也完成了 xff0c 上个图 试飞还是可以的 xff0c 因为没有光流和定高模块 xff0c 所以稳定性不是很好 xff0c 不过乐鑫预留了扩展模块的接口 xff0c 大家
  • vins-回环检测单独剥离运行

    由于前端如果单纯依靠视觉 43 imu作为里程计 效果经常不稳定 因此最近做项目的过程中 xff0c 将前端转化为以里程计 xff08 码盘编码器 xff09 来进行 xff0c 相对比较鲁棒 由于这个局部传感器有累计误差 xff0c 因此