多相机系统通用视觉 SLAM 框架的设计与评估

news2025/1/22 9:12:59

Design and Evaluation of a Generic Visual SLAM Framework for Multi-Camera Systems

PDF https://arxiv.org/abs/2210.07315
Code https://github.com/neufieldrobotics/MultiCamSLAM
Data https://tinyurl.com/mwfkrj8k

程序设置

主要目标是开发一个与摄像头系统配置无关的统一框架,该框架轻便易用,并能实时运行。

  • 多摄像头模型采用一组广义的摄像头模型,该模型将多个摄像头视为一个统一的成像系统。这种方法的优点是它允许使用单一的数学框架来处理来自不同摄像头的图像,而无需考虑摄像头的具体配置。广义摄像头模型的基本原理是,它将每个摄像头视为一个针孔相机,并使用一个共同的坐标系来表示所有摄像头的图像。这样,可以将来自不同摄像头的图像投影到同一个平面上,并使用相同的算法来处理这些图像。
  • 区分重叠 (OV) 或不重叠 (N-OV) 场景。

  • 摄像头配置根据摄像头的数量和它们之间的 FoV 重叠情况进行区分。

 

(a)评估各种重叠 (OV) 和不重叠 (N-OV) 相机配置。
(b)通用视觉 SLAM 框架的框图,显示了其子模块。
特征提取计算两种类型的特征——多视图内部匹配和常规单目特征。
注意,为了适应通用多摄像头系统,对初始化、跟踪和关键帧表示进行了更改。

前端

SLAM 系统的前端旨在估计机器人在每个时间步长的位姿和观测到的地标。本节讨论了特征提取、初始化、跟踪和建图模块的关键方面,这些方面能与任意的多摄像头系统无缝协作。

A. 特征提取

本文的方法使用两种类型的特征来进行 SLAM:多视图特征和单目特征。

  • 多视图特征: 多视图特征是出现在多个相机图像中的特征。它们可以用来表示场景中的 3D 点。本文的方法首先在所有图像中提取多尺度的 ORB 特征,并将它们分配到一个 2D 网格中。然后,本文的方法在每个独特的相机对之间迭代计算特征对应关系。对于每个相机对,本文的方法只匹配属于重叠区域的特征,以减少计算量。匹配的特征通过极线约束进行验证。从第一对相机创建一组匹配。对于随后的图像对,如果在两个未匹配的特征之间找到对应关系,则将一个新匹配添加到匹配集。如果为已匹配的特征找到匹配,则将新特征添加到现有匹配。
  • 单目特征: 单目特征是只出现在一个相机图像中的特征。它们可以用来表示场景中的 3D 点,但不如多视图特征准确。本文的方法使用具有单个 2D 关键点及其描述符的单目特征来表示非重叠区域。

本文的方法使用这两种类型的特征来构建地图和估计相机位姿。

两个样本多摄像头帧,显示了从(a)重叠OV装置中的前置摄像头以及(b)相同场景中的三个不在重叠N-OV装置中的摄像头中提取的图像特征。彩色点是多视图特征,其中较近的点为红色,较远的点为蓝色。白色点是没有任何 3D 信息的单目特征。注意,N-OV 装置只有单目特征,而 OV 装置在图像的重叠和不重叠区域中分布有单目特征和多视图特征。

B. 初始化

本文使用的是广义相机模型来表示多相机系统,并使用 17 点算法来估计相对姿态。
一般 SLAM 通常使用单应矩阵或基本矩阵来估计相对姿态。
广义相机模型和 17 点算法更适合于处理多相机系统的数据。

C. Tracking and Mapping

在初始化之后,每个传入帧都将相对于最后一个关键帧进行跟踪。通过词袋匹配在最后一个关键帧和当前帧之间计算帧间对应关系。由于多视图特征包含不同相机中的多个描述符,因此使用描述符的中位数进行匹配。如果最后一个关键帧中的地图点与当前帧中的观测值之间找到足够的 3D-2D 匹配, 可以通过找到地图点和当前帧观测值之间的对应关系来估计当前帧的位姿。具体来说,可以通过以下步骤来完成:

  1. 找到地图点和当前帧观测值之间的对应关系。
  2. 使用这些对应关系来计算当前帧观测值的普吕克坐标。
  3. 使用广义 PnP 算法来估计当前帧的位姿。广义 PnP 算法是一种求解相机位姿的算法,它可以处理带有噪声的测量值。
  4. 估计的相机位姿可以用来将地图点投影到当前帧中。如果投影的点与实际观测值匹配良好,则说明估计的相机位姿是准确的,即计算重投影误差。

