ROVIO解析

2023-05-16

http://jinjaysnow.github.io/blog/2017-07/ROVIO%E8%A7%A3%E6%9E%90.html

基于EKF的鲁棒视觉惯性测量Robust Visual Inertial Odometry, ROVIO

作者:Michael Bloesch

作者博士论文集:Docteral thesis

滤波结构和状态参数

基于扩展卡尔曼滤波:惯性测量用于滤波器的状态传递过程;视觉信息在滤波器更新阶段使用。

定义三个坐标系:
惯性世界坐标帧:II
IMU固定坐标帧:BB
相机固定坐标帧:VV

对于N个视觉特征点,滤波器状态如下表:

参数坐标系描述
rr在IMU固定坐标系BBIMU在IMU坐标系中的坐标
vv在IMU固定坐标系BBIMU在IMU坐标系中的速度
qq从IMU坐标系BB映射到世界坐标系IIIMU在师姐坐标系中的姿态
bfbfIMU坐标系BB加速计偏差
bwbwIMU坐标系BB陀螺仪偏差
ccIMU坐标系BBIMU-相机外参的平移部分
zz从IMU坐标BB到相机坐标系VVIMU-相机外参的旋转部分
uiui相机坐标系VV特征点i在V中的bearing向量
ρiρi特征i的距离参数

上述参数中uiuiρiρi是将特征点参数化为相对于当前帧的bearing向量和距离参数。这两个参数来自于Montiel发表的逆深度参数化的工作。[TODO]

参数(q,zSO(3))(q,z∈SO(3)),单位向量uiS2ui∈S2。根据Hertzberg的方法来执行计算差分和微分。[TODO]

滤波器的状态传递过程

记加速计测量值,f~f~,和旋转测量值w~w~
修正零偏和噪声影响后的IMU加速度和角速度为:

f^=f~bfωfω^=ω~bωωωf^=f~−bf−ωfω^=ω~−bω−ωω

将IMU加速度和角速度转化给相机,乘以旋转外参,使用××表示向量的斜对称矩阵,有:

v^Vω^V=z(v+ω^×c)=z(ω^)v^V=z(v+ω^×c)ω^V=z(ω^)

构造EKF的连续微分方程如下:

r˙v˙q˙b˙fb˙ωc˙z˙u^iρ^i=ω^×r+v+ωr;=ω^×v+f^+q1(g);=q(ω^);=ωbf;=ωbw;=ωc;=ωz;=NT(ui)ω^V[0110]NT(ui)v^Vd(ρi)+ωu,i;=uTiv^V/d(ρi)+ωρ,i;==×+++==×+姿=姿δt,姿=姿0=0=IMU0=IMU0=r˙=−ω^×r+v+ωr;位置的导数=速度=角速度×当前位置+当前速度+速度+位置白噪声v˙=−ω^×v+f^+q−1(g);速度的导数=加速度=角速度×当前速度+加速度测量值−重力加速度q˙=−q(ω^);姿态=当前姿态⋅角速度⋅δt,求导有:姿态的导数=当前姿态⋅角速度b˙f=ωbf;加速计零偏的导数为0,需要加上白噪声的影响,故而加速计零偏导数=白噪声b˙ω=ωbw;陀螺仪零偏的导数为0,需要加上白噪声的影响,故而陀螺仪零偏导数=白噪声c˙=ωc;IMU与相机的平移外参导数为0,加上白噪声的影响,故而平移外参导数=白噪声z˙=ωz;IMU与相机的旋转外参导数为0,加上白噪声的影响,故而旋转外参导数=白噪声u^i=NT(ui)ω^V−[01−10]NT(ui)v^Vd(ρi)+ωu,i;ρ^i=−uiTv^V/d′(ρi)+ωρ,i;

其中,NT(u)NT(u)将在bearing向量uu附近将三维向量投影到二维切线空间。具体细节作者还没有公布 still under review...。[TODO, NT(u)NT(u)的计算过程在作者博士论文集最后一篇论文中给出]

滤波器更新过程

对每一帧图像执行一次状态更新。已知相机内部参数,可以计算出bearing向量在图像帧中的像素坐标p=π(u)p=π(u)。对每一个预测会出现在当前图像中的特征点,计算一个二维的线性约束bi(π(u^i))bi(π(u^i))。这个线性约束编码了特征的亮度误差,可以直接作为Kalman更新的innovation。

