论文阅读:C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range SLAM

前言

论文全程为C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range Simultaneous Localization and Mapping,是发表在MDPI drones(二区,IF=4.8)上的一篇论文。这篇文章使用单目相机、惯性测量单元( IMU )和UWB设备作为每个智能体上的机载传感器,以构建准确高效的集中式协同SLAM系统,并设计了一个全局优化算法,利用视觉位置技术检测到的跨智能体地图匹配信息,以及智能体到智能体的距离信息来优化所有参与者的运动参数,并将局部地图合并成一个全局地图。

一、问题背景

未知静态UWB锚点虽然去除了位置校准过程的要求,但仍然需要进行分布式处理;在大规模应用中,由于UWB设备的有效作用范围有限,也需要不同区域的锚点。UWB信号也会受到干扰。这些因素限制了UWB辅助协同SLAM系统的应用。

与基于UWB的系统相比,基于视觉的协同SLAM需要更少的基础设施建设,并且不受测距测量块的限制。然而,智能体之间需要有共同的视图区域并具有条件不变的位置识别能力才能进行协作,这限制了任务执行的效率。共享的视觉地图也给多智能体系统带来了巨大的通信负担

虽然基于UWB和基于视觉的协同SLAM各有优劣,但研究者们已经提出了几种同时使用UWB和视觉来相互增强[ 4、5]的系统。然而,这些系统主要侧重于利用机载视觉系统来估计未标定的静态UWB锚点的运动和位置,严重依赖锚点进行协作

二、主要假设

1、多无人机集中式协同架构的基本假设

2、VIO、UWB的应用假设条件

三、理论流程

本文提出了一种新颖的集中式协同视觉/惯性/测距SLAM系统( C2VIR-SLAM ),仅依靠机载视觉、惯性和UWB测距设备即可实现精确高效的集中式协同SLAM。对于每个智能体,采用视觉-惯性里程计( VIO )估计运动参数并重建局部地图。同时,VIO估计的参数、本地地图和代理到代理的UWB距离信息被发布到中央服务器。然后服务器对运动参数进行优化,将局部地图合并为全局地图。

提出的C2VIR - SLAM包括四个主要部分:( i )单智能体视觉惯性里程计,它估计智能体的运动并重建被探索局部区域的地图;( ii )智能体之间的距离测量,使用机载UWB设备;( iii )位置识别,它检测所有智能体共享的地图中的回环,并估计参与者之间的相对运动;( iv )协作定位与地图构建,它优化所有智能体的运动参数并构建全局地图。

1、单机器人视觉惯性里程计

(使用VINS-mono)

2、位姿图协同定位

在中心服务器中执行协同定位,并将其建模为位姿图优化问题(结合板载UWB和视觉):

第i个智能体的t个关键帧数据,包含位置向量和四元数。

上述问题包含三个待优化残差。序列残差是指每个智能体内部VIO的相对运动约束。地图匹配残差描述了来自视觉位置识别组件的重定位约束。智能体间测距约束的UWB测距残差。

(1)来自里程计的序列约束

序列残差代表一个智能体的两个连续关键帧之间的变换:

(2)视觉位置识别的地图匹配约束

具体来说,对于一个新的查询关键帧,我们使用DBOW2外观相似度[ 20 ]将其与所有现有的关键帧进行比较。一旦相似度超过一定阈值,则尝试检测两个相似帧之间的循环。查询关键帧上的3D特征点与候选关键帧上的2D特征进行匹配,其中的特征被描述为BRIEF描述符[ 21 ]。然后,使用RANSAC算法通过求解透视N点( Perspective-N-Points,PNP )问题来评估3D - 2D连接[ 22 ]。一旦内点数量超过一定阈值,则被认为是有效的地图匹配约束。通过求解PNP问题,可以得到两个匹配关键帧之间对应的相对位姿,地图匹配残差为:

通过比较( 5 )和( 7 ),我们可以注意到,当顺序约束使用智能体内部的VIO状态时,地图匹配残差可以使用来自不同智能体的运动信息。现有的一些研究表明,将地图匹配残差引入到协同SLAM系统中,可以极大地提高[ 6、7 ]的精度;然而,这要求协作参与者具有共同的浏览地点和识别重叠的视图,这降低了效率,并给视觉识别组件带来了挑战。

(3)板载UWB的相对范围约束

当地图匹配残差需要共同访问的地点时,UWB可以直接测量两个设备之间的距离信息。在这里我们提出将UWB设备刚性地安装在协作代理上,这去除了锚点分布过程,更适合在未探索环境中的应用。

UWB测距模型:

