空中操作仅通过距离映射对遮挡目标进行鲁棒定位(RAL2022)

2024-02-01 07:20

本文主要是介绍空中操作仅通过距离映射对遮挡目标进行鲁棒定位(RAL2022),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者丨fishmarch@知乎

来源丨https://zhuanlan.zhihu.com/p/457168226

编辑丨3D视觉工坊

介绍一下我们已经被RA-L接受的一篇文章。这篇文章不是做SLAM,但和SLAM密切相关,还是挺有意思的。在这里仅介绍总体思路,详细内容还请查阅论文。

论文链接:https://shiyuzhao.westlake.edu.cn/style/2022RAL_XiaoyuZhang.pdf

视频链接:https://www.youtube.com/watch?v=t6-0zaRuFIY;

https://www.bilibili.com/video/BV11T4y1m7tN?share_source=copy_web&vd_source=534ab035a008ff26525503ac9b890e83

背景

在SLAM中,我们希望实现传感器(机器人)的自身定位,为此需要建立基于空间点等几何特征的环境地图;通过地图特征与传感器观测量的几何约束关系求解传感器位姿状态。

而在这项工作中,我们希望实现目标的定位,也就是获得目标点相对于传感器坐标系的三维空间位置。该工作的背景是空中操作机器人,其中目标的遮挡、丢失等问题较多。因此我们希望能够实现对遮挡物体的定位,也就是即使没有看到目标,也可知道其相对位置。

这一问题也可以借助SLAM的方法实现,例如将目标点建立到环境地图中,便可以容易地计算其到相机的相对位置。但这一方法的精度会受到目标点位置精度,相机定位精度等因素的影响。

在这篇论文中,我们希望对目标的定位不依赖于相机的自身定位。因此,我们仿照SLAM提出了新的目标定位方法,为此我们建立了新的地图形式,最终实现的是目标点的相对位置计算,该过程中不进行相机的定位。

方法

该方法基于RGB-D相机实现,也可拓展到双目相机。目标位置以点的形式计算和保存,需要在第一帧图像中给定。在具体实现中,我们用特征点表示目标点,因此文中观测到目标点指的是与目标点匹配成功。

目标定位的核心算法其实比较简单,就是在观测到目标点时,保存目标点与周围特征点的空间关系;没有观测到目标点时,利用匹配的特征点与目标点的空间关系计算目标点的位置。这里的空间关系可以有不同形式,例如方向向量等。但我们选用的是距离。因为距离是与坐标系无关的,因此在进行目标定位的过程中不需要已知相机的自身位姿。基于距离的目标定位其实也比较简单,类似于GPS等三点定位(可参考:iBeacon定位-三点定位实现)。在空间中,已知不在同一平面上的四个点,以及它们到目标点的距离,即可计算出唯一的目标点位置。

具体来讲,我们在每帧图像中提取ORB特征点,其深度值可由深度图或双目匹配计算得到,因此可获得特征点在相机坐标系下的三维坐标:

78164c7b1e29675205effdae39b3272b.png

对目标点做同样处理,因此可在一帧图像中计算目标点到特征点的距离:

b8d4369169d7f64fed89bb337b848b1d.png

fbae208ea2e916570a79a265eb4391d3.png

系统

根据上述方法,我们仿照SLAM搭建了一个目标定位系统:

3ca456cf764ce8acc73e15bb6c927b23.png

pipeline

可以看出来,这里与SLAM是非常像的,也是分为了建图定位两部分,但含义不同。建图中,我们仅保存特征点到目标点的距离,并不保存点的三维坐标,在论文中,该地图被称为target-centered range-only map。定位中,实现的是求解目标点在当前相机坐标系中的三维空间位置,核心是构建上述的优化方程,难点是特征点匹配。

仿照SLAM系统,在特征点匹配时也采用了与上一帧匹配,在局部地图中匹配等多个过程。计算求解时使用上一帧的结果作为初值。从关键帧中构建新的地图点,更新之前的地图点等。还有其他一些实现细节可以在论文中查看,基本上是和SLAM系统一一对应的,就差一个回环检测了,其实也可以加(但我懒)。整个系统并不复杂,特别是对熟悉SLAM的同学来说,所以就不在此赘述了。

实验

实验选取了两组数据,一组来自ICL-NUIM数据集,因为它可以提供目标点的真值;另一组是我们自己使用realsense采集的数据,并用VICON提供了真值。在两组实验中,我们都和SLAM(ORB-SLAM3)做了精度对比。

5b9f956d7cf60d49f9247a7206e710ed.png

其中一组实验数据如上图所示,在第一帧中标记瓶盖处为目标,随着无人机的运动,目标会被机械臂遮挡,或移出相机画面,但整个过程中,我们的方法都会提供目标位置。定位误差如下图所示,蓝色曲线表示是否匹配到了目标点,换色曲线为定位误差,可以看出无论目标是否被遮挡,目标都可以定位到,且误差几乎不变。其中有一小段由于特征匹配等原因失败了,但后面可以恢复回来。

daa267e663307abac3286fc140ac0c8f.png

ea54b0f4663a059ec746b441b72c139a.png

60afc9732be876de6b9d8f7cedbaaf30.png 014b96c335d747405452d76a4a294b3a.png

SLAM方法中误差较大,除了累积误差等。我觉得是因为,SLAM是将所有的特征点位置、相机位姿放在一个优化方程中求解一个整体误差最小的结果,但这并不意味着其中的某一个误差(目标点位置)会变小,甚至可能变大。例如下图所示的在ICL数据集中的某次定位结果,使用SLAM方法时,目标点在一次局部优化后位置出现了很大的变化,误差也立刻增大。

总之,使用SLAM方法定位时,目标点位置会受到相机位姿,其他特征点位置等各种误差的影响。而我们的方法希望能够使目标定位精度不受这些额外量的影响,且可应对目标遮挡、丢失等问题。

6a12dd7662d2b33c15e6abd1c4ab1234.png

本文仅做学术分享,如有侵权,请联系删文。

3D视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

15.国内首个3D缺陷检测教程:理论、源码与实战

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

347c316b1c2504e001fffbc108e95b81.png

▲长按加微信群或投稿

82052899c05bd59c07a0ceddad8e32b1.png

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

9b595c3ec5d298b1eeee613794b089b0.png

 圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

这篇关于空中操作仅通过距离映射对遮挡目标进行鲁棒定位(RAL2022)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666499

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create