yi=bi(π(u^i))+niyi=bi(π(u^i))+ni

相应的Jacobian矩阵为:
Hi=Ai(π(u^i))dπdu(u^i)Hi=Ai(π(u^i))dπdu(u^i)

通过计算图像中存在的特征点的上述约束,可以执行标准的EKF更新。不过,在新特征点初始化还有较大的距离不确定度时,更新过程可能失败。为了避免新初始化的特征点具有较大的不确定性造成的影响,执行了一个基于patch的特征搜索选择合适的特征点。

对于移动的物体或其他干扰,基于Mahalanobis的外点检测用于更新步骤。对比预测的innovation协方差及获得的innovation,然后加权范数查过某一个阈值的测量值。

多层次patch特征处理

预测阶段,多层次patch特征的新位置使用IMU运动模型来计算。特别地,如果外参的标定和特征距离参数收敛,那么会给出特征位置一个高精度的预测。

单个特征的处理流程如图:

rovio feature

Structure and wraping

对于一个给定的图像金字塔(因子为2的下采样)和一个给定的bearing向量uu,多层次的patch通过在每一个图像层次ll相应的像素坐标p=π(u)p=π(u)处提取固定大小(8x8像素)的patch组合得到。跟踪这个特征对于模糊图像具有鲁棒性。

Alignment Equations and QR-decomposition

使用亮度误差来预对齐特征或者更新滤波状态。对于图像IlIl给定的一个图像金字塔和一个给定的多层次patch特征(坐标为pp,patches PlPl), 亮度误差由下式计算:
图像层次ll和patch像素pjpj:
el,j=Pl(pj)Il(psl+Wpj)mel,j=Pl(pj)−Il(psl+Wpj)−m

其中尺度sl=0.5lsl=0.5l指代下采样。减去平均的亮度误差mm,可以得到帧间的亮度变化。

应用QR分解来简化计算过程。


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

