2021-COVINS: Visual-Inertial SLAM for Centralized Collaboration

COVINS: Visual-Inertial SLAM for Centralized Collaboration

通过DISCO-slam了解了协同SLAM优化的一种方式,但是对具体的协同后端优化并没有产生直观的理解
covins 一个集中式架构
消除了对外部基础设施或预先构建的地图的需要,以实现多代理应用。—可以同时处理数据-大场景
该框架可以在PC上本地运行,也可以在远程云服务器上运行,此外,该框架还得到了冗余检测方案的支持,该方案被证明能够显著减少估计中KF的数量,同时保持类似的准确性水平。—应用AR
可以关注一下这种冗余检测。
问题:看过的论文中都提到了SLAM中的multi-session capabilities,多段能力,但是并没有很理解是什么意思–重复利用之间建立好的地图。
我觉得这么多机器人在集中式架构上,必须有非常强劲的服务器才行。

摘要

本论文体现了多协同体(>10)大场景SLAM,目前看过的论文基本上都是3个(重点:它是如何突破数量上的限制–关键技术–通信问题-数据管理),各单体只是分享地图信息到服务器上么,服务器—位置重识别、全局优化、冗余数据移除

引言

应用不仅仅是机器人,还有多用户共享的AR/VR
再CVI-SLAM的基础上进行的整个系统的改进。
集中式协同SLAM的硬伤——应用距离、大数量机器人的可扩展性、数据一致性检测、数据重复统计
同时我认为-单体SLAM面临的一些问题协同SLAM仍然面临-联合标定–运动畸变–动态场景–但是这些问题是不是协同SLAM需要解决的关键性问题呢?

有意思的相关研究

《Distributed Mapping with Privacy and Communication Constraints: Lightweight Algorithms and Object-based Models》,这个系统有预先训练的对象?基于对象/目标/物体的建图?

代理的数量不需要先验已知—不需要预先知道无人机的数量

准备–模型

可能是因为没读过系统的前作吧,对其中数学符号的定义有些不不熟悉
下面是IMU 加速度和角度的模型—从世界坐标系到载体坐标系
上尖表示真值
在这里插入图片描述
下面就是系统的状态
在这里插入图片描述
前四项很明显是关键帧k的参数量:第k关键帧处,IMU系到世界系的旋转;IMU系到世界系得平移;在世界系下的线性速度;偏差。
第五项是地标i在世界系下的位置。
在这里插入图片描述代表某个状态

方法

通信建立的式p2p连接,并且消除了CVI-SLAM中通信模块先前的ROS依赖性()

一个统一的通信接口–能够自由地与基于关键帧的VIO系统建立连接–每个子机器人运行自己的VIO-SLAM,然后把过程中产生的关键帧以及地标点告知服务器

服务器核心是地图管理器–控制系统中全局地图的访问以及关键帧数据集用于有效的位置重识别地图融合冗余关键帧剔除。

位置重识别处理来自代理的所有KF,检测视觉重叠,并且位置重识别不区分被用于什么回环检测或者地图融合。

服务器进行的优化方法为:位姿图优化PGO(规律)以及全局BA-GBA(低频)

系统提供了一个扩展接口,运行使用者与系统进行交互。
在这里插入图片描述

图结构

SLAM图在这里插入图片描述,关键帧集合、地表集合作为顶点;边包含两个KF之间的IMU约束或者一个KF和一个LM之间作为标志性的观测量。

它这个地图构建会同时存在多个服务器地图直到所有的机器人协同定位。

下面的SLAM估计问题引出一个因子图–构成GBA的基础

共享的地标能够为来自多个代理的关键帧之间创建依赖

“机器人SLAM中的位姿图(pose graph)和因子图(factor graph)都是用于描述机器人在环境中移动和感知的概率图模型。它们都是基于图论和概率论的方法,用于推断机器人的轨迹和地图。
但是,它们的设计和应用场景略有不同,下面是它们的具体区别:
位姿图
位姿图是一个节点和边的集合,其中节点表示机器人在不同时间步骤的位姿,边表示机器人在两个时间步骤之间的运动。位姿图可以用于同时优化机器人的轨迹和地图,因此也被称为"全局优化"。在位姿图中,每个位姿都被表示为一个向量,包含机器人的位置和姿态信息。
位姿图通常用于离线优化,即机器人完成数据收集后,再将数据用于优化,因此不适用于实时应用场景。此外,位姿图的复杂度随着时间步骤的增加而增加,因此处理长时间的位姿图可能会很困难。

