一种应用于卷帘快门相机的视觉惯性融合连续时间表示方法

本文主要是介绍一种应用于卷帘快门相机的视觉惯性融合连续时间表示方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

样条融合:一种应用于卷帘快门相机的视觉惯性融合连续时间表示方法

    • 一、论文总结
    • 一、基于累积B样条插值公式推到如下

一、论文总结

论文总结:
样条融合:一种应用于卷帘快门相机的视觉-惯性融合连续时间表示方法本文介绍了一种利用卷帘式CMOS相机和MEMS IMUs等传感器进行SLAM和视觉惯性标定的方法。利用相机轨迹的连续时间模型,融合来自其它不同步的高速率传感器的信息,同时限制状态大小。对相机的卷帘快门进行建模,并能在惯性测量中产生误差。该模型不局限于视觉惯性SLAM,还可以简化其他传感器的集成,如旋转SICK激光雷达。
本文方法的核心是一个SLAM系统连续的轨迹表示。我们假设系统需满足如下性质:
1) 允许系统在线和批量运行
2) 系统具有C2的连续性,使我们能够预测IMU的测量值
3) 具有一个很好的近似最小扭矩轨迹
4) 是可参数化且无奇异点的刚体运动
为满足以上性质,本文选择累积B样条插值法,这种方法允许在样条曲线上的任意一点计算解析时间倒数。可以很容易地合成加速度计和陀螺仪的测量值,反过来利用他们对观测到的测量值形成直接误差。
连续时间框架的另一个优点是处理卷帘快门相机。虽然卷帘快门相机的射影几何形状与全局快门相机相同,但图像的每一行都是在不同的时间内曝光的,每一行都比上一行延迟得更久。当相机在运动时,这可能导致图像出现扭曲和倾斜。使用相机运动的连续时间模型,将图像的每一行看作是单独曝光的,如图1所示。
图1

此外本文还给出了视觉和惯性数据的生成模型,通过最小化观测值和预测值之间的差值所形成的目标函数,可批量的求解样条曲线和相机参数,利用连续时间公式,可以对重投影误差和惯性误差进行均匀处理,并根据设备规格或校准计算出它们各自的信息矩阵进行加权。
文章实验部分,进行了仿真和实际数据的对比。首先在一个模拟的单目卷帘相机数据集上给出滑动窗口的视觉测试结果。然后在实际视惯SLAM系统采集的数据集上做了相应测试。结果验证了本文提出的基于连续时间下的B-样条插值方法具有良好的预测效果。

一、基于累积B样条插值公式推到如下

注:为了描述方便以下公式是以截图形式展现

  1. 累积 B-样条插值基本公式如下:
    公式1(1)

值得注意的是B为基函数,p为控制点。
用矩阵的形式表达:
在这里插入图片描述 (2)

在这里插入图片描述 (3)
其中
在这里插入图片描述 (4)
基于累积B-样条插值法公式,在SE(3)下的表达如下:
在这里插入图片描述 (5)
指数对数映射之后得到:
在这里插入图片描述 (6)
假控制点个数k=4,得到:
在这里插入图片描述(7)
展开得到:
在这里插入图片描述(8)
其中B(u(t))表达如下:
在这里插入图片描述 (9)
上式(9)中红色方框矩阵的计算过程手动推到如下:
在这里插入图片描述
最终得到SE(3)下三次累积B-样条的公式变成了如下形式:
在这里插入图片描述(10)

基于以上B-样条公式可以对IMU数据进行插值,推导过程如下:
首先IMU误差模型表达如下:
在这里插入图片描述 (11)
用B-样条方法可以得到连续时间下的陀螺仪角速率和加表的加速度值,重新表达以上公式,如下:
在这里插入图片描述 (12)
其中R,P是矩阵T的子集,要求出R的一介导和P的二阶导,需求出T矩阵的一介二阶导。将矩阵T表示公式简化如下:
在这里插入图片描述(13)
其中对T矩阵求一介二阶偏导如下:
在这里插入图片描述 (14)
求出这个公式,需要求出Ai的一阶二阶导数,计算公式如下:
在这里插入图片描述(15)
这里以A0计算推导为例,A1,A2推导步骤类似,这里就只推导A0:
首先对A0泰勒展开:
在这里插入图片描述(16)
求一阶导如下:
在这里插入图片描述 (17)
求二阶导如下:
在这里插入图片描述 (18)
其中要求出A0以及A0的一介二阶导数,需要先求出B0以及它的一阶二阶导数。求解过程如下:
在这里插入图片描述 (19)
在这里插入图片描述 (20)
在这里插入图片描述(21)

同样基于以上步骤可以推导出A1,A2以及它们的一阶二阶导数。
如果将这个过程反推上去,就可以计算出连续时间下imu的角速率和加速度信息啦!!!

参考文献:
1.Spline Fusion: A continuous-time representation for visual-inertial fusion with application to rolling shutter cameras
2.A Spline-Based Trajectory Representation for Sensor Fusion
and Rolling Shutter Cameras
3.Research Notes and Jacobians:Continuous-Time Visual-Inertial Trajectory Estimation with Event Cameras
4.Sigma-Point Kalman Filtering for Integrated GPS and Inertial Navigation
5.General matrix representations for Bsplines
友情提示:代码下载需要C币,请事先判断是否对您有帮助,谨慎下载哦!!!

这篇关于一种应用于卷帘快门相机的视觉惯性融合连续时间表示方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/258816

相关文章

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st