A General Optimization-based Framework for Local Odometry Estimation with Multiple Sensors论文翻译整理

2023-05-16

综述部分

📌 多传感器融合有两个趋势:

  1. 基于滤波的融合(MSCKF、EKF、UKF)
  2. 基于优化的滤波(BA)
    基于滤波器的方法对时间同步很敏感。任何迟来的测量都会引起麻烦,因为状态不能在过滤过程中传播回来。因此,需要特殊的排序机制来确保来自多个传感器的所有测量都是有序的。
    与基于滤波器的方法相比,基于优化的方法在时间同步方面具有优势,可以处理来自多个传感器的测量信息。基于优化的算法在准确性方面也优于基于滤波器的算法,但代价是计算复杂性。早期的优化求解器,例如 G2O [19],利用 Gauss-Newton 和 Levenberg-Marquardt 方法来解决问题。尽管在优化求解器中采用了稀疏结构,但复杂度随着状态和测量的数量呈二次方增长。为了实现实时性能,一些算法探索了增量求解器,而另一些则限制了位姿图的大小。 iSAM2 [20] 是一种高效的增量求解器,当新的测量出现时,它重用了先前的优化结果以减少计算量。优化迭代只更新了一小部分状态而不是整个位姿图。随后,在[21]中提出了一种加速求解器,通过将密集结构重构为稀疏块来提高效率。保持固定大小的位姿图的方法称为滑动窗口方法。令人印象深刻的基于优化的 VIO 方法,例如 [8, 10, 12],在有界大小的滑动窗口上优化了变量。在 [8, 12] 中,先前的状态被边缘化为先验因素而没有丢失信息。

算法部分

SYSTEM OVERVIEW

📌 算法框架图:
请添加图片描述

位姿图的示意图如下所示。每个节点表示某一时刻的状态(位置、方向、速度等)。每条边代表一个因子,该因子由一次测量得出。因素限制一种状态、两种状态或多种状态。对于 IMU 因子,它通过连续运动限制来约束两个连续状态。对于视觉地标,它的因子限制了多个状态,因为它是在多个帧上观察到的。一旦图建立起来,优化它就等于找到尽可能匹配所有边的节点的配置。

请添加图片描述

在本文中,我们专门演示了带有视觉和惯性传感器的系统。视觉和惯性传感器可以形成三种组合进行 6-DoF 状态估计,分别是立体相机、带有 IMU 的单目相机和带有 IMU 的立体相机。所提出的具有视觉和惯性传感器的框架的图形说明如图 3 所示。位姿图中存在几个相机位姿、IMU 测量和视觉测量。 IMU 和其中一个摄像头是可选的。

请添加图片描述

METHODOLOGY

A. Problem Definition

📌 1). 状态变量:

请添加图片描述

2). Cost Function:
状态估计的本质是一个 MLE(最大似然估计)问题。 MLE 由一段时间内机器人姿态的联合概率分布组成。在所有测量都是独立的假设下,问题通常被导出为,
请添加图片描述

其中 S 是一组测量值,来自相机、IMU 和其他传感器。我们假设测量的不确定性是高斯分布的,p(zkt |X ) ∼ N ( ̄ zkt , Ωkt )。因此,上述方程的负对数似然写为,

请添加图片描述

马氏范数定义为 ∣ ∣ r ∣ ∣ Ω 2 = r T Ω − 1 r ||r||^2_{\Omega}=r^T\Omega^{-1}r ∣∣rΩ2=rTΩ1r。 h(·) 是传感器模型,将在下一节中详细介绍。然后将状态估计转换为非线性最小二乘问题,也称为捆绑调整(BA)。

B. Sensor Factors

📌 1). Camera Factor:

请添加图片描述

[ u i l v i l ] \begin{bmatrix} u^l_i & v^l_i\end{bmatrix} [uilvil] i i i图像中的 l l l特征第一次观测的像素坐标

