【VINS论文笔记】A General Optimization-based Framework for Global Pose Estimation with Multiple Sensors

2023-05-16

前言

2019年1月11日,港科大VINS-Mono的团队发布了VINS的扩展版本——VINS-Fusion。其支持多种视觉惯性传感器类型(单相机+ IMU,立体相机+ IMU,立体相机),还支持将VINS与GPS进行融合。本人就VINS-Fusion中多传感器全局位姿图优化的相关论文进行了阅读,并进行内容整理(尽可能简洁)。

原文:A General Optimization-based Framework for Global Pose Estimation with Multiple Sensors
《一种基于通用优化方法的多传感器全局位姿估计框架》

摘要翻译

准确的状态估计是自主机器人的基本问题。为了实现局部精确和全局无漂移的状态估计,多个具有互补特性的传感器通常融合在一起。局部传感器(摄像机,IMU,激光雷达等)在一个小区域内提供精确位姿,而全局传感器(GPS,磁力计,气压计等)在大规模环境中提供带噪声但全局无漂移的定位。在本文中,我们提出了一种传感器融合框架,将局部状态与全局传感器融合,从而实现局部精确和全局无漂移的位姿估计。由现有VO/VIO方法产生的局部估计在位姿图优化中与全局传感器融合。在图优化中,局部估计被对齐到全局坐标,同时消除了累积漂移。我们评估该系统在公共数据集和实验中的表现,将结果与其他最先进算法进行比较。我们强调该系统是一个通用框架,可以在统一的位姿图优化中轻松融合各种全局传感器。我们开源了代码实现。

在这里插入图片描述

主要内容

完全可以将前三章的内容放在一起说(因为讲的内容要点差不多):

文章将传感器划分为局部传感器和全局传感器两类。
1、局部传感器,如相机、激光、IMU等,其应用的算法(如VIO)存在以下局限性:
1)通常将第一个位姿设置为坐标系原点,从相对于原点的局部坐标系开始位姿估计,而不是在全局坐标系下;
2)局部估计时,累计误差随着到时间和距离的增长而增长。

2、全局坐标系,如GPS,磁力计,气压计,总是在一个固定的全局坐标系下工作,如地球坐标系,原点是固定且预知的。但是它也存在问题:噪声大,频率低,没有姿态信息(磁力计有)。因此无法直接用来估计六自由度位姿。

由此引出了通过多传感器融合以提高鲁棒性。在第二章讨论了一些全局传感器与局部传感器融合的算法,如采用EKF融合IMU和GPS,采用UKF融合视觉、激光和GPS等,采用优化的方法融合VIO和GPS等。

其中基于滤波器的方法存在以下问题:
1)需要对不同坐标系之间的转换进行准确的初始预测,以保证收敛;
2)对传感器的时间同步非常敏感。

因此文章提出了一个更为通用的基于优化的全局坐标系位姿估计框架,它可以支持多个全局传感器。其中局部传感器用于局部估计,采用现有的VO/VIO方法来产生局部位姿。并将全局传感器转换为位姿图中的统一因子,和局部估计一起输入到全局位姿图中构造优化问题,最后生成局部精确且全局感知的6自由度位姿。

其中局部位姿估计和VINS论文中提到的一样,就不赘述了。

全局位姿图结构

在这里插入图片描述
位姿图中的节点为世界坐标系下的每个位姿,其密度由频率最低的传感器决定;两个连续节点之间的边是由局部估计器(VIO)得到的局部约束;其他边是由全局传感器产生的全局约束。

位姿图优化是一个最大似然估计问题,假设测量独立且误差服从高斯分布,将其转变为非线性最小二乘问题(BA)。
在这里插入图片描述
这里的优化目标即 X = { x 0 , x 1 , . . . , x n } X=\{x_0,x_1,...,x_n\} X={x0,x1,...,xn},其中 x i = { p i w , q i w } x_i=\{p^w_i,q^w_i\} xi={piw,qiw}

传感器因子

1)局部因子 local factor
采用由VIO得到的连续两帧之间的相对位置和姿态进行构建。比如对于第t-1帧位姿 ( q t − 1 l , p t − 1 l ) (q^l_{t-1},p^l_{t-1}) (qt1l,pt1l)和第t帧位姿 ( q t l , p t l ) (q^l_{t},p^l_{t}) (qtl,ptl),局部因子表示为:
在这里插入图片描述
如果VIO算法产生位姿的协方差矩阵,则将其用作局部测量的协方差,否则所有局部测量使用统一的协方差。

2)GPS因子
将经度、纬度和海拔转换到NED坐标系下的x,y,z,将第一个GPS测量值设置为原点,在ENU世界坐标系中得到GPS测量值 p t G P S p^{GPS}_t ptGPS。GPS因子表示为:
在这里插入图片描述
GPS测量值直接约束每个节点的位置。协方差由接收测量时的卫星数决定,收到的卫星越多协方差就越小。