ROVIO解析 的相关文章

  • 云服务器上ros安装

    Ubuntu16 04安装ROS Kinetic详细过程 xff1a https blog csdn net weixin 43159148 article details 83375218 出现xx release not found x
  • 从驱动到转行到游戏开发的经验

    已经转行 xff0c 但是从自己熟悉的行业转入一个新行业 xff0c 各种心酸只有自己知道 以下是我转行中所读到的图形学相关书 xff1a 1 xff0c Opengl 编程指南 或者龙书 不管你是否志在游戏行业都推荐龙书 xff0c 书中
  • vtk 提取等值面并显示

    marchingcube是提取等值面比较通用的算法 xff0c 本文利用vtk 的marching cube接口提取等值面 xff0c 并通过其绘制管线把等值面绘制出来 其原理请参考下文 xff1a 1 等值面的定义及其三角面片近似 等值面
  • 关于Runnable 和 Thread的应用场景

    摘自StackOverflow 个人觉得比较靠谱的答案 xff0c 细节请看url http stackoverflow com questions 541487 implements runnable vs extends thread
  • JAVA 泛型中的<T> 和 <?> 的应用场景

    在JAVA 泛型中 xff0c 经常看到 lt gt 应用场景为当不确定类型时 因为泛型的输入参数是类型 xff0c 而有一些状况下我们并不能确定类型
  • 构造块和静态块的应用场景

    待补充 xff0c 有点懒
  • 在Github和Git上fork之简单指南

    from https linux cn article 4292 1 rss html 以我的经验来看 xff0c 刚接触Git和GitHub时 xff0c 最困扰的一件事情就是尝试解决下面的问题 xff1a 在Git和GitHub上 xf
  • java 同步原理

    还未来得及写文章呢
  • (华清远见)嵌入式学习月度总结

    文章声明 xff1a 本次总结仅代表个人观点 xff0c 至于哪一家培训机构怎么样 xff0c 同xxx培训比起来如何 xff0c 是否值得报名参加 xff0c 都应该由你自己去斟酌决定 xff0c 仅提供个人感受 xff0c 不提供建议
  • FreeRTOS学习记录 01--中断管理

    文章目录 0 前言1 Cortex M 中断管理1 1 中断配置1 2 优先级分组配置1 3 FreeRTOS中断 PendSv和Systick中断优先级配置 2 FreeRTOS的临界段代码保护和开关中断2 1 临界段代码保护2 2 中断
  • 通信网络中的透传到底什么意思?

    1 透传 xff1a 指与传输网络的介质 调制解调方式 传输方式 传输协议无关的一种数据传送方式 这就好比快递邮件 xff0c 邮件中间有可能通过自行车 汽车 火车 飞机的多种组合运输方式到达您的手上 xff0c 但您不用关心它们中间经历了
  • 2016年个人工作总结、生活总结 和 2017年个人工作计划、生活计划

    个人总结 xff0c 分别对2016年的工作生活总结和计划安排 xff0c 让自己在可预见的目标路线上前进 xff0c 为了自己也为了以后的幸福 一 2016年工作总结 1 2016年上半年 xff0c 完成小步环卫的智能手环 后台 APP
  • pip安装baidu-aip的方法

    记住你以后就有名字啦 万能小p xff1a pip install baidu aip i http pypi douban com simple trusted host pypi douban com 中间错误是这样的 xff1a Co
  • 计算机网络习题集_主打选择填空

    计算机网络习题 计算机网络习题第一章 概述第二章 物理层第三章 数据链路层第四章 网络层第五章 运输层第六章 应用层 附上电子版 链接 xff1a https pan baidu com s 1Y XyB3uAitkz0FtW6u1n0g
  • 不能错过的六大在线画图网站

    图表网站列表 xff1a 1 Highcharts2 online visual paradigm3 everviz4 echarts5 AntV6 fooplot 1 Highcharts Highcharts xff1a https w
  • ubuntu software database is broken问题解决

    ubuntu software database is broken 出现如下字样 xff1a ubuntu software database is broken It is impossible to install or remove
  • 批量处理:读取文件夹,将json文件转化为txt文件

    读取文件夹 xff0c 将json文件转化为txt文件 一 样例1 json文件只有一个样本1 json文件内容2 代码转化3 效果图 二 样例2 json文件中有多个样本1 json文件内容2 代码转化3 效果图 三 样例3 json文件
  • Ubuntu18.04对应的ROS安装步骤教程

    Ubuntu18 04对应的ROS安装教程 一 ROS配置1 配置Ubuntu18 04 软件仓库2 开始安装3 测试 二 遇到的问题1 ROS无法下载问题2 sudo rosdep command not found3 rosdep up

