论文于祥读及复现——《Multi-level Map Construction for Dynamic Scenes》

news2024/12/23 9:53:43

论文祥读之——动态场景的多层次地图构建

  • 0. 出发点(暨摘要)
  • 1. 引言
  • 2. 相关工作
  • 3.主要内容概括
    • 3.1 几何地图的构建
      • 3.1.1 密集点云地图和八叉图的构建
      • 3.1.2 平面地图的构建
    • 3.2 对象地图的构建
      • 3.2.1 对象参数化和数据关联
      • 3.2.2 对象的更新与优化
  • 4. 实验
    • 4.1 构建几何地图
    • 4.2 构建物体地图
    • 4.3 在真实环境中的稳健性测试
    • 4.4 动态物体跟踪实验
  • 5. 本文总结
  • 6. 个人读后感

论文网址:https://arxiv.org/pdf/2308.04000.pdf
源码网址:https://github.com/Hbelief1998/DyMLM-SLAM
注意 源码好像还没发不出来,git下来的文件里面只有一些图片。

0. 出发点(暨摘要)

在动态场景中,视觉SLAM中的定位和建图都面临着重大挑战。近年来,大量优秀的研究工作为定位问题提出了有效的解决方案。然而,针对动态场景下的长时间一致性地图构建的优秀研究工作较少,严重阻碍了地图应用的发展。
针对这一问题,设计了一种面向动态场景的多层次地图构建系统。该系统采用多目标跟踪算法、DBSCAN聚类算法和深度信息对目标检测结果进行校正,准确提取静态点云,并构建密集的点云图和八叉树图。提出一种面向动态场景的平面地图构建算法,涉及动态环境下平面的提取、过滤、数据关联和融合优化,从而生成平面地图。此外,还提出了一种针对动态场景的目标地图构建算法,包括目标参数化、数据关联和更新优化。在公开数据集和真实场景上的大量实验验证了所构建的多层次地图的准确性和所提算法的鲁棒性。最后,利用构建的目标映射展示了算法在动态目标跟踪中的实际应用前景。

1. 引言

下图1为动态场景多层次地图构建算法的系统框架。

  • 浅绿色部分为输入模块,输入RGB图像和深度图像。
  • 深绿色部分为预处理模块,主要负责语义信息的获取和预处理。
  • 黄色、蓝色和棕色模块为映射模块,分别表示构建密集点云地图和八叉树地图、平面地图、物体地图的一般过程。
  • 紫红色为输出模块,输出由映射模块构建的多级映射。
    系统框架图

本文的主要贡献有:

  1. 基于修正后的目标检测结果对点云进行过滤,构建干净的点云图和只包含静态元素的八叉树图。
  2. 提出一种在动态场景中构建平面地图的方法,实现对环境的结构感知。
  3. 提出一种在动态场景中构建物体地图的方法,使SLAM能够服务于更高层次的需求,如机器人环境理解、物体操纵和语义增强现实。
  4. 目前为止是第一个进行尝试在动态场景中,构建平面地图的工作,对物体进行精确参数化,构建精确完整的轻量化物体地图的。

2. 相关工作

对于动态场景制图,目前主要解决两个关键问题:

  • 解决语义信息缺失引起的动态噪声块
  • 提高映射效率

对于动态场景制图的研究,目前主要集中在:

  • 构建密集点云地图
  • 构建八叉图
  • 基于体素或TSDF的密集重建

为本文的分析打下基础的一些研究:

  • DS-SLAM使用log-odds评分来过滤不稳定的体素,并更新这些体素的语义,以构建密集的语义3D八叉树。
  • Detect-SLAM为每个关键点实时传播运动概率,并构建环境的实例级语义图。
  • Han等利用光流和PSPNet对动态点进行检测和剔除,同时创建了语义点云图和语义八叉树图。
  • Wen et al.利用深度误差、光度误差和重投影误差为静态点分配鲁棒权值,删除动态对象构建八叉树语义地图
  • Cheng等人将几何信息、语义信息和人类活动融合在一个精确可靠的3D稠密地图中。
  • RS-SLAM采用最大置信度融合方法进行语义更新,构建具有语义标签的静态背景语义八图。
  • SG-SLAM结合几何和语义信息快速去除动态特征,然后使用ROS接口构建语义对象图和全局octo图。
  • Yang等将改进的基于光流的移动一致性检测方法与深度信息调整的语义分割结果相结合,构建静态对象的语义八叉图。