3)磁力计因子
磁力计测量磁场方向和强度,可以帮助确定在世界坐标系下的方向:假设该区域的磁场强度不变 Z w Z^w Zw,将测量得到的磁场强度 Z t m Z^m_t Ztm的方向与其对齐可以得到机器人的方向。将磁力计因子表示为
在这里插入图片描述
由于磁场容易受到环境影响,这里使用没有长度的归一化矢量。并将长度用于确定协方差。如果长度相差很多则设置很大的协方差,否则使用小协方差。

4)气压计因子
测量的气压可以线性转换为高度。将第一个测量设置为原点高度,然后得到高度的测量值 z t m z^m_t ztm。气压计因子被表征为高度估计的残差:
在这里插入图片描述

由于气压计的测量有噪声,我们会在短时间内计算多个测量值的方差,并在代价函数中使用。

位姿图优化

在低频(1Hz)下进行位姿图优化。在每次优化之后,得到局部坐标系到全局坐标系的变换矩阵。通过变换矩阵转换后续的高速率局部位姿(VIO,200Hz),以实现实时高速全局位姿估计。由于位姿图非常稀疏,因此计算复杂度随着位姿数量线性增加。在位姿图中采用滑动窗口法以获得准确且全局无漂移的位姿估计。

个人想法

觉得这篇文章最大的贡献是将VINS扩展成了一个可以进行多传感器融合的框架,可以通过直接构建对应残差项以方便地添加各种全局传感器。因为融合的时候是将VIO得到的局部位姿和其他全局传感器测得的部分位姿量进行融合,算是一种松耦合的方法。不过全局传感器本身的独立性很强,不像相机、IMU和激光的测量信息具有关联性,而且可以直接算得全局位姿,既没必要也难以进行紧耦合。另外就是其实磁力计和高度计的频率还是很快的,能否将其应用到局部姿态估计优化中,或者像9轴IMU那样融合在IMU角度测量上?

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