在我们的系统中,UWB设备与代理一起安装在载体上。因此,得到的测距为两个对应智能体之间的距离;该测距信息可以作为观测量,通过定义残差项为,对里程计测量的运动参数进行修正

需要注意的是,位姿图优化可能是耗时的,只有在( 4 )式中加入地图匹配残差或UWB测距残差项时才有效。为了提高效率,我们在一个恒定的时间间隔内检查是否存在有效的地图匹配和UWB测量值,只有当在该时间间隔内存在地图匹配残差或UWB测距残差时才进行优化。

3、结合全局光束法平差的地图精化

计算协作代理共享的所有关键帧中所有特征的重投影,并优化状态χ和特征的3D位置,以最小化整体重投影误差。global bundle adjustment (GBA)的目标函数可以表示为:

重投影因子遍历所有关键帧和所有地图点。为了提高效率,GBA仅在有效的位姿图优化后执行。

四、实验方案

1、使用公开的EuRoC数据集(UWB数据模拟得到)

我们使用两个和三个智能体设置不同的序列组合对所提出的系统进行了测试,并将结果与CVI - SLAM [ 6 ]进行了比较,CVI - SLAM是一种最先进的使用视觉和惯性传感器的集中式协作SLAM系统。

2、使用自建的多无人机数据集Testing Zone数据集

Test Zone数据集包含两个实验,每个实验包含一个双智能体飞行。在国家智能网联汽车(中国长沙)试验区,利用两架DJI铸字用的铜字模600Pro无人机在300 m × 200 m的室外区域同时飞行采集数据。

五、创新总结

这篇文章从相比于VIR-SLAM,深挖了协同估计中单独使用UWB的不足(信号直线传播),将无人机群估计的知识与UWB-VIO相结合,总体属于组合创新,但也解决了实际问题。

  • 我们提出在所提出的C2VIR - SLAM系统中使用机载UWB设备,而不是校准或未校准的静态UWB锚点,这就消除了先验锚点分布过程的要求,并随着设备随智能体移动而扩大了UWB的有效范围;
  • 我们设计了一个能够单独或组合使用视觉或机载UWB的系统来进行协作定位和建图;
  • 我们在不同的数据集和不同的系统设置中进行了系统的实验,并全面分析了单独使用视觉、单独使用UWB以及它们的组合在协作中带来的性能改进。

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

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

相关文章

Node——npm包管理器的使用

Node.js使用npm对包进行管理,其全称为Node Package Manager,开发人员可以使用它安装、更新或者卸载Node.js的模块 1、npm包管理器基础 1.1、npm概述 npm是Node.js的标准软件包管理器,其在2020年3月17日被GitHub收购,而且保证永…

1.9 字符数组

1.9 字符数组 一、字符数组概述二、练习 一、字符数组概述 所谓字符数组&#xff0c;就是char类型的数组&#xff0c;比如 char a[]&#xff0c;是C语言中最常用的数组类型&#xff0c;先看一个程序 #include <stdio.h> #define MAXLINE 1000 //最大行长度限制 int get…

软件介绍02- flameshot截图软件(linux系统可用)

1 软件介绍 在Windows和mac平台一直都使用着snipaste截图&#xff0c;非常好用&#xff0c;又能够钉图。遗憾是并没有开发linux版本&#xff0c;真不知道为什么。 好在终于找到一款截图软件&#xff0c;flameshot截图软件&#xff0c;可以平替snipaste。 下载网址&#xff1a;…

什么是好的FPGA编码风格?(3)--尽量不要使用锁存器Latch

前言 在FPGA设计中&#xff0c;几乎没人会主动使用锁存器Latch&#xff0c;但有时候不知不觉中你的设计莫名其妙地就生成了一堆Latch&#xff0c;而这些Latch可能会给你带来巨大的麻烦。 什么是锁存器Latch&#xff1f; Latch&#xff0c;锁存器&#xff0c;一种可以存储电路…

【Linux】进程间通信

进程间通信 1. 进程间通信介绍1.1 进程间通信目的1.2 进程间通信发展1.3 进程间通信分类1.4 进程间通信的本质理解 2. 管道3. 匿名管道3.1 pipe()函数3.2 站在文件描述符角度-深度理解管道3.3 站在内核角度-管道本质3.4 匿名管道使用步骤3.4 管道读写规则3.5 管道的读与写的五种…

复数的乘幂与方根

1、乘积与商 设 几何意义&#xff1a; &#xff1a;逆时针旋转一个角度&#xff0c;并伸长倍 &#xff1a;顺时针旋转一个角度&#xff0c;并伸长倍 *特别&#xff1a;不存在 :对实行了一次旋转变换&#xff0c;且长度不变&#xff0c;旋转角为 例题&#xff1a; 2、幂与…

