【ARFoundation学习笔记】点云与参考点

2023-11-10 21:04

本文主要是介绍【ARFoundation学习笔记】点云与参考点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述


写在前面的话

本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。主要目的是为了加深记忆。其中难免出现纰漏,更多详细内容请阅读原文以及官方文档。

汪老师博客


文章目录

  • 点云
    • 新建点云
  • 参考点
    • 参考点的工作原理
      • 何时使用参考点
      • 使用参考点的注意事项


点云

AR应用的目的是为用户加强对现实环境的体验,为用户带来真实性。因此AR应用需要理解所处的周围环境,知道哪里是垂直平面,哪里是水平平面。

点云是特征点的集合,特征点是指AR Foundation通过VIO检测捕获的摄像头图像中的视觉差异点,这些视觉差异点是从图像中明暗、颜色、灰度差异比较大的点中挑选出来的,AR Foundation会实时更新这些特征点。

在对图像的实时检测中,点云会不断获取特征点,一些特征点被删除,也有一些特征点被加入,通过算法获得那些比较稳定的特征点,这些稳定的特征点就会被机器视觉解析为特定的位置信息,那么只需计算特征点的变化就可以计算出物体在现实中位置的变化。

检测的特征点信息与设备IMU的惯性测量结果结合,不仅可以跟踪用户(手机设备)随着时间推移而相对于周围世界的姿态,还可以大致了解用户周边的环境结构。

在之前平面管理时我们提到,AR Plane上有个public的字段——特征点变化阈值来设定可接受的特征点的置信值。

由众多的特征点,就构成了点云,单个特征点不是Trackable的(但可以通过ID识别),而点云是Trackable的。

每个特征点都具有Vector3的Position信息,ulong类型的id,和float的置信度Confidence value。特征点的位置信息是Session空间中的坐标值,可以通过ARPointCloud.position来获取。id则通过ARPointCloud.identifiers来获取。置信度则表示了机器视觉对特征点识别的确信程度。

点云由AR Point Cloud Manager组件负责管理,该组件负责点云的创建以及特征点的创建、更新、移除。特征点检测的启用和禁用、特征点的显示和隐藏与平面处理方式完全一致。

点云数据可以辅助平面检测,更重要的是点云数据是环境重建的基础,这对AR理解环境非常关键。随着时间的延长,点云数据中的特征点会迅速增长,为了防止特征点过多而影响性能,点云中的总特征点必须要控制在一定的数值范围内,如ARCore将特征点的最大数限制在61 440个。


新建点云

点云的创建也很简单,类比于之前平面的创建流程。此后的一些物体的创建在ARfoundation中也都是类似的:

在这里插入图片描述

  • 首先创建一个AR Default Point Cloud组件

在这里插入图片描述

  • 然后将刚刚的AR Default Point Cloud组件做成预制件,在AR Session Origin上挂载一个AR Point Cloud Manager,根据我们之前的学习,AR Session Origin上处理的是Session空间上的姿态信息,所以要实例化Trackable物体的话,就需要把对应的Manager挂载在AR Session Origin上。
    在这里插入图片描述

  • 编译运行,找一个富纹理物体或表面,左右移动手机,这时AR Foundation会对特征点进行检测,效果如图所示。

本节所演示的点云数据会实时变化,置信值小的点云数据会被移除,新的点云数据会被加入,因此,如果希望保存所有检测到的点云数据,可以将这些数据存储在Dictionary或者List中,这对一些应用,如网格重建、遮挡实现会非常有用。


参考点

AR Foundation中的参考点(Reference Point)与ARCore中的Anchor或ARKit中的ARAnchor其实是同一概念,即锚点。由于跟踪使用的陀螺仪的特性,误差会随着时间积累,因此需要通过图像检测等方式对误差进行修正,如果已存在于空间上的对象不同步进行校正则会出现偏差。锚点的功能就是绑定虚拟物体与AR空间的位置。(类似于UGUI的锚点,以Anchor为中心去固定与其他空间的相对位置)

被赋予Anchor的对象将被视为固定在空间上的特定位置,并自动进行位置校正,因此锚点可以确保物体在空间中保持相同的位置和方向,让虚拟物体在AR场景中看起来待在原地不动。

参考点的工作原理

在AR应用中,虚拟物体在现实空间的姿态信息每帧都会更新,由于陀螺仪的误差累积,虚拟物体在应用中会出现飘移现象。如果将一个锚点固定在空间中,来计算虚拟物体相对于锚点的姿态信息,就可以避免位置的飘移,这个锚点就是参考点Reference point。然而还需要保证参考点在空间中的姿态能保持不变,也就是需要消除参考点的偏差。消除这个偏差的方法就是视觉校准技术,通过视觉校准来保证参考点在绝对空间中保持不变的位置与方向。