【VINS论文笔记】A General Optimization-based Framework for Global Pose Estimation with Multiple Sensors 的相关文章

  • 使用嵌套字典Python的自定义类

    当使用相同的键在嵌套字典中添加值时遇到问题 并且该值始终显示相同的值 事实是 我想更新值事件 键是相同的 该算法是人工鱼群算法的基础 example gt gt fish template 0 weight 3 1 visual 2 ste
  • 隐藏数千个
  • 元素的最快方法?
  • 我有一个自动完成表单 用户可以在其中输入一个术语 它会隐藏所有内容 li 不包含该术语的元素 我最初循环了所有 li li 与 jQuery 的each并应用了 hide 那些不包含该术语的 这太慢了 我发现更快的方法是循环遍历所有 li
  • x >= 0 比 x > -1 更有效吗?

    在 C 中与 int 进行比较是x gt 0比更有效率x gt 1 简短的回答 不 更长的答案提供一些教育见解 这完全取决于您的编译器 尽管我打赌每个理智的编译器都会为这两个表达式创建相同的代码 示例代码 int func ge0 int
  • 将前四个列表项移至列表末尾

    所以我有一个包含几个的列表 li 元素 ul li a li li b li li c li li d li li e li li f li li g li li h li ul 上下文是我想重用liiOS 的 1 000 个内存密集型列表
  • 在服务器中实现自动完成的最佳方法是什么?

    这个问题很容易让人知道 让 Web 应用程序的客户端自动完成变得漂亮很简单 有很多插件 但是 在后端 在服务器端 最好的方法是什么 我不喜欢用户每次按下按键就访问数据库的想法 我一直在考虑 sphinx 或者一些与您的网站并行运行的全文搜索
  • 使用 NumPy 索引数组对 Python 列表进行切片——有什么快速方法吗?

    我有一个常规的list called a 以及一个 NumPy 索引数组b 不 我不可能转换a到 NumPy 数组 有什么方法可以达到与 相同的效果 a b 有效 需要明确的是 这意味着我不想提取每个人int in b由于其性能影响 是的
  • 使 K 不同(基数) google OR-TOOLS

    我想知道 google or tools 中是否存在 Solver AllDifferent x 的泛化 允许指定我允许的不同元素的数量 因此 如果 len x 4 则 AllDifferent x 意味着 len set x 4 但是 如
  • 装箱(或背包?)问题

    我收集了 43 到 50 个数字 范围从 0 133 到 0 005 但大部分都比较小 如果可能的话 我想找到 L 和 R 之和非常接近的所有组合 The brute force method takes 243 to 250 steps
  • 在 Fantasy Football 阵容优化器中添加 Flex 位置

    我编写了一些 R 代码来生成最佳的幻想足球阵容 最大化预计得分 该阵容受到用户输入的名单大小和选秀预算的约束 该数据框基于称为 球员 的数据框 该数据框由球员 位置 幻想点和选秀组成价值 我们的想法是在选秀之前使用这个工具 记住理想的阵容
  • C++ 错误:“_mm_sin_ps”未在此范围内声明

    我正在尝试对将函数应用于数组的不同方法进行基准测试 why is mm sin ps在我的范围内不知道但是 mm sqrt ps is 我怎样才能让它知道 并且编译没有错误 include
  • 如何优化这个 CUDA 内核

    我已经分析了我的模型 似乎该内核约占我总运行时间的 2 3 我一直在寻找优化它的建议 代码如下 global void calcFlux double concs double fluxes double dt int idx blockI
  • 在groovy中将变量标记为final是否有意义?

    我想知道变量如何标记为final由 Groovy 解释 在 1 8 0 1 8 1 中 我知道这在 Java 中是有意义的 并且可以提高性能 当然还有助于避免愚蠢的错误 我想了解如果final可以帮助java编译器优化用Groovy编写的程
  • 这段代码可以优化吗?

    我有一些图像处理代码 循环遍历 2 个多维字节数组 大小相同 它从源数组中获取一个值 对其执行计算 然后将结果存储在另一个数组中 int xSize ResultImageData GetLength 0 int ySize ResultI
  • 简化 Django 中的表单提交

    我在 Django 中有一个表单 用户可以在其中以单个表单提交文件 图像 文本 如下所示
  • 如何使用Python优化大型数据集的API调用?

    客观的 将地址列表发送到 API 并提取某些信息 例如 指示地址是否位于洪水区域的标志 Solution 适用于小数据的 Python 脚本 Problem 我想针对大输入优化当前的解决方案 如何提高 API 调用的性能 如果我有 100
  • 使用 :first 优化 jQuery 选择器

    我有过这样的感觉 class first 运行速度比 class 所以任何时候我都知道只有一个 class在子集中 我已经使用了它 Does first使查询运行得更快 还是没有必要 这实际上取决于浏览器 first http api jq
  • 比较字符串结尾的最佳方法是使用 RIGHT、LIKE 还是其他?

    我需要将字符串的结尾与存储过程中可能的结尾列表进行比较 会被叫很多 大概有10 15个候选结局 此时 仅使用代码的解决方案比创建专用于此的表更好 类似的东西 IF ENDSWITH var foo OR ENDSWITH var bar O
  • 集合划分比差分获得更好的结果

    分区问题 https en wikipedia org wiki Partition problem已知是 NP 困难的 根据问题的特定实例 我们可以尝试动态规划或一些启发式方法 例如差分法 也称为 Karmarkar Karp 算法 后者
  • scipy-optimize-minimize 不执行优化 - CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL

    我试图最小化定义如下的函数 utility decision decision risk cost 其中变量采用以下形式 决策 二进制数组 风险 浮点数数组 成本 常数 我知道解决方案将采取以下形式 决定 1如果 风险 gt 阈值 决定 0
  • 快速分类(分箱)

    我有大量条目 每个条目都是浮点数 这些数据x可以通过迭代器访问 我需要使用像这样的选择对所有条目进行分类10

