当前位置: 首页 > news >正文

SVO、vinsmono、 OKVIS系统比较

几个经典视觉slam系统的比较

SVO

  • 高翔链接:https://www.zhihu.com/question/39904950/answer/138644975
  • 处理的各个线程:
    tracking部分-frame to frame 、frame to map
  1. 金字塔的处理。这一步估计是从金字塔的顶层开始,把上一层的结果作为下一层估计的初始值,最后迭代到底层的。顶层的分辨率最小,所以这是一个由粗到精的过程(Coarse-to-Fine),使得在运动较大时也能有较好的结果
  2. SVO自己实现了高斯——牛顿法的迭代下降,并且比较取巧地使用了一种反向的求导方式:即雅可比在k-1帧图像上进行估计,而不在k帧上估计。这样做法的好处是在迭代过程中只需计算一次雅可比,其余部分只需更新残差即可(即G-N等式右侧的)。这能够节省一定程度的计算量。另一个好处是,我们能够保证k-1帧的像素具有梯度,但没法保证在k帧上的投影也具有梯度,所以这样做至少能保证像素点的梯度是明显的。
  3. 根据更精确的投影位置,进行位姿与地图点的优化。这一步类似于Bundle Adjustment,但SVO实现中,是把Pose和Point两个问题拆开优化的,速度更快。
    地图点初次被观测到的图像与当前帧的图像进行比对时,不能直接对两个图像块求差,而需要计算一个仿射变换(Affine Warp)。这是因为初次观测和当前帧的位移较远,并且可能存在旋转,所以不能单纯地假设图像块不变。
  • mapping部分:
    Mapping部分主要是计算特征点的深度。
    单目VO中,刚刚从图像中提取的热乎的关键点是没有深度的,需要等相机位移之后再通过三角化,再估计这些点的深度。这些尚未具备有效深度信息的点,不妨称之为种子点(或候选点)。然而,三角化的成功与否(以及精度),取决于相机之间的平移量和视线的夹角,所以我们通常要维护种子点的深度分布,而不是单纯的一个深度值。
    实际可以操作的只有高斯分布一种——高斯只要在计算机里存均值和协方差即可。在逆深度[8]流行起来之后,用逆深度的高斯分布成了SLAM中的标配。然而SVO却使用了一种高斯——均匀混合分布的逆深度(由四个参数描述),推导并实现了它的更新方式,称为Depth Filter。它的工作逻辑大概是这样的:如果进来一个关键帧,就提取关键帧上的新特征点,作为种子点放进一个种子队列中。如果进来一个普通帧,就用普通帧的信息,更新所有种子点的概率分布。如果某个种子点的深度分布已经收敛,就把它放到地图中,供追踪线程使用。

单目初始化既要有旋转,也要有平移;E=t^R,当纯旋转,t=0时,E为零,无法恢复出R;而当t不为零,R为零时,三角化求深度的时候s1x1=s2Rx2+t,也就没有办法求取深度

vinsmono(四自由度,平移和yaw(z方向的角速度未知))

视觉的sfm和惯性的预积分对齐(主要就是将相机的sfm和IMU的预积分进行对齐,相机只有位置、姿态的6维状态,而IMU15状态,对齐的量是什么呢?
回答是利用相机估计出来的位姿相对量和imu的相对量进行对齐。深度优化量在视觉重投影中进行优化,一些零偏量在IMU误差中进行优化,
但是因为共同的位姿量的存在,所以虽然不在某一项优化函数里,但是其实还是受到影响的)

单目的初始化很鲁棒,视惯的紧耦合,有效初始化相机与imu之间的外参、陀螺仪的零偏、尺度、速度、重力加速度;(由于估计了速度,就可以在动态场景下进行初始化,更适合系统应用场景)
由于利用相机求解的位姿和IMU预积分结合外参有一个约束(这里应用旋转约束),利用估计和量测信息可以构建优化函数,求解外参;求出来外参可以继续估计陀螺仪的零偏
利用平移约束,可以估计尺度、速度、重力加速度(同时对重力加速度进行细化)
对齐第零帧相机系下的重力加速度和世界系下的重力加速度,就可以对齐相机系和世界系。

建立关于IMU、视觉的残差函数
一个特色:基于优化的方法,通过滑动窗口的schur边缘化进行位姿维护。根据前一帧相机是否是关键帧,确定是否保留该帧留在窗口中,不是关键帧的话就丢弃该视觉信息;是关键帧就将最老的一帧边缘化掉,同时保留视觉信息在窗口中。(这里是实现的时候,优化函数分为四部分:1.所有的IMU残差2.窗口里的局部视觉重投影进行优化3.产生回环帧的部分)