通俗地说,就是通过找到地图点和当前帧观测值之间的对应关系,然后使用这些对应关系来计算当前帧的位姿,这个过程类似于三角测量,但它使用的是普吕克坐标而不是角度。

PS:

  • 普吕克坐标是一种表示线或平面在空间中的方式。对于一个点,它的普吕克坐标由两个三维向量组成。第一个向量是从相机中心到该点的方向向量,第二个向量是该点上的法向量。
  • 广义 PnP 算法是一种求解相机位姿的算法,它可以处理带有噪声的测量值。要使用广义 PnP 算法,需要提供一组观测值及其对应的普吕克坐标,以及一组地图点的 3D 坐标。广义 PnP 将使用这些信息来估计相机位姿。

如果估计的位姿表明自最后一个关键帧以来存在较大运动,则会以类似于 ORBSLAM 的方式进一步定位当前帧相对于局部地图。查找最初跟踪的地标共享的一组相邻关键帧 K。然后,在 K 中跟踪的地标与当前帧之间计算新的匹配。这使得能够获得局部地图支持,并有助于在存在遮挡动态物体的情况下找到稳定的地标。最后,如果自最后一个关键帧以来跟踪的地标的比率小于某个阈值,则将当前帧插入为一个关键帧。当做出新的关键帧决策时,会将观测值添加到现有地标中,并将与非地图点对应的新帧间匹配进行三角测量以创建新的地图点。

后端

在本文中,后端优化还同时优化了组件相机的外部校准参数。这使得本文的方法可以处理不同的相机配置,并提高多相机系统的定位精度。

后端对应着优化框架,通过极大化给定观测信息,对它们初始估计进行优化。在一个普通的多摄像头系统里,观测信息不仅取决于设备的位姿 X 和地标 L,还取决于观测信息被感知到的摄像头 C。最大后验概率 (MAP) 问题由以下公式给出:
 
其中 P (Z|X, L, C) 是观测信息的似然函数,由于独立同分布的假设而分解成多个单独的概率。

P (x0) 是初始机器人位姿的先验概率。

因子图表示法展示了变量之间的各个概率约束(因子)。

​​​​​​​

多相机后端的因子图,待优化变量为位姿 Xi、地标 lj 和相对相机位姿 Cp,因子显示为黑色方块节点,表示对变量的约束条件。

假设观测信息 zk 服从均值为零的正态分布,且先验也建模为高斯分布,则采用最小二乘法进行优化,具体形式如下所示:

 
其中,测量函数 hk 通过一系列变换将地标映射到预测的观测值 zk 。

懒得手敲推导过程了,直接截图如下。

这个公式很便于对多视角特征进行建模,它为后端提供了灵活性,可以使用不同的摄像头配置,并优化组件摄像机的外部校准参数 C,以及估计轨迹和地标。

实验设置

本节中介绍硬件设置、相机校准以及进行实验评估所需的几个室内和室外数据集的收集情况。

A. 硬件设置和相机校准

使用一个由七台相机组成的刚性多相机设备,其中五台相机朝前,两台相机朝侧面,还有一个惯性测量单元 (IMU),如图所示。


                                                                          图 4
用于收集数据以评估 SLAM 管道的定制多相机设备。图中显示了重叠和不重叠的配置,以及安装在设备上的 IMU。IMU 用于计算连续两个相机之间的基线。连续两个相机之间的基线是 165 毫米。

相机的排列方式考虑了具有重叠 (OV) 和不重叠 (N-OV) 视野范围的配置。朝前的相机(红色虚线框)用于运行单目、双目和重叠多相机设置的实验。朝前的中心相机和朝侧面的相机(蓝色框)用作不重叠多相机设置。

