关于机器人状态估计(15)-VIO与VSLAM精度答疑、融合前端、主流深度相机说明与近期工程汇总

VIOBOT种子用户有了一定的数量,日常大家也会进行交流,整理总结一下近期的交流与答疑。

VIO-SLAM(作为三维SLAM,相对于Lidar-SLAM和LIO-SLAM)在工程上落地的长期障碍,不仅在算法精度本身,还有相对严重的鲁棒性问题,尺度问题,世界观问题和沉重的开销/成本问题。

这些我在过往的文章中已经提过了多次,我们组的核心工作也是一步步去解决这些通用性问题,工作已经持续了21个月,绝大部分问题也close掉了;剩下的少量遗留问题是极难解决的部分还在持续努力中。这些工程问题的本质是一些解决起来非常麻烦,看起来难以通用,同时在不同场景中还能跳出各种不同幺蛾子的状态估计问题。它们严重和直接地影响了VIO的工程化。

1.首先讲一下精度问题:

(1)大部分paper的RMSE和ATE指标是衡量精度的重要标准,但是大家要牢记,很多时候论文的指标是建立在理想状态上(如几个主要的数据集,其传感器指标和调校的精度都是非常严谨的),如果是建立在传感器组实际运行上,这个传感器组的标定和优化往往也是由数位强悍的科研人员完成,其组合本身的精度和指标都非常高。

(2)精度并不是玄学,综合精度取决于一系列的东西(而并不仅仅是优化方法):包括传感器组合类型,快门类型,内参,外参标定,imu的bias,传感器之间的对时,单目还是双目,前端所使用的方法,优化的具体类型(比如大家通常的理解都是BA会比KF强,实际也未必,并不是说你花了更多的算力开销,就一定会取得更好的优化结果,比如在算力有限的时候,KF更优),尤其是运行的场景(室内还是室外?光度的变化是比较稳定还是更为激烈)。任何的非线性优化都会有长期的误差积累,在长期重复运行中回环会变得尤其重要(因此一般没有回环,不能算是一个完整的SLAM,只是一个里程计)。长期运行在三旋转和三平移的误差控制当中,旋转的控制会更加的重要,因为轻微的旋转误差会带来更大的偏移量。其实关于这个部分的详解,在过去的文章中都大致提过了,主体内容太长这边就只概要了。

2.其次讲一下融合前端:

从VINS-FUSION开始,大家越来越重视在VIO系统中多传感器间融合融态的重要性,VIO本身就是相机与IMU的融合。GNSS/RTK也是非常常见的融合系统(工程中部分情况下松耦合做先验或相对信标,也不排除做得很好的紧耦合如GVINS)。

那VIO前端呢? 其实前端未来的主流就是融合前端(但得建立在足够的开销控制能力上)。2016年的SVO以及后续的SVO2是典型的融合前端,半直接法+特征点法。紫川目前的设计是直接法+ORB特征点法,徐浩博士使用Super point+LK光流。这几个方法里SVO很令人佩服,一个是古早(虽然开源得比较晚),第二个是考虑得全面(包括开销),缺点就是开源中缺失了真实传感器优化部分,还有世界观相对稀疏。

Super point的问题在于相当重(VGA分辨率在Titan X卡上70帧),导致在端侧做的话点数少帧率低,还有在开源框架下调试和优化麻烦一些。在徐浩博士的分享和交流后,我总隐约有个感觉,未来的主流方法也许是直接法+Superpoint,不分主辅(回环以superpoint来做)。从科学和工程的逻辑来说,这是一种很好的组合。

大家通过细心的观察,也会发现,融合前端的组合往往都是互补的,ORB和Superpoint强于处理明显的特征点,ORB增加质心与描述子,SuperPoint虽重但非常鲁棒可适应不同的光度条件。而LK光流和直接法都更擅长解决图像梯度本身并形成更连续的物体轮廓。

