SVO、vinsmono、 OKVIS系统比较
几个经典视觉slam系统的比较
SVO
- 高翔链接:https://www.zhihu.com/question/39904950/answer/138644975
- 处理的各个线程:
tracking部分-frame to frame 、frame to map
- 金字塔的处理。这一步估计是从金字塔的顶层开始,把上一层的结果作为下一层估计的初始值,最后迭代到底层的。顶层的分辨率最小,所以这是一个由粗到精的过程(Coarse-to-Fine),使得在运动较大时也能有较好的结果
- SVO自己实现了高斯——牛顿法的迭代下降,并且比较取巧地使用了一种反向的求导方式:即雅可比在k-1帧图像上进行估计,而不在k帧上估计。这样做法的好处是在迭代过程中只需计算一次雅可比,其余部分只需更新残差即可(即G-N等式右侧的)。这能够节省一定程度的计算量。另一个好处是,我们能够保证k-1帧的像素具有梯度,但没法保证在k帧上的投影也具有梯度,所以这样做至少能保证像素点的梯度是明显的。
- 根据更精确的投影位置,进行位姿与地图点的优化。这一步类似于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ÿ…...
【艾特淘】抖音小店物流体验分提升的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主从复制在中小企业,大型企业中广泛使用,…...
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 题࿱…...
css绘制一个Pinia小菠萝
效果如下: pinia小菠萝分为头部和身体,头部三片叶子,菠萝为身体 头部 先绘制头部的盒子,将三片叶子至于头部盒子中 先绘制中间的叶子,利用border-radius实现叶子的效果,可以借助工具来快速实现圆角的预想…...
OpenCV入门(二十)快速学会OpenCV 19 对象测量
OpenCV入门(二十)快速学会OpenCV 19 对象测量1.对象测量2.多边形拟合3.计算对象中心作者:Xiou 1.对象测量 opencv 中对象测量包括: 如面积,周长,质心,边界框等。 弧长与面积测量; …...
TCP和UDP协议的区别?
是否面向连接: TCP 是面向连接的传输,UDP 是面向无连接的传输。 是否是可靠传输:TCP是可靠的传输服务,在传递数据之前,会有三次握手来建立连接;在数据传递时,有确认、窗口、重传、拥塞控制机制…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...
