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

news2024/10/7 4:30:05

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)点云滤波相关工作

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】iptables防火墙

文章目录 一、Linux防火墙基础1.Linux防火墙概术2.netfilter/iptables3.四表五链4.规则链之间的匹配顺序 二、iptables 安装1.常用的控制类型2.常用的管理选项 三、示例演示1.添加新的规则2.查看规则列表3.删除规则4.清空规则 四、规则的匹配1.通用匹配2.隐含匹配3.显式匹配 一…

浅谈安科瑞无线测温技术在大功率整流器上的应用

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:随着整流器运行电流的增加 ,运行温度成为影响整 流器安全运行的主要因素 。针对目前大功率整流器运行温度通过出口水温表和纽扣继电器来监测 ,运行人员不能及时、准确地掌握整…

【测试开发】第四节.测试开发(测试分类)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:Java测试开发 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录 前…

程序员有哪些绝对不能踩的坑?

本文概要 程序员编写高质量、可维护、安全且高效的代码,通常需要大量研究和经验。但也需要避免许多技术陷阱。一起来聊聊程序员有哪些绝对不能踩的坑吧! 🌟🌟🌟个人简介🌟🌟🌟 ☀️…

Spring Boot拦截器与过滤器的区别

Spring Boot拦截器与过滤器的区别 在使用Spring Boot开发Web应用程序时,您可能需要在处理请求之前或之后执行某些操作。这些操作可以包括身份验证、日志记录、性能监测等。在这种情况下,您可以使用两种不同的机制:拦截器和过滤器。本文将介绍…

Spring Boot如何实现缓存的自动刷新

Spring Boot如何实现缓存的自动刷新 在Web应用程序中,缓存是提高性能的重要手段之一。在Spring Boot应用程序中,我们可以使用Spring Cache来实现缓存功能。然而,当缓存的数据发生变化时,我们可能需要手动刷新缓存,这可…

C语言---分支和循环语句

1、什么是语句 C语言语句可以分为五类: 表达式语句函数调用语句控制语句复合语句空语句 C语言有九种控制语句 可以分成一下三类: 条件判断语句也叫分支语句:if语句,switch语句;循环执行语句:do while语…

基于html+css的图展示100

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

安卓手机使用Termux搭建Hexo个人博客网站【内网穿透公网访问】

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 转载自cpolar极点云的文章:安卓手机使用Termux搭建Hexo个人博客网站【内网穿透公网访问】 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#…

Ansible基础1——介绍安装、清单文件、配置文件、临时命令参数、常用功能模块

文章目录 一、发展起源1.1 自动化工具对比1.2 Ansible介绍 二、安装流程2.1 安装清单2.2 系统初始化2.3 安装验证 三、清单文件3.1 默认静态清单3.2 自定义静态清单 四、配置文件4.1 优先级4.2 配置参数4.2.1 [defaults]配置4.2.2 [privilege_escalation]配置4.2.3 其他配置 4.…

C++ new delete

可执行程序(进程) 的虚拟地址空间: 内核: 操作系统 栈区:函数的形参,非静态的局部变量,函数现场保护数据等等,栈是向下增长的。 共享库的内存映射区域:用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通…

四足机器人A1目标跟踪

四足机器人A1目标跟踪 前期准备工作1.安装TeamViewer2.将四足机器人所有线连接好3.将四足机器人调至运动模式 运行流程1.开机阶段2.运行阶段 效果展示代码配置 前期准备工作 1.安装TeamViewer 由于外接屏幕损坏,故四足机器人内部配置了TeamViewer,因此…

VM——编写脚本,TCP发送16进制字符串

1、参考: (1)​​​(246条消息) TCP中发送接收16进制数(16进制字符串与字节数组之间的转换)_tcp发送16进制字符串_start_continue的博客-CSDN博客 (2)(246条消息) C#byte String转换_c# byte转…

【网络编程二】UDP与TCP协议你学会了吗~

目录 🌟需要知道 1、什么是网络编程? 2、怎么进行网络编程? 3、TCP与UDP的区别? (面试题) 🌟一、UDP 🌈1、UDP数据报套接字编程 🌈2、实现一个简单的UDP回显服务…

java服务端如何接入WebSocket?

日常工作中,我们都是使用http请求,来进行前后交互,那么我们也会有使用websocket来进行前后交互的时候,那么它俩有什么区别呢? http和websocket区别 WebSocket是双向通信协议,模拟Socket协议,可…

商场内如何导航?有没有在商场用的导航?

商场内如何导航?大家可能都有这种感觉,在商场里逛街时,好像经常容易迷路,无论是找出口还是找电梯,总会把自己搞得晕头转向,“每次逛完商场都要给自己预留半小时找车子,也是醉了。”“在商场迷路…

XR云新未来 | 弹性算力赋能可交互、沉浸式商业实践

据XR市场研究报告显示,全球XR市场规模不断扩大,于2020年已超过100亿美元,预计到2025年规模将达到数百亿美元。XR技术广泛应用于娱乐、教育和企业领域,随着技术的进步,高分辨率显示、实时渲染和眼动追踪等创新技术的应用…

Ubantu docker学习笔记(十一)k8s基本操作

文章目录 一、K8s介绍二、容器编排2.1 部署应用2.2 了解应用2.3 公开暴露应用2.4 扩缩应用2.4 滚动更新 三、Kubernetes 对象 相信大家在前面的安装过程中,我们的k8s已经完成了一个超级具体的安装【是不是还是有点难度】,今天我们就在前面已经安装好的基…

消防安全知识答题活动小程序v4.3.0

消防安全知识答题活动小程序v4.3.0 v4.3.0 1)实现答题倒计时功能 如果让你给一款答题小程序产品制定一个技术方案,比如实现答题倒计时功能,你会怎么做。 通常,我们对于倒计时的普遍认知是设置一个定时器去实现的,在…

0基础学习VR全景平台篇第32章:场景功能-嵌入文字

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,场景管理模块-嵌入功能文字模块! 功能位置示意 一、本功能将用在哪里? 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四…