误差来自滑动窗口和边缘化,主要体现在四个自由度(利用重力向量可以将第0帧相机系和世界坐标系的x、y平面也就是水平面进行对齐,从而感受到滚转角和偏航角,这两个角度是没有偏差的,只有yaw、x、y、z有误差)
重定位模块: 闭合回环检测、建立当前帧与回环的特征关联、将这些特征关联集成到前面的VIO模块以消除漂移如果当前窗口有多个回环帧的话,那么就一起加到回环的优化函数中,增加多个角度的约束

全局位姿图优化 global pose graph optimization(VIO模块使得位姿中的滚转和俯仰变得可观,只剩下了3自由度平移和偏航角(绕重力向量的旋转)不可观,因此这里的全局图优化只用来估计这四个自由度,也就是优化函数是关于这四个变量的函数,所有又称为4自由度全局位姿图优化):位姿图包括所有关键帧的IMU位姿为顶点,约束为回环边和正常的递推下来的边。

论文实验中出现的实验说明:
VINS-Mono在滚转roll和俯仰pitch的估计中效果不如OKVIS,原因可能是这两个量是根据IMU的预积分得到的,预积分其实是为了节省计算量而采用的一种一阶近似手段,因此可能造成了误差存在。关闭了回环检测和重定位功能的VINS-Mono表现大打折扣,和OKVIS一样在四自由度(三自由度平移和yaw角)上有漂移,但是打开回环检测后效果提升就很显著了。移植到IOS移动端的程序与商用的Google tango比起来丝毫不落下风,尤其是在全局的误差消除上,甚至比tango还要好,这得益于4自由度的全局位姿图优化。

OKVIS:Keyframe-Based Visual-Inertial SLAM UsingNonlinear Optimization

initial :not dynamic /yaw points to the z 论文里说是强制固定位置和yaw角的
(freeze yawing around the gravity direction (world z-axis), as well as the position)
In the case where the oldest frame in the temporal
window (x c−ST ) is not a keyframe, we will drop all its
landmark measurements and then marginalize it out together
with the oldest speed and bias states.
根据确定的滑动窗口大小(大小即是滑动窗口内图像关键帧的多少),滑动窗口内的关键帧是滞后于图像当前帧的,okvis论文以三帧为例,vinsmono直接是1,因此如果图像帧已经到kc,但实际上还在判断kc-3/kc-1帧是不是关键帧,要不要边缘化。
okvis:是关键帧:就把窗口里最旧的关键帧边缘化,且因为看到相同地图点的两帧已经具有相对位姿信息,就可以把之前帧里看到但在当前帧没看到的地图点和最旧的关键帧都踢掉
不是关键帧,把该帧、地图点通通都边缘化掉
而且在边缘化中okvis是把估计的变量拆分为两部分,机器人的位置、姿态信息由是否是关键帧在滑动窗口中慢慢被边缘化,而速度、加速度计、陀螺仪的偏移量与该帧是不是关键帧没有关系,马上被边缘化掉
//different from VINSmono

相关文章:

SVO、vinsmono、 OKVIS系统比较

几个经典视觉slam系统的比较 SVO 高翔链接:https://www.zhihu.com/question/39904950/answer/138644975处理的各个线程: tracking部分-frame to frame 、frame to map 金字塔的处理。这一步估计是从金字塔的顶层开始,把上一层的结果作为下一层估计的初…...

前端开发规范

一、开发工具 开发工具统一使用 VSCode代码格式化插件使用 Prettier代码格式校验使用 ESLintVSCode 需安装的插件有:ESLint、Prettier、Vetur 二、命名规范 项目命名使用小写字母,以连字符分隔 正确:fe-project 错误:FE PROJECT…...

不用科学上网,免费的GPT-4 IDE工具Cursor保姆级使用教程

大家好,我是可乐。 过去的一周,真是疯狂的一周。 GPT-4 震撼发布,拥有了多模态能力,不仅能和GPT3一样进行文字对话,还能读懂图片; 然后斯坦福大学发布 Alpaca 7 B,性能匹敌 GPT-3.5&#xff…...

【艾特淘】抖音小店物流体验分提升的6个维度,新手做店必看

抖音小店体验分,考核的内容包括商品、物流以及服务。大部分人会把重心放在商品评价和服务上,忽略了物流体验。但其实,抖音小店物流体验占比有20%,比服务分的占比还高一点。如果你的订单物流出了问题,很有可能会导致用户…...

数据结构——二叉树与堆

作者:几冬雪来 时间: 内容:二叉树与堆内容讲解 目录 前言: 1.完全二叉树的存储: 2.堆的实现: 1.创建文件: 2.定义结构体: 3.初始化结构体: 4.扩容空间与扩容…...

Three.js——learn02