仍然存在的问题:
密集映射可以满足增强现实等需求,但耗时较长。相比之下,平面映射以较低的计算需求实现了类似的功能,但缺乏相关研究。
目前面向动态场景的语义映射方案在对静态物体建模方面较为粗糙,缺乏对物体姿态、大小等信息的测量,且普遍缺乏物体数据关联和物体地图更新,即使部分工作存在这一环节,方法也相对简单,只适用于简单场景,缺乏强有力的实验支持来证明方法的有效性。此外,目前的研究工作主要集中在椅子和监视器两个物体的建模,忽略了场景中的其他物体。

3.主要内容概括

3.1 几何地图的构建

3.1.1 密集点云地图和八叉图的构建

处理工作:
在语义先验信息存在的情况下,可以根据语义类别删除目标检测框或者语义掩码中的点云,构建只包含静态因素的密集点云地图。
但是,这样操作会存在两个问题——漏检、欠分割。这两个问题会导致动态对象删除不完全。
本文使用YOLOX进行语义信息的获取对这两个问题的解决如下:

漏检利用多目标跟踪算法进行漏检补偿
欠分割首先,采用DBSCN类聚算法提取出潜在运动物体边界框内的前景点
然后,基于邻近像素沿着检测框边界和前景点的深度信息,适当扩展检测框
最后,为了避免DBSCAN聚类引起的错误,将检测框四个方向设置为扩展限制,限制为50个像素

建图工作:
在关键帧中,提取并映射到3D世界坐标系中的潜在移动对象的校正边界框外的像素。
然后,基于我们先前研究提供的相机姿态,将不同关键帧提取的点云进行拼接和融合,随后通过体素网格滤波进行下采样。
为了提高存储效率并支持导航和避障等任务,点云地图转换为八叉树地图

3.1.2 平面地图的构建

平面地图的初始化:

  • 平面提取的方法————>PEAC算法,得到当前相机坐标系下平面的参数和点云。
  • 提取平面的边缘点
  • 对平面进行二次拟合————>利用PCL点云库,获取精化后的参数和内点,移除平面边缘点的异常值

在此过程中,根据深度信息、内点比例以及与目标检测框的位置关系等各种因素对平面进行过滤
完成平面地图初始化后,遍历当前帧中检测到的平面和地图中已存在的平面,建立数据关联。

这样操作完会存在一定的问题,在复杂的动态场景中,检测到的平面常常会出现显著的错误和随机性,导致平面数据关联失败。但随着更多的观测,未成功关联的两个平面将朝着正确的方向进行优化,使得后续关联变得更加容易。

因此进行以下的操作:
在局部地图构建线程中,对地图中的平面进行成对比较。如果两个平面满足上述关联条件,它们将被视为潜在的未关联。然后,将观测次数较少的平面合并观测次数较多的平面中并进行优化,随后,将观测次数较少的平面从地图中移除

3.2 对象地图的构建

3.2.1 对象参数化和数据关联

由于要建模的对象通常属于背景,且远离相机,提取的地图点通常数量稀少且质量较差,使用聚类算法进行异常值去除是不可行的。因此每帧中使用密集点云进行对象建模,并利用DBSCAN密度聚类算法处理点云。

在当前帧k中,对于每个检测到的实例,我们对地图中的每个对象实例进行关联判断。运动IoU,投影IoU,3D-IoU和非参数统计是常见的对象数据关联策略。尽管它们存在限制,但在集成时,这些策略可以相互补充,从而产生更强大、准确和多功能的对象数据关联算法。

3.2.2 对象的更新与优化

分别使用密集点云稀疏地图点来对检测实例和对象实例进行参数化,这种方法弥补单个帧中地图点不足的缺点和多个帧中密集点云的显著耗时。在成功的数据关联之后,地图点和参数将会更新,随后,利用对象的地图点与平面或与对象关联的平面之间的距离以及孤立森林算法,从这些地图点中去除异常值
地图点的异常值剔除
图2为地图点的异常值剔除(a)确定桌面平面。(b)根据点到平面的距离剔除异常值。(c)使用隔离森林算法剔除异常值。