windows下docker环境搭建与运行实战

背景 学习docker使用&#xff0c;需要环境&#xff0c;今天主要的目标是在windows环境下安装docker环境。 为什么要这么搞&#xff0c;主要是企业内部服务器&#xff0c;都是跟公网隔离的&#xff0c;没有访问公网权限&#xff0c;所以镜像什么的&#xff0c;从公网拉取完全没…

MySQL的undo log 与MVCC

文章目录 概要一、undo日志1.undo日志的作用2.undo日志的格式3. 事务id&#xff08;trx_id&#xff09; 二、MVCC1.版本链2.ReadView3.REPEATABLE READ —— 在第一次读取数据时生成一个ReadView4.快照读与当前读 小结 概要 Undo Log&#xff1a;数据库事务开始之前&#xff0…

qt-C++笔记之不使用ui文件纯C++构建时控件在布局管理器作用下的默认位置和大小实践

qt-C笔记之不使用ui文件纯C构建时控件在布局管理器作用下的默认位置和大小实践 code review! 文章目录 qt-C笔记之不使用ui文件纯C构建时控件在布局管理器作用下的默认位置和大小实践1.ChatGPT解释2.ChatGPT——resize()和move()详解3.默认大小和位置——示例运行一4.默认大小…

31 - MySQL调优之SQL语句:如何写出高性能SQL语句?

从今天开始&#xff0c;我将带你一起学习 MySQL 的性能调优。MySQL 数据库是互联网公司使用最为频繁的数据库之一&#xff0c;不仅仅因为它开源免费&#xff0c;MySQL 卓越的性能、稳定的服务以及活跃的社区都成就了它的核心竞争力。 我们知道&#xff0c;应用服务与数据库的交…

3D建模对制造企业的价值

除非你在过去几年一直躲在岩石下,否则你可能听说过“3D 建模”和“3D 渲染”这些术语。 但为什么这项技术如此重要,尤其是对于产品制造公司而言? 简而言之,它减少了项目时间和成本。 这为制造商提供了更多的设计试验空间。 未能利用 3D 建模技术的公司很快就会落后于竞争对…

MYSQL基础之【正则表达式,事务处理】

文章目录 前言MySQL 正则表达式MySQL 事务事务控制语句事务处理方法PHP中使用事务实例 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不…

P18 C++ 继承

目录 前言 01 不使用继承会让你多打很多无用的代码 02 继承 最后的话 前言 本期我们学习 C 面向对象编程中的继承。 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。这样做&#…

BC77 简单计算器(牛客)

#include <stdio.h> int main() {double a, b, d;//用来接收浮点数char c;//用来接受符号scanf("%lf %c %lf", &a, &c, &b);if (c || c - || c * || c /)//判断输入的运算符号不包括在&#xff08;、-、*、/&#xff09;范围内{switch (c)//根…

从0开始学习JavaScript--构建强大的JavaScript图片库

在现代Web开发中&#xff0c;图像是不可或缺的一部分&#xff0c;而构建一个强大的JavaScript图片库能够有效地管理、展示和操作图像&#xff0c;为用户提供更丰富的视觉体验。本文将深入探讨构建JavaScript图片库的实用技巧&#xff0c;并通过丰富的示例代码演示如何实现各种功…

因子分析例题(多元统计分析期末复习)

例一 设某客观现象可用 X {X} X( X 1 {X_1} X1​&#xff0c; X 2 {X_2} X2​&#xff0c; X 3 {X_3} X3​)’ 来描述&#xff0c;在因子分析时&#xff0c;从约相关阵出发计算特征值为 λ 1 {λ_1} λ1​1.754&#xff0c; λ 2 {λ_2} λ2​1&#xff0c; λ 3 {λ_3} λ3​…

transformers pipeline出现ConnectionResetError的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

(C++)string类的模拟实现

愿所有美好如期而遇 前言 我们模拟实现string类不是为了去实现他&#xff0c;而是为了了解他内部成员函数的一些运行原理和时间复杂度&#xff0c;在将来我们使用时能够合理地去使用他们。 为了避免我们模拟实现的string类与全局上的string类冲突(string类也在std命名空间中)&…

机器学习【04重要】pycharm中关闭jupyter服务器

直接关掉pycharm 不行 点红方块关闭 不行 我们曲线进行 我们的方法成功截图 实现全程不在服务器上操作 首先点击下图 点击退出&#xff0c;即可 查看端口

Java 注解在 Android 中的使用场景

Java 元注解有 5 种&#xff0c;常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别&#xff0c;有三种&#xff1a; RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中&#xff0c;并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…