VIOBOT目前如果仅仅作为一个里程计来使用,从三相性及世界观来说可以说相当完美,除了一些极端光度变化/或极低照度场景。作为里程计使用的话可以通过一系列方式给其进行绝对/相对信标的输入,如RTK/轮速计以及其他定位装置等。

3.主流深度相机说明:

主流深度相机有2类:

(1)主动投射积分类:i-TOF/结构光

(2)双目视差运算类:双目深度相机

两类都有一个优点:稠密

都有一个很大的缺点:稠密点云开销极重,稠密SLAM以及点云处理在端侧可用性很低,高度依赖PCL/PCA/ICP,开销沉重。降采样本身又会失去稠密本身的意义,比较适配于避障和尾段作业的修偏,不适合作为完整SLAM前端使用。

第一类技术含量较高,具体原理就不多说了资料很多,多了2个缺点:距离很短,室外受干扰很多,还需要ISP的强力支持(积分和滤波开销都不小)

第二类比较暴力,标准的视差运算(重复且简单,调整双目基线即可),可以用GPU/NPU强算,目前原厂也有不少ASIC上的支撑(目前如Movidus/海思DV500等),明年会更多。同时第二类除核心缺点外,还有一个缺点:孔洞效应。当然目前VIOBOT的点云也同样存在这个缺点,这些就是工程和科学结合到一定程度后难以避免的一些原理性问题了。

另外第二类目前有很少数优秀厂家结合了可见光部分的纹理特征进行实时同步,通过目标检测进行双光融合,这类效果部分解决了孔洞效应问题,但实现难度较大,同时仍然存在无法完整端侧SLAM的问题。

4.VIOBOT近期工程汇总:

(1)进一步增强通用性

(2)完善全局一致性模块与先验建图

未进行全局一致性收敛的运行/点云优化状态(全程约600米户外运行):

完整的SLAM系统,最终都需要此模块,基于回环地图,规整轨迹与所有半稠密点云,整体完成如下所示的半稠密综合点云状态效果:

在这种基础框架上接入底图(如Googlemap,无人机航拍图),或再进一步进行线性插值,完整的先验地图就进入了可用状态。加入路径规划与动态避障,便成为了完整的自感知定位建图系统

(3)半稠密点云的避障测试

工作4其实与2/3紧密相关,传统特征点法点云,作为机器语言难以直接使用的核心原因就在于有点无边,往往需要大量的补全工作-如MESH/LIMAP/CANNY等,但这类补全工作往往都开销甚高,需要离线运行。VIOBOT目前融合前端的最大优势就在于边廓清晰,从本质上相对稠密深度相机其实只是稀疏化了。

(4)点云滤波相关工作

这块工作即难且烦,以后真正实际做好了再详细分解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/25974.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis25】Redis进阶:分布式锁实现

Redis进阶:分布式锁实现 锁这个概念,不知道大家掌握的怎么样。我是先通过 Java ,知道在编程语言中是如何使用锁的。一般 Java 的例子会是操作一个相同的文件,但其实我们知道,不管是文件,还是数据库中的一条…

MYSQL高级之关联查询优化