使用 FLIR BlackFly S 1.3 MP 彩色相机,其分辨率为 720 x 540,FOV 为 57°,Vectornav 的 IMU 运行频率为 200 Hz。所有相机都已的硬触发,以便以 20 fps 的速度进行同步捕获。

使用 Kalibr 获取具有重叠 FOV 的相机的内参和外参,并使用校准目标。

对于不重叠的相机,基于目标的校准不起作用,因此需要相机观察静止目标来求解相对变换。
ps:对于不重叠的相机,使用惯性测量单元相机校准来获取它们的位姿。 惯性测量单元相机校准是一种使用惯性测量单元 (IMU) 和相机来估计相机位姿的方法。IMU 可以测量加速度和角速度,而相机可以测量图像。通过结合这两种信息,可以估计相机的位姿关系。

将相机间变换串联在一起,以获得所有相机的位姿,构建一个多相机系统,其中所有相机都具有已知的位姿。

PS:在后端优化过程中同时优化外参估计,这有助于提高多相机系统的精度。

B. 数据集

多相机设备和一台具有 32GB RAM 的戴尔 XPS 笔记本电脑安装在一个 Clearpath Ridgeback 机器人平台上,并沿着东北大学的校园行驶以收集数据。其中一个数据集是使用 NUANCE 自动驾驶汽车在越野环境中收集的。

共收集了六组室内和室外序列。这些序列包括几个具有挑战性但自然的场景,包括狭窄的走廊、没有特征的空间、急促和快速的运动、突然的转弯,以及移动机器人通常在城市环境中遇到的动态物体。

在室外序列中使用 GPS 作为真值。室内序列的真值​​​​​​​是使用 Optitrack 设置获得的,其精度可达毫米级。在无法使用 Optitrack 的情况下,使用视觉标签用于真值和计算漂移。

表 I 中汇总了数据集的详细信息,包括位置、轨迹长度和真值​​​​​​​。

结果

在几个具有挑战性的室内和室外轨迹中展示了定性和定量结果。

对于定量分析,使用绝对平移误差 (ATE),该误差是通过将估计的轨迹与真值对齐并计算相应位姿之间的平均误差获得的,如表 II 所示。

当没有真值轨迹时,使用一个视觉目标来估计机器人的初始和最终位姿并计算累积漂移。

A. 与最先进算法的比较

本节将与 ORBSLAM3(一种流行的稀疏视觉 SLAM 系统)的性能进行比较。

定性结果

图 5:本文通用 SLAM 系统和 ORBSLAM3 对 ISEC Ground1(a) 和 ISEC Lab1 (b) 序列的估计轨迹,在 (b) 中,真值是虚线。
对于 ISEC Ground1 序列 (a),机器人的起始位置和结束位置是相同的,这有助于衡量性能。在双目设置中,本文优于 ORBSLAM3,后者会因沿轨迹遇到的动态对象而导致跟踪不正确。随着增加重叠摄像头的数量,与我们的方法相关的试验显示估计轨迹的准确性有所提高。

图 5(a) 和 5(b) 显示了 ISEC Ground1 和 ISEC Lab1 序列的估计轨迹。ISEC Lab1 轨迹在轨迹的开始和结束时具有 Optitrack 真值(显示为虚线),因为要穿越多个房间。ISEC Ground 轨迹没有真值位姿,但机器人从同一位置开始和结束。请注意,在这两个序列中,本文​​​​​​​在双目模式下优于 ORBSLAM3。在轨迹中的几个地方,由于存在动态特征,ORBSLAM3 在估计的位姿中显示出伪影。由于本文从分布在整个视野中的特征获得了更多支持,并且不局限于匹配的双目特征,因此本文可以更好地处理动态对象。

定量结果

 

表 II:所提出的方法和 ORBSLAM3 相对于不同序列真值的绝对平移误差 (ATE),ORBSLAM3 在双目设置上执行,使用图 4 两个具有最小基线的中心摄像头。
而本文的方法在图 4 重叠 (OV) 和非重叠 (N-OV) 配置上执行。
OV 配置结果显示为绿色,从面向正面的阵列中选择摄像头,从用于 ORBSLAM3 的双目设置开始,并为每次运行添加一个摄像头。
对于图 4 中显示的蓝色框中包含的三个摄像头,测试结果即粉红色的 N-OV 配置,对于 ISEC Ground2 和 Falmouth 序列,没有非重叠数据。