4. 实验

实验是在性能较高的笔记本电脑上运行的。在TUM RGB-D数据集上评估了算法性能,并在实际场景中应用算法进行动态物体跟踪。研究主要重点是地图构建,由于测试序列没有提供真值地图,实验主要旨在定性地展示地图构建结果。

4.1 构建几何地图

点云地图和八叉树地图

稠密点云地图和八叉树地图的构建结果如图3所示。可以观察到,由于缺乏处理动态物体的模块,ORB-SLAM2算法无法在高动态场景中进行定位和地图构建。在低动态场景中,该算法保留了动态物体的点云。由于物体检测中的漏检和完全覆盖潜在运动物体的边界框的挑战,通过删除位于原始潜在运动物体检测边界框内的点云构建的稠密点云地图包含了这些物体的大量残留痕迹。

下图为图3,点云地图和八叉树题图。顶部一行显示了使用ORB-SLAM2算法和密集建图模块构建的稠密点云地图。第二行展示了使用先前研究的方法 [9] 作为定位模块构建的稠密点云地图,其中排除了位于潜在运动物体检测区域内的点云。第三行展示了我们算法构建的稠密点云地图。底部一行展示了我们算法生成的八叉树地图。
点云地图和八叉树地图

平面地图

平面地图在动态场景中准确地感知静态背景平面结构。这可以应用于高级场景,如增强现实,并作为地标来增强相机姿态估计的准确性

下图为图4,相邻放置的重复物体的生成地图,左侧的图像提供了序列的概览
在这里插入图片描述

4.2 构建物体地图

在TUM数据集的8个动态序列上评估了物体地图构建的性能,如图5所示。为了验证物体地图构建的准确性,我们将构建的物体模型叠加在稠密地图上,并将它们投影到图像平面上。在高动态场景中,本文的算法能够准确地对场景中的几乎所有物体进行建模,不受相机不同的运动模式和环境中动态物体的影响。

然而,在低动态场景中,两个人一直坐在桌子旁边,导致了静态物体和背景的严重遮挡。因此,本文的算法对于某些物体缺乏足够的观测,导致了一些物体的建模不够准确,这是不可避免的。

实验结果表明,本文的算法在物体参数化、物体数据关联和物体优化策略方面具有很强的有效性,通过克服动态物体的影响,构建的物体地图为后续的应用,如语义导航、物体抓取和增强现实,提供了有力的支持。

下图为图5——物体地图。常规形状的物体,如显示器、书籍和键盘,使用立方体表示,而不规则形状的物体,如椅子、瓶子和泰迪熊,使用二次曲面表示。
物体地图

4.3 在真实环境中的稳健性测试

使用Realsense D435i相机在真实世界场景中对本文的方法进行了测试,来验证其有效性和稳健性。在实验中,一个人在相机的视野范围内进行了不规则的运动。为了验证算法的稳健性,评估了两种相机运动方式:

  1. 从场景的一端到另一端的移动;
  2. 几乎静止。多级地图构建的结果如图6所示。

实验结果表明,本文的算法能够在物体和相机的不同运动状态下构建准确的稠密点云地图、八叉树地图、平面地图和轻量级物体地图

下图为图6——真实世界场景中的多级地图构建结果,在上面一组图像中,相机从场景的一端移动到另一端;在下面一组图像中,相机几乎保持静止。图像(a)、(b)和©分别代表稠密点云地图、八叉树地图和平面地图。图像(d)展示了轻量级物体地图,其中物体被叠加在稠密点云地图上(图像(e)),并投影到图像上(图像(f)),以展示物体地图构建的有效性。

多层次地图构建在现实场景中产生效果

4.4 动态物体跟踪实验

进一步将构建的物体地图应用于动态物体跟踪,使用Pico Neo3设备捕获场景图像,并利用本文的算法构建物体地图。

在这种情况下,通过立体匹配获得地图点的深度信息,这些计算仅在关键帧上进行,以确保实时性能。构建的物体地图如图7(a)所示。

一旦构建了物体地图,用户可以选择目标物体进行跟踪。当用户移动物体时,系统使用KCF单物体跟踪光流跟踪算法计算物体的实时姿态。图7(b)-(d)展示了书、键盘和瓶子的动态跟踪结果。实验结果表明,本文的算法能够在动态环境中准确建模物体,为物体跟踪提供准确的物体模型和姿态,从而对实际应用非常有价值。此外,这也突显出我们的算法不依赖于特定设备,展示了其稳健性和通用性