因子图
因子图是一种更通用的概率图模型,它不仅可以用于SLAM问题,还可以用于其他概率推断问题。在因子图中,节点表示随机变量,边表示变量之间的条件依赖关系。因子图通常用于局部优化,即实时处理机器人感知数据,更新机器人的轨迹和地图。
在机器人SLAM中,因子图通常用于增量式SLAM问题的求解,其中机器人感知数据被表示为因子,用于更新机器人的轨迹和地图。因子图还可以用于处理非线性的运动和感知模型,因为它可以表示更复杂的条件依赖关系。
总体来说,位姿图和因子图都是用于描述机器人轨迹和地图的概率图模型,但它们的设计和应用场景略有不同。位姿图适用于离线优化,全局优化机器人的轨迹和地图;因子图适用于实时处理机器人感知数据,更新机器人的轨迹和地图,适用于增量式SLAM问题的求解。

误差残差公式

利用残差,可以将基于关键帧的VI-SLAM状态变量优化表达为加权的非线性最小二乘问题
残差在这里插入图片描述表明了基于当前状态的期望测量(后者)与真实测量Zi之间差异的期望。

这是测量误差
z=h(x)
在这里插入图片描述
后者为观测函数(预测)–其变量为与真实观测相关的状态的集合
优化的目标函数:最小二乘
在这里插入图片描述
其中,残差进行马氏距离的计算—二次项,如下
在这里插入图片描述
W为信息矩阵—协方差的逆—(信息滤波)

利用上述测量误差最小化的形式—表达出本系统的三个误差类型
残差的类型:重投影残差在这里插入图片描述
在这里插入图片描述将三维的地标位置投影到图像上。
;相对位姿残差在这里插入图片描述
前者是相对旋转误差,后者是相对平移误差。
在这里插入图片描述
;IMU预积分残差在这里插入图片描述
在两个KF之间,获取IMU 的一系列测量值,通过IMU预积分的方法获得两个KF之间的相对约束
在每一次优化步骤之后,为了避免因为偏差变量的改变而重新预积分,采用**《On-Manifold Preintegration for Real-Time Visual–Inertial Odometry》**中的方法只进行一次预积分,并利用线性化修正处理偏差的变化。
IMU的残差项可以写为:旋转,速度,平移
在这里插入图片描述
带有横线的表示在预积分时,由偏差估计在这里插入图片描述获得的量。带波浪的表示状态变量的当前估计值。

最后的表示结果
在这里插入图片描述

具体细节可阅读论文2021-《COVINS: Visual-inertial SLAM for centralized collaboration Supplementary Material》

视觉惯性里程计的前端–接口

服务器后端可以和任意VIO系统组合以便共享地图信息。
使用度量尺度的估计以及IMU偏差和VIO的速度作为初始化点,以便处理GBA的惯性数据。

通信

使用TCP协议的socket编程,以及用于消息序列化的仅报头库(啥意思)-USCiLab. cereal. https://github.com/USCiLab/cereal.。-----之前对这个没有什么了解
基于字节流的传输层通信协议

上面两个东西能实现什么呢?
这允许在本地计算单元和远程云服务器上部署服务器

“University of Southern California iLab开源的cereal是一个用于C++编程语言的序列化和反序列化库,用于将C++对象转换为二进制流,以便在网络传输或存储到磁盘等场景中使用。

cereal库支持将C++对象序列化为JSON、XML等多种格式,并且支持自定义序列化器和反序列化器,使得开发者可以更灵活地处理不同类型的数据。cereal库还支持版本控制,允许开发者在数据结构发生变化时仍然能够反序列化旧版本的数据。

因此,cereal库可以帮助C++开发者更方便地处理序列化和反序列化的问题,提高开发效率。”

“序列化和反序列化是指将一个数据结构或对象转换为一串字节流的过程,并在需要时将这些字节流转换回原始数据结构或对象的过程。在C++中,序列化和反序列化通常用于网络传输、数据存储等场景。

序列化是指将一个数据结构或对象转换为一串字节流的过程。序列化的目的是将一个数据结构或对象转换为字节流,以便将其存储在磁盘上或通过网络发送到另一个计算机。序列化可以将数据结构或对象转换为各种格式,如二进制格式、XML格式、JSON格式等。

反序列化是指将一串字节流转换回原始数据结构或对象的过程。反序列化的目的是将存储在磁盘上或通过网络传输的字节流转换回原始的数据结构或对象。反序列化的过程与序列化的过程相反,可以将字节流转换为原始的数据结构或对象。

在C++中,可以使用序列化库来实现序列化和反序列化。常用的序列化库有Boost.Serialization、Google Protocol Buffers、Apache Thrift、MessagePack、cereal等。这些库提供了序列化和反序列化的功能,并且可以支持不同的格式和数据类型。开发者可以根据需要选择合适的库来实现序列化和反序列化功能。”
机器人可以动态加入

代理到服务器通信