从表 II 中可以观察到,与 ORBSLAM3 相比,在五个数据集中的四个数据集中,本文的方法在双目设置下表现出更高的精度。

虽然对于 ISEC Lab1、ISEC Ground1 和 ISEC Ground2 轨迹来说,误差差异不大,但对于 Curry  Center轨迹来说,差异却很显著,该轨迹更长,并且在东北大学校园里有很多动态内容,人们四处走动。

在 Falmouth 序列中,该序列具有带有干枯树叶的越野户外图像,与双目配置中的 ORBSLAM3 相比,本文的表现很差。

在比较中禁用了 ORBSLAM3 中的回路闭合,以准确计算累积漂移。通过回路闭合,ORBSLAM3 的估计得到了改进。然而,对于像 Falmouth 序列这样非常长的轨迹,观察到即使启用了回路闭合,ORBSLAM3 也无法从累积漂移中恢复过来。

B. 相机配置的影响

除了将本文的方法与最先进的 SLAM 系统进行比较之外,本文还评估并讨论了以下参数对所提出的 SLAM 管道的性能的影响。

准确性
  • 摄像机数量:

在重叠配置中,通过选择一个子集的摄像机来评估本文的方法,并为每次试验增加摄像机数量。我们从基线最小的 2 个摄像机开始,最多增加到前置摄像头阵列中的 5 个摄像机。表 II 显示,在每个序列中,ATE 随着重叠摄像机数量的增加而减小。我们可以在图 5(a)、图 5(b) 和图 6 中显示的轨迹图中看到同样的趋势。随着我们增加摄像机数量,估计的轨迹更接近地面实况。这可以在图 5(b) 中轨迹的放大部分中清楚地观察到。

  • 重叠与非重叠:

将从前置摄像头阵列中选择的一组重叠摄像头与一组朝不同方向的具有相同数量摄像机(N=3)的非重叠摄像机之间的跟踪精度进行比较,如图 4 所示。从表 II 中可以看出,对于具有相同数量摄像机的非重叠配置,误差总是大于重叠配置。这是因为非重叠设置会迅速积累尺度漂移。在 ISEC Lab1 序列中,误差尤其高,该序列具有狭窄的无特征走廊和反光玻璃墙,使侧视摄像头无法用于跟踪。

鲁棒性

​​​​​​​图6:具有大量动态内容的Curry center室外数据的估计轨迹。
星号表示轨迹估计的最终位置。在重叠相机配置中,随着相机数量的增加,SLAM估计的准确性提高,这体现在最终位置的累积漂移上。
突出显示那些因遮挡动态物体而导致的跟踪失败的轨迹上的图像,用红色和蓝色框表示。
非重叠配置在对比相同数量的相机OV配置时显示出尺度问题,但对于动态内容具有鲁棒性。

除了测量准确性之外,本文还研究了不同相机配置下的跟踪鲁棒性。为此,我们在Curry  center序列的多次运行 SLAM仔细观察 ,这是一个大型数据集(597 米),具有大量动态内容,如图 6 所示。这些数据是通过在正常工作日的东北大学校园周围导航机器人来收集的,当时有很多人类活动。图 6 显示了每个相机配置的最佳运行。红色和蓝色框表示我们遇到跟踪失败时轨迹上的位置,并显示了其中一个摄像头获取的相应图像。
在运行中,我们在两摄像头重叠配置中遇到最多的跟踪失败。三摄像头重叠配置中也发生跟踪失败,但不像两摄像头情况那样频繁。
具有 4 个和 5 个摄像机的重叠配置成功运行,非常紧密地相互跟随。
非重叠 3 摄像头配置在存在动态对象时不会失败,因为当一个视图被遮挡时,它有其他视图的支持来跟踪特征。然而,轨迹估计不准确,并且表现出严重的尺度误差

C. 运行时性能