随机推荐

  • 最简ubuntu18.04系统分区教程

    最简ubuntu18 04系统分区教程 一 在分区之前先介绍一下ubuntu的文件系统二 分区详情 一 在分区之前先介绍一下ubuntu的文件系统 1 swap xff1a 用作虚拟内存 xff0c 这个要和自己的物理内存一样大 2G 10
  • Ubuntu系统永久设置串口权限

    Ubuntu系统永久设置串口权限 1 查看串口2 查看当前用户名3 设置串口永久权限 1 查看串口 s l dev ttyUSB0 注 所属用户组为 dialout xff0c root用户才具有操作权限 2 查看当前用户名 span cl
  • 【ROS简介】

    ROS简介 1 ROS是什么 xff1f 2 ROS能干什么 xff1f 3 存在的瓶颈 xff1f 4 涉及的技术 xff08 概率机器人技术 xff09 5 内部构造 1 ROS是什么 xff1f ROS的核心是一个分布式 低耦合的通讯
  • 【上传官方服务器评估TrackingNet数据集】

    1 官方链接 数据集评估链接 xff1a https eval ai web challenges challenge page 1805 overview 2 以zip压缩包的形式提交测试结果 3 查看提交结果 4 在排行榜查看排名
  • 【git常用操作】git的分支创建、切换、提交与关联分支操作

    1 下拉项目 下拉代码建议用ssh密钥方式下拉 xff0c 配置好之后后续操作不需要输入密码等权限验证操作 xff0c 很方便 git clone span class token punctuation span 代码链接 span cl
  • 【国际学术会议举办的城市和国家】

    与计算机视觉相关的国际学术会议在不同年份举办的城市和国家列表 xff08 持续更新中 xff09 会议名 城市和国家 IJCAI2019 Macau China IJCAI2021 Montreal Canada CVPR2005 San
  • 【简历下载教程】

    这里有几个不错的简历下载网站 xff1a 1 https jianlixiazai cn 2 http www yyfangchan com 3 https sc chinaz com jianli free html 4 https sc
  • 软件工程—需求分析阶段

    第一步 需求获取 为了保证能全面地获取信息 xff0c 以更好地服务于产品设计和迭代 xff0c 产品经理必须利用内部外部等多种渠道来获取用户需求 并且因渠道差异 xff0c 产品经理所采取的方式与方法也相应会有所差异 xff0c 所以产品
  • c大小为0的数组

    大小为0的数组 Q xff1a 数组大小为0应该怎么理解 xff1f 比如 xff1a struct page page 0 unsigned long private 0 cacheline aligned A xff1a 一个很好的例子
  • 【安装ROS执行rosdep init、rosdep update失败-本地解决方法】

    Ubuntu系统安装ROS时 xff0c 执行rosdep init rosdep update失败 本地解决方法 1 克隆镜像文件2 修改20 default list文件3 修改sources list py文件文件3 1 执行命令3
  • 中兴2016校招软件在线笔试题

    面试经验可以参考我的另一篇文章 xff0c 是7月初参加openday面试的 xff0c 文章链接http blog csdn net dandelion1314 article details 47009585 招聘群里有人发的招聘时间安
  • docker 图形化界面portainer

    portainer 官方地址 https portainer readthedocs io en latest deployment html 网易镜像网站https c 163yun com hub m home 国内拉去镜像 docke
  • ST电机库v5.4.4源代码分析(6): PID以及相关参数

    编者 xff1a 沉尸 5912129 64 qq com 前言 xff1a 本文章探索st电机库自动生成的PID参数的由来 xff0c 采用的控制板为野火407电机板 43 BLDC带Hall的电机 在 Mcboot 函数中初始化变量 P
  • 【Pixhawk】注册一个字符型驱动设备

    最近学习Pixhawk的SPI xff0c 本以为PX4是STM32单片机而已 xff0c 写个SPI驱动应该很简单 但是当我看到mpu9250的那些cpp文件 xff0c 我一下就蒙了 由于PX4用的NUTTX系统 xff0c 类似Lin
  • 电脑开机过程(腾讯08年面试题)

    打开电源启动机器几乎是电脑爱好者每天必做的事情 xff0c 面对屏幕上出现的一幅幅启动画面 xff0c 我们一点儿也不会感到陌生 xff0c 但是 xff0c 计算机在显示这些启动画面时都做了些什么工作呢 xff1f 相信有的朋友还不是很清
  • 卡尔曼滤波的理解以及推导过程

    针对的系统为 xff1a 状态方程 X k 61 AX k 1 43 Bu k 1 43 W k 1 测量方程 Z k 61 HX k 43 V k 0 W是状态预测的噪声 符合正态分布N 0 Q V 是测量的噪声 符合正态分布N 0 R
  • 车载网络技术——CAN总线基础

    在之前一文 xff0c 简单介绍了一下具有概括性的车载网络技术的基础知识点 xff0c 那么在本文 xff0c 将专注于介绍CAN总线的相关知识 首先 xff0c 回忆一下之前提到的现场总线 xff0c 它是工业环境下的一种应用技术 xff
  • 树莓派3B装系统后无法正常启动的可能原因

    新入手树莓派3B xff0c 按照网上的教程尝试用NOOBS和Raspbian两种方式安装系统 教程里的过程是很简单的 xff0c 但无论用哪种方法 xff0c 我的树莓派3B都无法正常启动 上电后只有红灯亮 xff0c 绿色指示灯不亮 网
  • 几种常见的调度算法

    文章目录 1 先来先服务算法 xff08 FCFS First Come First Service xff09 2 短作业优先算法 xff08 SJF Short Job First xff09 3 高响应比优先算法4 时间片轮转算法5
  • ROVIO解析

    http jinjaysnow github io blog 2017 07 ROVIO E8 A7 A3 E6 9E 90 html 基于EKF的鲁棒视觉惯性测量Robust Visual Inertial Odometry ROVIO