Three.js——learn02Three.js——learn02通过轨道控制器查看物体OrbitControls核心代码index2.htmlindex.cssindex2.jsresult添加辅助器1.坐标轴辅助器AxesHelper核心代码完整代码2.箭头辅助器ArrowHelper核心代码完整代码3.相机视锥体辅助器CameraHelper核心代码完整代码Three…...

零基础小白如何入门网络安全?

我经常会看到这一类的问题: 学习XXX知识没效果; 学习XXX技能没方向; 学习XXX没办法入门; 给大家一个忠告,如果你完全没有基础的话,前期最好不要盲目去找资料学习,因为大部分人把资料收集好之…...

【前缀和】

前缀和前缀和子矩阵的和结语前缀和 输入一个长度为 n的整数序列。 接下来再输入 m 个询问,每个询问输入一对 l,r 对于每个询问,输出原序列中从第 l 个数到第 r个数的和。 输入格式第一行包含两个整数 n和 m 第二行包含 n个整数,表示整数…...

ChatGPT可以做WebRTC音视频质量性能优化,惊艳到我了

摘要 随着GPT-4的发布,AI的风越吹越旺。GPT-4可以回答问题,可以写作,甚至可以基于一张草图生成html代码搭建一个网站。即构社区的一位开发者倪同学就基于目前在研究的WebRTC QOS技术点对GPT-3.5跟GPT-4进行一场实验,ChatGPT会取代…...

MySQL数据库实现主从同步

安装MySQL数据库8.0.32 前言 今天来学习数据库主从同步的原理及过程,数据库主要是用来存储WEB数据,在企业当中是极为重要的,下面一起来看下。 1.1 数据库做主从的目的 MySQL主从复制在中小企业,大型企业中广泛使用&#xff0c…...

go语言gin框架学习

让框架去做http解包封包等,让我们的精力用在应用层开发 MVC模式 M: model,操作数据库gorm view 视图 处理模板页面 contoller 控制器 路由 逻辑函数 解决gin相关代码飘红的问题 记得启用gomodule go env -w GO111MODULEon然后到相应目录下执行 go mod i…...

Java奠基】Java经典案例讲解

目录 卖飞机票 找质数 开发验证码 数组元素的复制 评委打分 数字加密 数字解密 抢红包 模拟双色球 二维数组 卖飞机票 需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格: 旺季&…...

新闻文本分类任务:使用Transformer实现

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

如何在 Vue 中使用 防抖 和 节流

大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库 https://mp.weixin.qq.com/s?__bizMzU5NzA0NzQyNg&mid2247485824&idx3&sn70cd26a7c0c683de64802f6cb9835003&scene21#wech…...

美国Linux服务器系统增强安全的配置

美国Linux服务器系统可能出现的安全漏洞中,更多是由于不当的系统配置所造成的,用户们可以通过一些适当的安全配置来防止问题的发生。美国Linux服务器系统上运行的服务越多,不当配置的概率也就越高,那么系统出现安全问题的可能性也…...

【史上最全面esp32教程】oled显示篇

文章目录前言介绍及库下载基础使用引脚的连接使用函数总结前言 本节课主要讲的是OLED的基础使用。使用的oled为0.96寸,128*64。 大家的其他型号也是可以用的。 提示:以下是本篇文章正文内容,下面案例可供参考 介绍及库下载 oled的简介&…...

第十四届蓝桥杯三月真题刷题训练——第 21 天

目录 第 1 题:灭鼠先锋 问题描述 运行限制 代码: 思路: 第 2 题:小蓝与钥匙 问题描述 答案提交 运行限制 代码: 思路 : 第 3 题:李白打酒加强版 第 4 题:机房 第 1 题&#xff1…...

css绘制一个Pinia小菠萝

效果如下: pinia小菠萝分为头部和身体,头部三片叶子,菠萝为身体 头部 先绘制头部的盒子,将三片叶子至于头部盒子中 先绘制中间的叶子,利用border-radius实现叶子的效果,可以借助工具来快速实现圆角的预想…...

OpenCV入门(二十)快速学会OpenCV 19 对象测量

OpenCV入门(二十)快速学会OpenCV 19 对象测量1.对象测量2.多边形拟合3.计算对象中心作者:Xiou 1.对象测量 opencv 中对象测量包括: 如面积,周长,质心,边界框等。 弧长与面积测量; …...

TCP和UDP协议的区别?

是否面向连接: TCP 是面向连接的传输,UDP 是面向无连接的传输。 是否是可靠传输:TCP是可靠的传输服务,在传递数据之前,会有三次握手来建立连接;在数据传递时,有确认、窗口、重传、拥塞控制机制…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...

window 显示驱动开发-如何查询视频处理功能(三)

​D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针&#xff0c;该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...