表III:本文方法的运行时间性能。我们展示了pipiline中不同步骤的平均耗时:特征提取、跟踪和建图、优化以及每帧的总时间。处理时间明显随着相机数量的增加而增加。我们可以在五个相机的配置下以11 fps的速度运行,这接近实时。

通过测量处理单个多摄像头帧的平均时间来结束评估。表 III 显示了 Curry  center中各种相机配置的平均时间。分别以毫秒为单位报告了特征提取、跟踪和映射、后端优化模块以及每个帧的总处理时间的单独处理时间。结果表明,正如预期的那样,重叠配置中处理时间随着摄像头数量的增加而增加,因为我们在前端组件摄像头之间计算多视图特征时增加了额外负担。后端的计算负载也因观测值的增加而增加。

对于双目配置,我们可以最高实现 19.1 fps 的处理速度,对于重叠配置中的五个摄像头,我们可以实现最低 11.45 fps 的处理速度。

结论

提出了一种通用的多摄像头 SLAM 框架,可以适应任何任意相机系统配置。
本文的核心贡献是相机配置独立的设计和完整 SLAM 的实时实现。
利用相机几何形状提取分布良好的多视图特征,通过有效利用摄像头之间的重叠视场来实现。

对使用定制摄像头装置收集的包含各种挑战性条件的真实世界数据集进行了广泛的评估。

还根据定义相机配置的摄像头数量和重叠信息来对 SLAM 管道的性能进行基准测试。此分析可用于设计用于准确和鲁棒 SLAM 的多摄像头系统。

这项工作解决了最先进的视觉 SLAM 算法与其在多摄像头系统实际部署中的适用性之间的差距。

我们将代码和数据集公开,以促进这一方向的研究。

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

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

相关文章

渲染控制之条件渲染

目录 1、使用规则 2、更新机制 3、使用if进行条件渲染 4、if ... else ...语句和子组件状态 5、嵌套if语句 ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用if、else和else if渲染对应状态下的UI内容。 1、使用规则 支持if、else和else if语句…

网络技术基础与计算思维实验教程_2.3_单交换机VLAN配置实验

2.3.1 实验内容 2.3.2实验目的 实验的目的一是验证交换机 VLAN 配置过程; 二是验证属于同一 VLAN的终端之间的通信过程; 三是验证每一个 VLAN 为独立的广播域; 四是验证属于不同 VLAN的两个终端之间不能通信; 五是验证转发项和 VLAN的对应关系。 2.3.3实验原理 默认情况下,交换…

Spring IoCDI

文章目录 前言什么是Spring1. 什么是 IoC 容器1.1 什么是容器1.2 什么是 IoC 2. 什么是DI IoC & DI 的使用IoC详解Bean的存储Controller注解如何获取Bean1. 根据Bean的名称获取Bean2. 根据Bean类型获取Bean3. 根据Bean名和Bean类型获取Bean Service注解Repository注解Compo…

less 查看文本时,提示may be a binary file.See it anyway?

解决办法 首先使用echo $LESSCHARSET查看less的编码 看情况设置less的编码格式(我的服务器上使用utf-8查看中文) 还要特别注意一下,Linux中存在的文本文件的编码一定要是utf - 8;(这一步很关键) 例如:要保证windows上传到Linux的…