[ u t l v t l ] \begin{bmatrix} u^l_t & v^l_t\end{bmatrix} [utlvtl] t t t图像中的对同样特征 l l l特征观测的像素坐标

π c \pi_c πc π c − 1 \pi^{-1}_c πc1 是依赖于相机模型(针孔、全向或其他模型)的投影和反投影函数。

T T T 4 ∗ 4 4*4 44齐次变换,即 [ R p 0 1 ] \begin{bmatrix} R & p \\ 0 & 1 \end{bmatrix} [R0p1]
T b c T^c_b Tbc是从b系到相机c系的外参,需要离线标定
T i T_i Ti i i i图像时刻 b b b系相对于 w w w系的转换矩阵 T b i w T^w_{b_i} Tbiw

T t T_t Tt t t t图像时刻 b b b系相对于 w w w系的转换矩阵 T b t w T^w_{b_t} Tbtw
重投影误差的协方差矩阵 Ω t l \Omega^l_t Ωtl是像素坐标中的一个常数值,它来自相机的内在校准结果。
这个因素对于左摄像头和右摄像头都是通用的。我们可以将左图像的特征投影到时间空间的左图像,也可以将左图像的特征投影到空间空间的右图像。对于不同的相机,应使用不同的外在变换 T b c T^c_b Tbc
2). IMU Factor:

请添加图片描述

其中圈减是流形上的减法运算,专门用于非线性旋转。 dt 是两个时间点之间的时间间隔。 g 是已知的重力矢量,其范数约为 9.81。每两个相邻的帧在成本函数中构成一个 IMU 因子。

C. Optimization

📌 在传统中,方程 3 的非线性最小二乘问题通过 Newton-Gaussian 或 Levenberg-Marquardt 方法求解。成本函数相对于状态的初始猜测 X ^ \hat X X^线性化。那么,代价函数等于:

请添加图片描述

J J J是各个因子对当前状态向量 X ^ \hat X X^的雅可比矩阵

我们以 NewtonGaussian 为例,解推导如下,

请添加图片描述

最后,当前状态 ^ X 用 ^ X ⊕ δX 更新,其中 ⊕ 是对流形进行旋转的加操作。这个过程迭代几次直到收敛。

D. Marginalization

📌 由于状态的数量随着时间的推移而增加,因此计算复杂度将相应地二次增加。为了限制计算复杂度,在不丢失有用信息的情况下加入了边缘化。边缘化过程将先前的测量转换为先前的术语,该术语保留了过去的信息。被边缘化的状态集记为 X m X_m Xm,剩余状态集记为 X r X_r Xr。通过将所有边缘化因素(eq.7)相加,我们得到一个新的 H H H b b b。重新排列状态顺序后,我们得到以下关系:
[ H m m H m r H r m H r r ] [ δ X m δ X r ] = [ b m b r ] \begin{bmatrix} H_{mm} & H_{mr} \\ H_{rm} & H_{rr} \end{bmatrix} \begin{bmatrix} \delta X_m \\ \delta X_r \end{bmatrix}=\begin{bmatrix}b_m\\b_r \end{bmatrix} [HmmHrmHmrHrr][δXmδXr]=[bmbr]
使用 Schur补 [25] 进行边缘化,如下所示:

请添加图片描述

我们得到剩余状态的新先验 H p , b p H_p,b_p Hp,bp

有关边缘化状态的信息被转换为先前项而没有任何损失。具体来说,我们在系统中保留了十个空间相机帧。当一个新的关键帧到来时,我们将与第一帧的状态相关的视觉和惯性因素边缘化。

在我们获得有关当前状态的先验信息后,使用贝叶斯规则,我们可以将后验计算为似然和先验的乘积:p(X |z) ∝ p(z|X )p(X)。然后状态估计变成了 MAP(最大后验概率)问题。表示我们在滑动窗口中保持从时刻 m 到时刻 n 的状态。 m之前的状态被边缘化并转换为前项。因此,MAP问题写成:

请添加图片描述

