ARCore之路-环境理解之点云

版权声明:David Wang原创ARCore文章,仅供学习研究之用,不得用于任何商业目的,未经授权不得转载! https://blog.csdn.net/yolon3000/article/details/82725068

  AR是对现实环境的增强,运动跟踪解决了用户在现实环境中自己在哪里的问题(这个在哪里是以初始成功后的位置为基准的),但运动跟踪本身并不能解决用户周边环境是什么的问题,运动跟踪不能识别出平面,也不能识别出物体,但AR应用必须要能理解其本身所处的环境,这样才能为用户带来沉浸感和真实感,这就是ARCore环境理解功能该做的事,ARCore环境理解通过VIO (visual-inertial odometry)来识别环境中的对象和特征,通过运动跟踪来实时的更新这些对象与特征的姿态,随着时间的延长,就能建立起用户周边环境的3D模型,以达到环境理解的目的。从本节开始,我们将探讨如何使用Arcore API来更好地理解用户的环境。

一、特征点

这里写图片描述

  特征点是指ARCore 通过VIO检测捕获的摄像头图像中的视觉差异特征点,这些视觉差异点是从图像中明暗、颜色、灰度差异比较大的点中挑选出来的,ARCore 会实时跟踪和更新这些特征点,一部分特征点会被删除,同时也会不断的加入新的特征点,通过算法能获取到比较稳定的特征点,这些特征点在机器视觉中就可以被解析成特定的位置信息,通过特征点即可以计算其位置变化情况。这些特征点信息与设备 IMU 的惯性测量结果结合,不仅可以跟踪到用户(手机设备)随着时间推移而相对于周围世界的姿态,同时ARCore 还会通过检测到的特征点和平面来不断改进它对现实世界环境的理解,ARCore 也是通过特征点来检测平面的。
  众多的特征点即可构成特征点云,简称点云。

二、点云的可视化

  ARCore 可以检测到点云数据,下面我们来将其可视化以便观察。
  新建一个Unity工程,取名为PointCloud,在工程中导入ARCore SDK。将SDK中的ARCore Device 和 Environmental Light Prefabs拖到Hierarchy中,并删除main camera。为了可视化特征点数据,我需要新建一个Material。我们先在Assets目录下新建一个文件夹并取名为Materials,然后在Materials目录下新建一个Material并取名为PointCloud,在PointCloud的Inspector中,选择Shader为 ARCore/PointCloud,如下图所示:

这里写图片描述

  现在我们有了显示特征点的材质,在Hierarchy中新建一个3D Sphere并取名为VisualPoint,然后保持在选中VisualPoint,在其Inspector中挂载PointCloud Visualizer脚本,并将刚才制作的PointCloud材质赋给VisualPoint。如下图所示:

这里写图片描述

  编译运行应用,效果如下图所示:

这里写图片描述

三、点云跟踪

  正如我们前面所讨论的,Arcore中的运动跟踪是通过识别和跟踪用户周围可识别的特征点来完成的。然后,ARCore通过VIO (visual-inertial odometry)来实时的更新这些特征点,这个过程并不需要我们处理,ARCore会自动删除那些不稳定的特征点并添加新的检测到的特征点。
  ARCore通过跟踪特征点,不仅能更精确的跟踪用户的姿态,还能加深对环境的理解,ARCore在内部是将特征点作为对象来处理的,即特征点上也可以挂载锚点(Anchor)进而可以将物体锁定在固定位置。
  随着时间的延长,ARCore在加深了环境理解的同时,跟踪的特征点也会出现暴涨,为了防止特征点过多而影响性能,ARCore将特征点的最大数限制在61440个。
  特征点不仅代表那些可识别的点,而且因为这些点与我们识别环境中的物体或表面是相同的点,所以点孕可以用于跟踪和解释环境。

猜你喜欢

转载自blog.csdn.net/yolon3000/article/details/82725068