随机推荐

  • 练习7-10 查找指定字符 (15分)

    本题要求编写程序 xff0c 从给定字符串中查找某指定的字符 输入格式 xff1a 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 xff08 不超过80个字符 xff09 输出格式 xff1a 如果找到 xff0c 在
  • 用cropper.js裁剪图片并上传到服务器,解析base64转存图片到本地

    今天要写上传图片功能 xff0c 研究了一下cropper 将图片上传服务器并保存到本地 html lt html gt lt head gt lt title gt 基于cropper js的图片裁剪 lt title gt lt met
  • 通讯协议详解

    1 xff0c 概念 网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合 网络上的计算机之间是如何交换信息的呢 xff1f 就像我们说话用某种语言一样 xff0c 在网络上的各台计算机之间也有一种语言 xff0
  • 自动识别击打控制系统

    目录 摘 要 关键词 一 系统方案 1 1 系统基本方案 1 2 程序算法的具体流程 二 视觉程序识别框架 2 1多线程 2 2 opencv配置文件 2 3 主函数 三 装甲板识别算法 3 1 装甲板识别 3 2 识别函数介绍 四 目标位
  • 基于stm32风力摆控制系统(电赛获得省一)

    目录 需要源文档及程序进入主页 一 系统方案 完整文档以及代码可主页私 1 1 系统基本方案 1 1 1 控制方案设计 1 1 2 机械结构方案设计
  • 基于stm32的所有嵌入式项目代码

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 本人本科和硕士阶段的专业都是嵌入式方向 做了许许多多的项目 包括51 stm32 freeRTOS linux操作系统 多进程线程实现功能 包括裸机开发 驱动开
  • 基于图像处理的水果自助售卖系统(自助水果售卖机)

    目录 第一章 nbsp 概述 1 1 发展概要 1 2 国内外研究现状 1 3 研究目的和意义 1 4 方案介绍
  • 基于stm32的无人机控制系统设计

    基于stm32的无人机控制系统设计 整篇文章有两万字左右 字数太多了 实在是懒得全部放在这上面来 太废时间了 需要完整论文可主页联系 第一章 前言 1 1项目背景和意义 1 2国内外发展现状 1 3本文研究的主要内容 第二章 设计方案论证与
  • 基于Robot Studio的工业机器人汽车喷涂仿真设计

    基于Robot Studio的工业机器人汽车喷涂仿真设计 整篇文章字数有一万四左右 图片太多了 实在是懒得全部放在这上面来 太废时间了 获得完整论文关注可查看主页私信我 摘要 关键词 1 绪论 1 1研究背景与意义 1 2国内外研究现状 2
  • 基于单片机的压力流量报警器(附代码+仿真+论文)

    基于单片机的压力流量报警器 附代码 仿真 论文 完整论文 代码 仿真可关注我在主页私我 摘要 关键字 第一章绪论 1 1课题背景及其意义 1 2 国内外的研究状况 1 3本文的主要研究内容及论文结构安排 第二章 方案的设计与论证 2 1控制
  • 基于STM32的微型电子琴设计

    基于STM32的微型电子琴设计 第一章 总体设计 1 1 系统功能 1 2 主要技术性能指标 第二章硬件设计 2 1 整体硬件图 2 2 按键模块 2 3 扬声器模块 2 4 显示模块 2 5 主控模块 第三章 软件设计 3 1 主要工作原
  • 百度2015校园招聘软件开发笔试题及答案

    简单题 xff08 本题共30分 xff09 请简述Tcp ip的3次握手以及4次挥手过程 xff1f 并解释为何关闭连接需要4次挥手 10分 详细答案参见TCP IP协议三次握手与四次握手流程解析 TCP三次握手 四次挥手过程如下 通常情
  • 智能算法实现PID智能车控制系统

    智能算法实现PID智能车控制系统 TOC 智能算法实现PID智能车控制系统 摘要 关键词 第一章绪论 1 1智能车概述 1 2智能PID研究现状 1 3本文工作 第二章 PID控制简介 第三章 内模PID简介 3 1 内模PID控制 第四章
  • esp8266WiFi模块通过MQTT连接华为云

    esp8266WiFi模块通过MQTT连接华为云 总结 xff1a 一 MQTT透传AT固件烧录二 串口调试2 1 设置模块为STA模式2 2 连接WiFi2 3 设置MQTT的登陆用户名与密码2 4 设置MQTT的ClientID2 5
  • tx2性能不够怎么办

    关闭pycharm xff0c 使用终端直接Python3 5 加路径脚本名运行
  • 瑞泰烧录捞取

    关于将pc主机上的镜像文件拷贝到tx2上的方法 一 给Linux主机搭建环境 2 2 解压 Linux Driver Package tar vxjf Tegra lt t arch ver gt Linux R aarch64 tbz2
  • Realsense D435i 在ubuntu上安装SDK与ROS Wrapper 运行ORB-SLAM2、RTAB和VINS-Mono

    前言 等了一个月的realsense d435i终于发货了 xff01 这款D435i xff08 见下图 xff09 在D435的基础上 xff0c 另外搭载了博世的惯性测量单元 xff08 IMU xff09 xff0c 可以作为研究V
  • 如何用Realsense D435i运行VINS-Mono等VIO算法 获取IMU同步数据

    前言 Intel Realsense D435i在D435的基础上硬件融合了IMU xff0c 然而目前网上关于这款摄像头的资料非常少 xff0c 本文主要介绍自己拿着d435i历经曲折最后成功运行VINS Mono的过程 重要 最近官方更
  • VINS-Mono代码解读——启动文件launch与参数配置文件yaml介绍

    前言 一般我们通过以下命令运行VINS Mono跑MH 01数据集 roslaunch vins estimator euroc launch roslaunch vins estimator vins rviz launch rosbag
  • 【VINS论文笔记】A General Optimization-based Framework for Global Pose Estimation with Multiple Sensors

    前言 2019年1月11日 xff0c 港科大VINS Mono的团队发布了VINS的扩展版本 VINS Fusion 其支持多种视觉惯性传感器类型 xff08 单相机 43 IMU xff0c 立体相机 43 IMU xff0c 立体相机