下图为图7——实际场景中的物体建模和动态跟踪。
实际场景中的物体建模和动态跟踪

5. 本文总结

提出一种适应动态场景的多层次地图构建算法。本文成功地构建了密集的点云地图、八叉树地图、平面地图和在动态干扰存在下只包含静态背景和物体的物体地图。丰富了移动机器人的环境感知能力,拓展了动态环境下构建地图的应用场景。大量实验验证了算法的准确性和鲁棒性,动态目标跟踪实验进一步验证了算法的实用性。
未来,计划考虑除了人类之外其他可移动物体的真实运动,并以平面和物体作为地标优化相机姿态,进一步提高定位精度。

6. 个人读后感

整篇论文读下来感觉最创新的地方在于平面地图的构建与应用。整个操作就是用现有的知识和算法进行罗列和拼接,但是能达到自己的目的也挺好。

如果能在本文的基础上加上本论文实验的准确性和鲁棒性的数据值与其他算法比较的数据值的比较会更有说服力。

个人读后感只代表自己的感受,不喜勿喷,欢迎指正批评。

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

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

相关文章

数组——双指针法

双指针法 用两个同向或者反向的指针来代替两重循环。 提醒&#xff1a;不要老想着用同向双指针&#xff0c;有时候&#xff0c;相向双指针更容易解决问题。 LeetCode 27 class Solution {public int removeElement(int[] nums, int val) {int j0;for(int i0;i<nums.leng…

Hibernate(Spring-Data)3种实体继承创建表方式指南

文章目录 引言1. Hibernate 实体继承概述1.1 继承的概念和作用1.2 Hibernate 中的实体继承方式1.3 基础注解 2. 单表继承策略2.1 概述2.2 表结构设计2.3 实体类映射配置 3. 具体类继承策略3.1 概述3.2 表结构设计3.3 实体类映射配置 4. 映射超类策略(每个类一张表)4.1 概述4.2 …

vue3动态路由警告问题

