【低成本-点云采集】使用XRFoundation实现点云采集

使用XR Foundation

现基于XR Foundation的接口实现渲染和采集

关键类

ARPointCloudManager

介绍

ARPointCloudManager:ARTrackedObjects的管理器。使用XRDepthSubsystem来识别和跟踪物理环境中的深度数据。

属性
Name Description
gameObjectName The name to be used for the GameObject whenever a new Object is detected.
pointCloudPrefab Getter or setter for the Point Cloud Prefab.
方法
Name Description
GetPrefab() The Prefab that will be instantiated for each ARPointCloud. Can be null.
OnAfterSetSessionRelativeData(ARPointCloud, XRPointCloud) Invoked after each point cloud is updated with new data.
OnDisable() Invoked when this MonoBehaviour is disabled. Used to unregister with the ARRaycastManager.
OnEnable() Invoked when this MonoBehaviour is enabled. Used to register with the ARRaycastManager.
OnTrackablesChanged(ListCloud>, ListCloud>, ListCloud>) Invokes the pointCloudsChanged event.
Raycast(Ray, TrackableType, Allocator) Implementation for the IRaycaster interface. Raycasts against every point cloud.
事件
Name Description
pointCloudsChanged Invoked once per frame with information about the ARTrackedObjects that have changed, that is, been added, updated, or removed. This happens just before ARTrackedObjects are destroyed, so you can set ARTrackedObject.destroyOnRemoval to false from this event to suppress this behavior.

点云渲染

这里介绍如何用XR Foundation的接口渲染点云。

脚本介绍

这里,我已实现两个对点云进行可视化的脚本,一个是通过粒子系统渲染点云,一个是通过Mesh渲染点云,两种都可用。

  • EqPointCloudPointsParticleVisualizer
  • EqPointCloudPointsMeshVisualizer

此外,也可使用XRFoundation提供的Visualizer,如下图。

可视化组件

制作预制件

使用粒子系统可视化:

将挂载EqPointCloudPointsParticleVisualizer的组件制作成预制件(名为”ParticlePointCloudPrefab“)。

EqPointCloudParticleVisualizer包含渲染“CurrentFrame”和“All”两种模式。因此这里可以不使用XRFoundation的ARPointCloudParticleVisualizer组件

粒子

使用Mesh可视化:

将挂载EqPointCloudPointsMeshVisualizer的组件制作成预制件(名为”MeshPointCloudPrefab“)。

网格

使用示例

仅使用XR Foundation的示例脚本即可。

步骤如下:

  • 在“AR Session Origin”对象下添加 “ARPointCloudManager”组件
    • 在“ARPointCloudManager”组件的PointCloudPrefab添加预制件(“…PointCloudPrefab”,这里二选一)

注意:挂载“ARPointCloudManager”组件的对象需要同时有“ARSessionOrigin”组件。

  • 在“AR Session Origin”对象下添加 “EqVisualizationMode”组件

    • 根据需求设置"Mode"值,若为All,则渲染所有已识别到的特征点。

挂载组件

注意事项

在“PointCloudPointsPrefab”预制件所挂载的组件中。

这里需要注意的是:若使用粒子系统可视化组件,粒子系统一定要在自定义的脚本(下图红框所示)的前面。

否则,即使当“Mode”设置为“All”,已经渲染的点云粒子也会在相机移动后消失。

注意顺序

点云采集

实现思路

  • 若通过粒子系统实现可视化,则可通过读取粒子的位置信息从而实现点云数据的保存。
  • 若通过Mesh实现可视化,则可读取mesh的顶点信息从而实现点云数据的保存。

使用示例

这里实现了点云采集器,直接挂载脚本即可

点云采集

在相关Button的OnClick事件中关联方法

事件绑定

采集点云

运行程序 -> 移动设备进行采集 -> 保存点云

数据保存路径:\Android\data\com.xxx.xxx\files\PointCloud\Data_xxx.pts

采集点云

点云加载

在Unity编辑器中导入查看

采集点云

关联文档

【低成本-点云采集】使用深度API实现点云采集

相关推荐

  1. PCL 采样VoxelGrid滤波器

    2024-04-12 04:18:06       11 阅读
  2. 固定数量采样算法

    2024-04-12 04:18:06       8 阅读
  3. 处理》 聚类

    2024-04-12 04:18:06       52 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-12 04:18:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-12 04:18:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-12 04:18:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-12 04:18:06       18 阅读

热门阅读

  1. jQuery学习笔记(3.0)

    2024-04-12 04:18:06       14 阅读
  2. sql注入笔记整理

    2024-04-12 04:18:06       13 阅读
  3. 无过错方请求离婚损害赔偿的权利

    2024-04-12 04:18:06       14 阅读
  4. redis缓存雪崩,缓存穿透

    2024-04-12 04:18:06       16 阅读
  5. UVA230 Borrowers 图书管理系统 解题报告

    2024-04-12 04:18:06       13 阅读
  6. Python:闭包

    2024-04-12 04:18:06       14 阅读
  7. Web蓝桥杯刷题记录——燃烧你的卡路里

    2024-04-12 04:18:06       13 阅读
  8. oracle全量、增量备份

    2024-04-12 04:18:06       14 阅读
  9. 【Python】Python中大文件切割的艺术

    2024-04-12 04:18:06       16 阅读
  10. leetcode解题思路分析(一百五十五)1352 - 1358 题

    2024-04-12 04:18:06       15 阅读