建表 CREATE TABLE IF NOT EXISTS class ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, card INT(10) UNSIGNED NOT NULL, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS book ( bookid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, card INT(10) UNSIGNED NOT NULL, PRI…

ATECLOUD云测试平台新能源电机测试系统:高效、可扩展的测试利器

随着全球对环境保护的日益重视,新能源的发展越来越受到关注。电动汽车作为新能源领域的重要组成部分,其性能和质量对于消费者来说至关重要。为了确保电动汽车的性能和质量,测试系统平台解决方案变得越来越重要。本文将介绍一种基于ATECLOUD智…

基于SSM的网辩平台的设计与实现

摘 要 线上作为当前信息的重要传播形式之一,线上辩论系统具有显著的方便性,是人类快捷了解辩论信息、资讯等相关途径。但在新时期特殊背景下,随着网辩的进一步优化,辩论赛结合网络平台融合创新强度也随之增强。本文就网辩平台进…

Linux操作系统相关介绍

目录 一、认识Linux 二、Linux特点总结 三、Linux版本 (1)Linux内核版 (2)Linux发行版 一、认识Linux • 1991年,芬兰的一名大学生Linus Torvalds开发了linux内核 • Linux是一种开放源代码的、自由的、免费的类…

【Linux】线程互斥

文章目录 1. 背景概念多个线程对全局变量做-- 操作 2. 证明全局变量做修改时,在多线程并发访问会出问题3. 锁的使用pthread_mutex_initpthread_metux_destroypthread_mutex_lock 与 pthread_mutex_unlock具体操作实现设置为全局锁 设置为局部锁 4. 互斥锁细节问题5.…

DevOps该怎么做?

年初在家待了一段时间看了两本书收获还是挺多的. 这些年一直忙于项目, 经历了软件项目的每个阶段, 多多少少知道每个阶段是个什么, 会做哪些事情浮于表面, 没有深入去思考每个阶段背后的理论基础, 最佳实践和落地工具. 某天leader说你书看完了, 只有笔记没有总结, 你就写个总结…

ifconfig工具与驱动交互解析(ioctl)

Linux ifconfig(network interfaces configuring) Linux ifconfig命令用于显示或设置网络设备。ifconfig可设置网络设备的状态,或是显示目前的设置。同netstat一样,ifconfig源码也位于net-tools中。源码位于net-tools工具包中&am…

【LeetCode】HOT 100(2)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

软件测试测试环境搭建很难?一天学会这份测试环境搭建教程

如何搭建测试环境?这既是一道高频面试题,又是困扰很多小伙伴的难题。因为你在网上找到的大多数教程,乃至在一些培训机构的课程,都不会有详细的说明。 你能找到的大多数项目,是在本机电脑环境搭建环境,或是…

【单目标优化算法】孔雀优化算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

MySQL — 主从复制介绍

文章目录 主从复制一、概述二、原理三、 搭建主从复制结构3.1 服务器准备3.2 主库配置3.3 从库配置 主从复制 一、概述 ​ 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做)…

1. TensorRT量化的定义及意义

前言 手写AI推出的全新TensorRT模型量化课程,链接:TensorRT下的模型量化。 课程大纲如下: 1. 量化的定义及意义 1.1 什么是量化? 定义 量化(Quantization)是指将高精度浮点数(如float32)表示为低精度整数(如int8)的过程&…

如何运用R语言进行Meta分析在【文献计量分析、贝叶斯、机器学习等】多技术的融合

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

华为OD机试真题 Java 实现【高矮个子排队】【2023Q2 100分】,附详细解题思路

一、题目描述 现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高…

【配电网重构】基于改进二进制粒子群算法的配电网重构研究(Matlab代码实现

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

批量剪辑视频工具源码开发搭建分享

搭建步骤 1. 首先需要根据自身产品确定视频类型及需要实现的视频效果 2. 根据预期视频效果选择视频上传模式,并将视频素材进行上传 3. 添加音频、字幕,标题等与素材进行组合。 4. 设置投放计划,包括:视频标题、视频话题等 5.…

dom阶段实战内容

window定时器方法 ◼ 目前有两种方式可以实现:  setTimeout 允许我们将函数推迟到一段时间间隔之后再执行。  setInterval 允许我们重复运行一个函数,从一段时间间隔之后开始运行,之后以该时间间隔连续重复运行该函数。 ◼ 并且通常情况…

周赛347(模拟、思维题、动态规划+优化)

文章目录 周赛347[2710. 移除字符串中的尾随零](https://leetcode.cn/problems/remove-trailing-zeros-from-a-string/)模拟 [2711. 对角线上不同值的数量差](https://leetcode.cn/problems/difference-of-number-of-distinct-values-on-diagonals/)模拟 [2712. 使所有字符相等…

什么是分布式事务?

什么是分布式事务? 分布式对应的是单体架构,互联网早起单体架构是非常流行的,好像是一个家族企业,大家在一个家里劳作,单体架构如下图: 但是随着业务的复杂度提高,大家族人手不够,…