采取CCM-SLAM的消息传递–考虑KF和LM的静态部分,例如提取的2D特征关键点和相关描述符,并确保该信息不会被重复发送。
消息的区分
消息累积及通信–代理将自己要与服务器共享的所有地图信息累积在一个短时窗口中,并以固定的频率发送给服务器。

服务器到代理通信(地图的再使用)

接口支持双路通信
服务器的全局范围漂移及优化
服务器有一定规律地将自己估计的一个代理最近创建的KF的位姿和这个代理共享
将来自服务器的该漂移校正姿态估计与本地地图中KF的估计姿态进行比较,可以估计代理上的局部里程变换Todom,量化当前姿态估计中的漂移。
局部VIO的地图是不会修改的,保证VIO的平滑度不受影响。
大大的疑惑:量化完误差之后不去修改–说是保证VIO平滑度不受影响

多地图管理

位置重识别一旦检测到就会进行地图管理器(维持KF集为了有效的位置重识别)–融合地图-全局一致性,地图存储及访问。

位置重识别,回环检测,地图融合

位置重识别

标准的多阶段位置重识别流程

1、****利用词袋为这个关键帧序列在这里插入图片描述,在系统所有KFs中选择潜在的匹配候选在这里插入图片描述
**2、**然后建立关键帧序列KFq与匹配候选集在这里插入图片描述中所有KF之间的
特征关联。

**3、使用3D-2D的随机抽样一致,接着重投影误差最小化,**找到KFq与潜在匹配KFc在这里插入图片描述
之间的相对变换在这里插入图片描述

4、利用变换在这里插入图片描述
寻找另外的KFq与其潜在匹配KFc的
地标关联

经过了上面四步的在这里插入图片描述有足够多的内点,那么就接受这个位置重识别的匹配

回环检测

如果KFq与KFc都是同一个服务器地图的一部分,就执行**回环检测,PGO,**以优化地图中KF的位姿。

地图融合

如果KFq与KFc存在于不同的服务器地图中,使用在这里插入图片描述将KFq的地图在这里插入图片描述与KFc的地图在这里插入图片描述进行配准。最后用新的地图在这里插入图片描述包含上述两个地图内所有的关键帧,并替代上述地图。—这个还涉及到地标的融合。

地图优化

位姿图优化

位姿图优化的触发条件是在闭环后,地图中添加了新的两个KFs之间的回环约束
位姿图优化的目标函数–优化服务器地图中所有KF的位姿
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
指示函数 后面两个符号代表共视边集合和回环检测边集合 并且i 要小于 j 为啥?
用优化后的KF位姿传播服务器地图中所有LM的位置。

全局BA

“在机器人SLAM中,Global Bundle Adjustment(全局束调整)是一种用于优化机器人在三维空间中的轨迹和地图的方法。

在SLAM中,机器人使用传感器从其环境中收集数据,并使用这些数据来构建一个地图并确定其在该地图中的位置。但是,由于传感器误差和其他因素,这些位置和地图的估计可能会有误差。

全局束调整的目的是最小化这些误差,从而提高机器人在地图中的位置和地图的准确性。它将机器人在整个运动过程中的所有位置和地图特征联合优化,以最小化所有测量的误差,并得出最准确的位置和地图。

在全局束调整中,优化问题被建模为一个大规模的非线性优化问题,需要使用高级数学方法(如最小二乘法)和计算机算法来解决。全局束调整需要处理大量的数据,因此需要大量的计算资源和时间来计算。”

在任务的最后(代理不再主动地向服务器发送更多的信息)执行GBA。
其目标函数为
在这里插入图片描述
在这里插入图片描述表明由KFk观测到的LMs的集合。
在这里插入图片描述-使用稳健的损失函数来减少异常值的影响–本文采用的是柯西损失。

在这里插入图片描述重投影残差,在这里插入图片描述预积分残差,
在这里插入图片描述惩罚连续KF之间偏置变量的变化。

冗余KF移除

我们使用[19]中介绍的基于结构的启发式方法来识别和删除冗余KF。–《On the Redundancy Detection in Keyframebased SLAM》

随着地标数量的增长,信息增益反而下降了
在这里插入图片描述
在这里插入图片描述

上述函数根据观测值的数量为每个LM分配一个值–随着数字编码的增加,该LM的单个观测值的冗余度增加
利用地标在这里插入图片描述
使用下面这个函数可以为每一个KFk计算冗余值
在这里插入图片描述
因为移除冗余KF的步骤是在GBA之前,所以GBA的时间很受其影响。

实验结果

使用数据集EuRoC benchmark dataset

协同SLAM的估计精度
绝对轨迹误差(ATE)方面对齐的全局估计的精度
尺度误差scale error

平均ATE0.050(总的轨迹长度1750m)
通信
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值