将参考点作为锚点,在绝对空间中的参考点姿态信息不变的前提下,保持参考点上连接的虚拟物体相对于这个锚点的姿态信息,就可以保证在每帧的实时更新中虚拟物体相对于现实世界空间的姿态变化,就像虚拟物体真的固定在了现实空间一样。

何时使用参考点

参考点是一种对资源消耗比较大的可跟踪对象,参考点的跟踪、更新、管理需要大量的计算开销,因此需要谨慎使用并在不需要的时候分离参考点。

作者对使用参考点的时机给出了几点建议:

  1. 一个参考点保持多个虚拟对象的相对位置,这样这些物体之间的位置关系就不会受到其他因素影响。
  2. 保证虚拟物体的独立性。在前文中我们使用射线检测,在触碰到的平面物体上创建了预制体。通常情况下没有问题,但如果因为某些原因导致AR Plane Manager被禁用、平面被销毁或者隐藏,就会影响到以平面为参考的虚拟物体位置的稳定性,导致虚拟物体飘移。如果使用参考点来锚定物体,就能保持物体的独立性而不受到平面的影响。
  3. 提高追踪稳定性。由于参考点需要独立追踪,因此能提高挂载在其上的物体的追踪稳定性。
  4. 保持追踪对象与平面的相对位置稳定。使用AttachReferencePoint()方法可以将一个参考点与平面绑定起来,从而保持挂载在该参考点下的虚拟物体与平面保持关系一致。如在一个垂直平面上使用AttachReferencePoint()方法建立一个参考点(位置关系的传递,虚拟物体锚定平面位置,平面位置锚定参考点),在参考点更新时就会锁定x、z分量值,从而保持参考点与平面位置关系始终一致。

在AR Foundation中,AR Reference Point Manager提供了如表所示方法管理参考点:

方法描述
AddReferencePoint(Pose)用给定的Pose添加一个参考点,Pose为世界空间中的姿态,返回一个新的ARReferencePoint。
AttachReferencePoint(ARPlane, Pose)用给定的Pose创建一个相对于已检测到平面的ARReferencePoint,其中ARPlane是一个已检测到的平面,Pose为世界空间中的姿态。
RemoveReferencePoint(ARReferencePoint)移除一个ARReferencePoint,如果移除成功则返回True,如果返回False通常意味着这个ARReferencePoint已经不在跟踪状态。
referencePointsChanged在ARReferencePoint发生变化是触发的事件,如一个新的ARReferencePoint创建、对一个现存的ARReferencePoint进行更新、移除一个ARReferencePoint。

AddReferencePointAttachReferencePoint都是创建了新的参考点。但是又有所不同,从两个方法的名称不难看出,一个是新增参考点,一个是绑定参考点。新增的参考点位基于指定的Pose信息,并进行独立跟踪,如果Session变化时它可能会随之更新。

AttachReferencePoint方法则是将参考点绑定,附加在某平面上,以平面为锚点保持参考点与平面之间的相对距离。

在添加ARReferencePoint时需要注意的是,添加一个ARReferencePoint需要一到两帧的时间,在添加ARReferencePoint操作执行后到添加成功之前,添加的ARReferencePoint处于“pending”状态,这个“pending”状态值可以通过ARReferencePoint.pending属性进行查询。。同样,移除一个ARReferencePoint也需要一到两帧的时间,如果尝试移除一个还没有添加成功ARReferencePoint,不会有任何效果。同时,一定不要手动使用Destroy()方法去销毁ARReferencePoint,这会引发错误。如前文所述,ARReferencePoint由ARReferencePointManager负责管理,所以务必要使用RemoveReferencePoint(ARReferencePoint)方法移除ARReferencePoint。

使用参考点的注意事项

  1. 尽可能复用参考点,由于每个参考点都独立追踪,且追踪参考点较为消耗性能,因此在使用参考点时尽量让多个相互靠近的物体使用同一个参考点,而不是为每一个物体都创建参考点。
  2. 保持物体靠近参考点。锚定物体时,最好让需要连接的虚拟对象尽量靠近参考点,避免将物体放置在离参考点几米远的地方,以免由于AR Foundation更新现实世界空间坐标而产生意外的旋转运动。如果确实需要将物体放置在离现有参考点几米远的地方,应该创建一个更靠近此位置的新参考点,并将物体连接到新参考点。
  3. 分离未使用的参考点。为提升应用的性能,通常需要将不再使用的参考点分离。因为对于每个可跟踪对象都会产生一定的CPU开销,AR Foundation不会释放具有连接参考点的可跟踪对象,从而造成无谓的性能损失

这篇关于【ARFoundation学习笔记】点云与参考点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个