Ubuntu 常用命令之 ps 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 ps命令是Linux下的一个非常重要的命令,它用于查看系统中的进程状态。ps是Process Status的缩写,可以显示系统中当前运行的进程的状态。 以下是一些常用的参数 a:显示所有进程(包括…

【3D Max】入门

文章目录 概述界面介绍常用功能保存和导入基本建模编辑模型材质和贴图光源和阴影动画制作渲染设置导出和打印来源 概述 3 ds MAX是由 Discreet (后来被 Autodesk (Autodesk)合并)开发的一款基于 PC系统的3 d Max或3 ds MAX三维动画绘制和制作软件,其主要功能有建模…

选择谷歌SEO公司时怎么避开套路型公司?

选择谷歌SEO公司时,如何避开套路型公司是一个至关重要的话题。在当今数字化时代,优化网站以获得搜索引擎排名的重要性越发凸显,而选择一家信誉良好、专业的SEO公司将对企业的发展产生深远影响。然而,市场上存在许多套路型公司&…

java开发需要掌握的TypeScript相关的知识点,细致简洁版。

Typescript: 介绍: TypeScript(简称 TS)是JavaScript的超集(继承了JS全部语法),TypeScript Type JavaScript。 简单说,就是在JS的基础上,为JS添加了类型支持。是微软开…

构建创新学习体验:企业培训系统技术深度解析

企业培训系统在现代企业中发挥着越来越重要的作用,它不仅仅是传统培训的延伸,更是技术创新的结晶。本文将深入探讨企业培训系统的关键技术特点,并通过一些简单的代码示例,展示如何在实际项目中应用这些技术。 1. 前端技术&#…

springboot集成websocket全全全!!!

一、界面展示 二、前置了解 1.什么是websocket WebSocket是一种在单个TCP连接上进行全双工通信的持久化协议。 全双工协议就是客户端可以给我们服务器发数据 服务器也可以主动给客户端发数据。 2.为什么有了http协议 还要websocket 协议 http协议是一种无状态,非…

基于SpringBoot的APK检测管理系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软件档案模块2.4 软件检测模块2.5 软件举报模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 开放平台表3.2.2 软件档案表3.2.3 软件检测表3.2.4 软件举报表 四、系统展示五、核心代…

学校和老师如何制作自己免费的成绩查询系统

在当今数字化的时代,许多学校都采用信息技术来管理和提高工作效率。其中,成绩查询系统是一个非常实用的工具,它可以让老师和学生们快速、方便地查询成绩。那么,学校和老师如何制作自己免费的成绩查询系统呢?本文将为你…

【Amazon 实验②】使用Amazon WAF做基础 Web Service 防护之自定义规则

文章目录 1. 自定义规则1.1 介绍 2. 实验步骤2.1 测试2.2 输出 上一篇章介绍了使用Amazon WAF做基础 Web Service 防护中的Web ACLs 配置 & AWS 托管规则的介绍和演示操作 【Amazon 实验①】使用Amazon WAF做基础 Web Service 防护,本篇章将继续介绍关于自定义…

webSocket原理及其案例

常见的消息推送方式 1:轮询方式 浏览器以指定的时间间隔向服务器发出HTTP请求,服务器实现试试返回数据给浏览器 缺点:数据有延时、服务器压力较大。 2:长轮询 浏览器发出ajax(异步)请求,服…

【HarmonyOS开发】ArkTs使用Http封装

1、鸿蒙中如何进行网络请求 1.1 三方库请求 ohos/axios ohos/retrofit ohos/httpclient 1.2 鸿蒙原生请求 ohos.net.http 2、ArkTs请求模块ohos.net.http 本模块提供HTTP数据请求能力。应用可以通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD…

阿里云吴结生:云计算是企业实现数智化的阶梯

云布道师 近年来,越来越多人意识到,我们正处在一个数据爆炸式增长的时代。IDC 预测 2027 年全球产生的数据量将达到 291 ZB,与 2022 年相比,增长了近 2 倍。其中 75% 的数据来自企业,每一个现代化的企业都是一家数据公…

Xcode15 iOS 17 Simulator 离线安装,模拟器安装

Xcode 15 安装包的大小相比之前更小,因为除了 macOS 的 Components,其他都需要动态下载安装,否则提示 iOS 17 Simulator Not Installed。 如果不安装对应的运行模拟库 无法真机和模拟器运行,更无法新建项目。但是由于模拟器安装包…

通过for语句遍历一个简单的数组

一、基本思想 创建一个命名为ArrayDemo的类,然后定义一个合适的数组,使用for语句遍历这个数值,然后进行输出。 注意事项: 最好在每个字符之间留下一个空白。 二、基本代码 public class ArrayDemo {public static void main(St…

【沐风老师】3dMax篮球建模方法详解

3dMax足球、排球和篮球建模系列之:篮球建模。对于足球和排球建模,思路是从一个基础模型开始,利用这个基础模型与最终的足球(或排球)模型的某些相似之处,经过修改编辑,最终完成目标模型的建模。但…