与方程3相比,上述方程只增加了一个先验项。 Ceres 求解器 [24] 求解与 eq.3 相同。

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

A General Optimization-based Framework for Local Odometry Estimation with Multiple Sensors论文翻译整理 的相关文章

  • 使用 gekko 进行优化时返回“@Error:未找到解决方案”

    我正在尝试完成长达一年的电池优化问题 8760 小时 ind 1 和 ind 2 是长度为8760的列表 包含0 1 一年中的某些时间可能会获得额外的收入 因此这些指标列表用于区分这些时间 进一步用于最大化函数 m Gekko remote
  • 使用 Django 的 ORM 加速批量插入?

    我计划使用 django 的 ORM 将从约 750 个文件 每个约 250MB 中获取的 10 亿条记录上传到数据库 目前每个文件需要大约 20 分钟来处理 我想知道是否有任何方法可以加速这个过程 我采取了以下措施 使用 transact
  • 为什么这里不省略复制构造函数?

    我正在使用 gcc 与 O2 这似乎是一个消除复制构造函数的直接机会 因为访问 a 中字段的值没有副作用 bar的副本foo 但复制构造函数is调用 因为我得到了输出meep meep include
  • 是否可以在Java中有效地实现seqlock?

    Another question https stackoverflow com q 14660529 149138让我想知道是否seqlock http en wikipedia org wiki Seqlock可以通过Java中的易失性
  • 装箱(或背包?)问题

    我收集了 43 到 50 个数字 范围从 0 133 到 0 005 但大部分都比较小 如果可能的话 我想找到 L 和 R 之和非常接近的所有组合 The brute force method takes 243 to 250 steps
  • 针对 PyPy 进行优化

    这是后续PyPy 的统计分析器 https stackoverflow com questions 17346226 statistical profiler for pypy 我正在 PyPy 下运行一些 Python 代码 并希望对其进
  • R:tuneRF 函数的行为不明确(randomForest 包)

    我对这句话的含义感到不舒服stepFactor的参数tuneRF http www inside r org packages cran randomForest docs tuneRF函数用于调整mtry进一步使用的参数randomFor
  • 如何使用 NumPy 的广播来加速相关性计算?

    我正在尝试利用NumPy 广播 https docs scipy org doc numpy user basics broadcasting html和后端数组计算可显着加快此功能 不幸的是 它的扩展性不太好 所以我希望能够大大提高它的性
  • 我可以在 Rust 中有效地按值返回对象吗?

    我想用函数初始化一个大对象 目前我有 fn initialize mydata mut Vec
  • 如何用 numpy 在 Cython 中表示 inf 或 -inf ?

    我正在用 cython 逐个元素构建一个数组 我想存储常量np inf or 1 np inf 在某些条目中 然而 这将需要返回 Python 进行查找的开销inf 有没有libc math相当于这个常数 或者其他一些可以轻松使用的值 相当
  • 为什么在比较范围内的数字时会在汇编代码中发生分支?

    我正在读书this https stackoverflow com questions 17095324 fastest way in c to determine if an integer is between two integers
  • 流式音频播放延迟(约 200 毫秒)

    我有一个播放流式音频数据的应用程序 如聊天客户端 该工作流程涉及三个简单步骤 首先发送文件头信息 采样率 每个样本的位数和通道数 音频波形输出设备根据上述参数进行初始化 音频 pcm 数据被发送并在上述设备上播放 数据接收代码是本机的 C
  • gdb 通过指向错误的代码行显示不正确的回溯

    我们可以通过在源代码中包含多个中止调用 用非常简单的示例重现此问题 在下面的示例代码中 我们在不同条件下总共有四个中止调用 但是当我们使用优化标志 O3 进行编译时 我们只能看到一个中止调用的调试信息 因此 在这四个中止调用中发生崩溃时 g
  • 我可以让 C++ 编译器在编译时实例化对象吗?

    我正在编写一些代码 其中包含大量相当简单的对象 我希望它们在编译时创建 我认为编译器能够做到这一点 但我无法弄清楚如何做到 In C我可以执行以下操作 include
  • 查找二维空间中圆内的所有点

    我表示我的 2D 空间 考虑一个窗口 其中每个像素显示为 2D 数组中的一个单元格 即 100x100 的窗口由相同维度的数组表示 现在给定窗口中的一个点 如果我画一个半径的圆r 我想找到该圆圈中的所有点 我想我应该检查半径周围方形区域中的
  • Python 中快速、小型且重复的矩阵乘法

    我正在寻找一种使用 Python Cython Numpy 快速将许多 4x4 矩阵相乘的方法 任何人都可以给出任何建议吗 为了展示我当前的尝试 我有一个需要计算的算法 A 1 A 2 A 3 A N 哪里每个 A i A j Python
  • 取消的分支与常规分支有何不同?

    特别是对于 SPARC Assembly 取消的分支与常规分支有何不同 我一直认为 当我需要填充分支指令的 nop 延迟槽时 需要取消分支指令 但是 我认为我在这一部分上是不正确的 因为您可以在不取消分支的情况下填充 nop 如果不采用分支
  • 我应该如何优化这个文件系统 I/O 绑定程序?

    我有一个 python 程序 它执行如下操作 从 csv 文件中读取一行 对其进行一些变换 将其分解为实际的行 因为它们将被写入数据库 将这些行写入单独的 csv 文件 除非文件已完全读取 否则返回步骤 1 运行 SQL Loader 并将
  • 让 GHC 生成“带进位加法 (ADC)”指令

    下面的代码将表示 192 位数字的两个未装箱字三元组添加到新的未装箱字三元组中 并且还返回任何溢出 LANGUAGE MagicHash LANGUAGE UnboxedTuples import GHC Prim plusWord2 Wo
  • 在 Ruby 中构建字符串时,为什么铲运算符 (<<) 优于加等于 (+=)?

    我正在通过 Ruby Koans 进行工作 The test the shovel operator modifies the original string公案中about strings rb包括以下评论 Ruby 程序员倾向于使用铲子