{ path: "/:pathMatch(.*)*", // 必备 component: () > import("/views/error/404.vue"), }, 路由里添加

通达信接口查询持仓数据步骤(一)

股市里用到的查询通达信接口数据通常需要经历以下步骤&#xff1a; 1. 连接接口&#xff1a;首先需要使用相应的接口来连接到交易所或证券公司的服务器。这通常需要使用开发包或API提供的相关函数或方法进行连接。 2. 登录认证&#xff1a;在连接成功后&#xff0c;需要使用登录…

第八周第四天学习总结

测试linux基础并复习基础命令

含纽扣电池的产品出口澳洲需要做哪些认证?认证标准是什么?

澳大利亚含纽扣电池产品新规 01纽扣电池安全问题<<<< 在澳大利亚&#xff0c;已有儿童因为误食纽扣电池而导致死亡&#xff0c;且每月至少有一名儿童因吞咽或插入纽扣/硬币电池而严重受伤&#xff0c;导致其中一些儿童永久性损伤&#xff0c;而全世界数以百万计的…

一起来学shiny把(5)—反应式

什么是shiny&#xff1f;Shiny是一个R包&#xff0c;可让您轻松地直接从 R 构建交互式 Web 应用程序&#xff08;应用程序&#xff09;。本系列是个长教程&#xff0c;带你由浅入深学习shiny。 上一节我们在文章《R语言系列教程—–一起来学shiny吧&#xff08;4&#xff09;》…

《Go 语言第一课》课程学习笔记(十四)

接口 认识接口类型 接口类型是由 type 和 interface 关键字定义的一组方法集合&#xff0c;其中&#xff0c;方法集合唯一确定了这个接口类型所表示的接口。type MyInterface interface {M1(int) errorM2(io.Writer, ...string) }我们在接口类型的方法集合中声明的方法&#…

风力发电场集中监控系统解决方案

作为清洁能源之一&#xff0c;风力发电场近几年装机容量快速增长。8月17日&#xff0c;国家能源局发布1-7月份全国电力工业统计数据。截至7月底&#xff0c;全国累计发电装机容量约27.4亿千瓦&#xff0c;同比增长11.5%。其中&#xff0c;太阳能发电装机容量约4.9亿千瓦&#x…

有指针或者多维数组时,如何写 拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符

当成员变量里面有指针或者多维数组时&#xff0c;如何写 拷贝构造函数&#xff0c;移动构造函数&#xff0c;拷贝赋值运算符&#xff0c;移动赋值运算符 头文件 #pragma once #include<iostream> using namespace std; const int num 5; /* 重写C默认函数 */ class De…

低代码赋能| 你真的了解物联网操作系统嘛?点进来看干货!

在聊物联网操作系统之前&#xff0c;我们先来聊物联网。 什么是物联网&#xff1f;物联网&#xff08;IoT&#xff09;是实现万物互联的技术&#xff0c;它赋予物品以控制力、感知力和决策力&#xff0c;推动各类生活场景向智能化方向发展。从架构的层面来说&#xff0c;物联网…

技术科普:汽车开放系统架构AUTOSAR

01.AUTOSAR简介 汽车是现代人类实现“千里江陵一日还”的交通工具&#xff0c;而计算机则是使人脱离繁杂重复脑力劳动的生产技术&#xff0c;两者的结合催生了汽车电子产业的蓬勃发展。 21世纪初&#xff0c;随着汽车电子应用需求的不断增多与硬件资源不断丰富&#xff0c;软…

大数据时代下的精准营销

在大数据时代&#xff0c;人们的信息越来越透明&#xff0c;留在网络上的各种数据也是企业进行营销的一个重要的生产要素。一直以来&#xff0c;营销的科学性正是因为运用了自然科学中一级互联网中的数据收集手段&#xff0c;严谨的记录、搜集和分析消费者的各项数据和日常生活…

Linux以系统服务的方式启动Kafka(其他服务同理)

最终效果&#xff1a; 先回顾命令行的启动方式&#xff1a; kafka的启动 进入kafka的安装目录 1、首先启动zookeeper服务&#xff1a; bin/zookeeper-server-start.sh config/zookeeper.properties2、再启动kafka bin/kafka-server-start.sh config/server.properties &…

vue3 DOM元素渲染完成之后执行

在Vue 3中&#xff0c;可以使用nextTick函数来在DOM元素渲染完成之后执行代码。nextTick函数会在下次DOM更新循环结束之后执行提供的回调函数。 例如&#xff0c;在Vue 3的组件中&#xff0c;可以这样使用nextTick函数&#xff1a; import { nextTick } from vue;export defa…

Vue实现Antv/X6中的示例,以及一些er图开发场景

通过Vue实现Antv X6中的示例&#xff0c;以及一些开发场景&#xff0c;代码已经丢到仓库里了。 lwstudy/antv-x6-vue-demo: Vue实现Antv X6中的示例&#xff0c;以及一些开发场景 (github.com)learn-antv-x6: antv/X6学习 (gitee.com) 介绍 使用脚手架&#xff08;自动生成接…

为了他的鸟,做件很叛逆很酷的事儿

有种鸟儿&#xff0c;叫隐鹮&#xff08;Geronticus eremita&#xff09;&#xff0c;大小如鹅&#xff0c;头部光秃&#xff0c;嘴巴巨大&#xff0c;一个字&#xff0c;丑。可是&#xff0c;它还有一个特点&#xff0c;面临濒危。 为了能在欧洲冬季存活&#xff0c;这种鸟儿需…

mfc140u.dll丢失如何修复?解析mfc140u.dll是什么文件跟修复方法分享

大家好&#xff01;今天&#xff0c;我将和大家分享一下关于计算机中mfc140u.dll丢失的6种解决方法。希望我的分享能对大家在计算机使用过程中遇到问题时提供一些帮助。 首先&#xff0c;我想请大家了解一下什么是mfc140u.dll文件。mfc140u.dll是一个动态链接库文件&#xff0…

java八股文面试[多线程]——进程与线程的区别

定义 1、进程&#xff1a;进程是一个具有独立功能的程序关于某个数据集合的以此运行活动。 是系统进行资源分配和调度的独立单位&#xff0c;也是基本的执行单元。是一个动态的概念&#xff0c;是一个活动的实体。它不只是程序的代码&#xff0c;还包括当前的活动。 进程结构…