随机推荐

  • CentOS7 64位安装solr7.2.0

    声明 xff1a 本人为学习solr的新手 xff0c 如编写过程中有部队的地方还请各位大佬指正 本文为原创 xff0c 如要转载请注明出处 你能学到 xff1a 1 linux上solr的安装部署 xff0c 官方给出的运行方式 2 添加
  • 阿里巴巴20121009 研发/算法工程师 笔试试题【修正】

    第19题 a i 在排序后的位置是 i k i 43 k xff0c a i 43 2k 在排序后的位置是 i 43 k i 43 3k xff0c 必然有a i lt 61 a i 43 2k 所以数组a里实际上有2k个各自有序的 交错的
  • printf() % lf出错

    printf 函数中不存在 lf xff0c 输入 double 用 lf 输出用 f
  • 奔腾系列的CPU 和酷睿系列的CPU

    以后奔腾要沦为中下层产品 奔腾D是接替奔腾4的型号 也是INTEL的第一代双核处理器 技术还比较粗糙 发热量控制的也不够好 至于酷睿系列 这可是INTEL的最新力作 性能上有绝对的优势 技术上也对老对手AMD保持了领先 而且功耗控制的也非常
  • 为什么神经网络被称为黑匣子

    数学层面 xff1a 由于网络参数与近似的数学函数之间缺乏明确的连接 xff0c 人工神经网络通常被称为 黑匣子
  • 第八弹 ROS发布者Publisher的编程实现

    1 话题模型 xff08 发布与订阅 xff09 2 创建功能包 catkin create pkg learning topic roscpp rospy std msgs geometry msgs turtlesim 建立一个名为le
  • TRIZ创新思维方法_简要复习

    一 TRIZ介绍 TRIZ理论成功地揭示了创造发明的内在规律和原理 xff0c 着力于澄清和强调系统中存在的矛盾 xff0c 其目标是完全解决矛盾 xff0c 获得最终的理想解 它不是采取折中或者妥协的做法 xff0c 而且它是基于技术的发
  • Generalized Focal Loss: Learning Qualified and Distributed BBoxes for Dense Object Detection论文翻译阅读

    Generalized Focal Loss Learning Qualified and Distributed Bounding Boxes for Dense Object Detection论文翻译阅读 论文下载地址 xff1a 点
  • ubuntu16.04对SD卡进行分区

    赶在2020年上半年的最后一天 xff0c 匆忙地写上一个博客 这篇博客是对自己的一个反思 xff0c 我的博客属于自己完全开辟的内容几很少 xff0c 有些博客大家随便在网上一搜就能找到 说实话 xff0c 有时候我会怀疑自己的智商有问题
  • RT-thread移植指南-RISC-V

    目录 RT thread移植指南 RISC V 1 概述 1 1 移植资料参考 1 2 移植开发环境准备 2 移植步骤 2 1 全局中断开关函数 2 2 线程上下文切换函数 2 3 线程栈的初始化 2 4 时钟节拍的配置 2 5 中断函数
  • 寒假学习心得--从0开始学破解

    寒假学习心得 从0开始学破解 写给和我一样将要接触或者才接触破解 的朋友们 前提 你必须得真正喜欢 她 一 工欲善其事 必先利其器 1 找一个中文版的OD PEID 记得就OD就有咱PYG版的某牛人强化版的等等等等 找一个合适的工具 干起事
  • 常用的“密码重置”代码

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • ORACLE多表查询优化

    转自某地 对作者很愧疚 不晓得地址了 ORACLE 多表查询优化 这里提供的是执行性能的优化 而不是后台数据库优化器资料 参考数据库开发性能方面的各种问题 收集了一些优化方案统计如下 当然 象索引等优化方案太过简单就不列入了 嘿嘿 执行路径
  • Word to PDF Converter v3.0 算法分析及注册机

    Word to PDF Converter v3 0算法分析及注册机 详细过程 1 xff0c 主程序在C Program Files doc2pdf DOC2PDF dll xff0c PEID查壳为ASProtect 1 23 RC1
  • 安全策略调整步骤

    1 修改防火墙 xff0c 保留22 SSHD 8081 APACHE 80 关闭端口443 HTTPS 3306 MYSQL 8080 8088 53 123 2 针对PHP的BUG和安全漏洞 xff0c 只有升级版本一途 xff0c 经
  • 获取微信openid(或昵称头像)的授权登录及其代理

    lt php 本页用于微信授权登录及其代理 64 version V2 0 64 author ty1921 lt ty1921 64 gmail com gt 64 param backurl 传get参数backurl xff0c 则授
  • 常用的PHP文件头和HTML5文件头(含移动端)

    lt php PHP Header Created by ty1921 64 gmail com Ver V1 Date 2017 8 18 1 session session start 2 display errors ini set
  • VB+PHP实现在线修改Windows服务器的配置文件

    本文仅供记录 存档备案用 用途 xff1a 某电话转接系统 xff0c 需要每天修改配置文件 并重启服务端程序 原理 xff1a WEB用于展示修改界面 xff0c 提交 保存配置文件的相关数据 VB端用于定时轮训WEB上保存的数据 xff
  • OLLVM分析

    一 LLVM是什么 LLVM最初是Low Level Virtual Machine的缩写 xff0c 定位是一个 xff0c 但是是比较底层的虚拟机 然而LLVM本身并不是一个完整的编译器 xff0c LLVM是一个编译器基础架构 xff
  • A General Optimization-based Framework for Local Odometry Estimation with Multiple Sensors论文翻译整理

    综述部分 x1f4cc 多传感器融合有两个趋势 xff1a 基于滤波的融合 xff08 MSCKF EKF UKF xff09 基于优化的滤波 xff08 BA xff09 基于滤波器的方法对时间同步很敏感 任何迟来的测量都会引起麻烦 xf