Appearance
创建一个空间计算应用
TIP
本章节将指导开发者通过 SDK 搭建一个空间计算的 demo;
TIP
SDK 2.6.0 升级为 2.7.0 之后,对‘SpatialComputingManager’预设体进行了修改,重构其组件,仅保留 EZXRSpatialComputingManager.cs,隐藏 SpatialComputingController,移除 CpuImageController。其中对内部的 CopyStreamingAssets 组件,因其功能并非 SDK 必备组件,单独抽出并挂载到 Demo 中,因此 Android 对 Asset 资源的访问限制,需要开发者进行关注,如 2.6.0 直接升级 2.7.0,或者直接使用 2.7.0 从零使用 2D 跟踪功能的时候,参考本文的**‘第二节的第 2 条’**
一、创建空间计算的基础流程
- 导入 SDK 资源包
- 删除场景中的 MainCamera
- 为场景添加 6Dof 能力:Heirarchy 视图中右键空白处,依次选择:XRAbilities - SpatialTracking,将在场景中自动创建 CameraRig
- 基于 AROS 开发的应用还需要为场景添加 AROS 系统交互能力:Heirarchy 视图中右键空白处,依次选择:XRAbilities - Additional... - SystemManager,将在场景中自动创建 SystemManager
- 为场景添加手势/手柄控制能力:Heirarchy 视图中右键空白处,依次选择:XRAbilities - InputSystem,将在场景中自动创建 InputSystem
InputSystem 支持三种模式:Dynamic mode、Hand Tracking、Controllers,默认开启 Dynamic mode。
- 创建 SpatialComputingManager:Heirarchy 视图中右键空白处,依次选择:XRAbilities -SpatialComputing,将在场景中自动创建 SpatialComputingManager
- 根据以下步骤创建 Bodyrig,即给 Camerarig 创建一个空父级:
- 配置 SpatialComputingManager 中的各个选项:
- LocCamType:默认使用 RGB 相机作为定位数据源,可按照项目需求在灰度相机与 RGB 相机之间切换
- Use Camera AE_for Moving Mode:开启定位曝光策略功能,默认开启,用于优化运动状态下的图像获取
- CameraOffsetTransform:上一条所言,用于绑定 BodyRig,应用后可生效空间定位结果
- Url:空间定位的 url,请联系易现商务获取
测试 Url:https://yx-reloc.easexr.com/managed/mng-reloc-1026/api/alg/cloud/aw/reloc?map=4201910648861
- Request Loc Mode:定位请求模式,默认 LocRequestAuto 自动定位模式,还可以设置“LocRequestManual”用于开发者根据需求主动调用触发定位请求
- Img Undist On Device:定位图像端上去畸变功能,默认开启
- 测试资源:
TIP
由于点云资源过大,端上加载会有异常,完成内容摆放后记得删除再编译出包;
基于点云模型摆放虚拟资源
- 通常情况下虚拟内容资源在云定位成功后才显示可为用户提供更为自然的体验,可参考内置 Sample 实现,如下图所示:
Logic 模块的 display model 控制内容的显示隐藏,开发者可以把内容的父节点参照“land”添加到 display model 上;
- 通常情况下虚拟内容资源在云定位成功后才显示可为用户提供更为自然的体验,可参考内置 Sample 实现,如下图所示:
编译此场景到设备,运行后即可进行定位观察
- 测试识别图:
- 测试识别图:
二、参考说明
1). 主动单次调用 VPS
VPS 默认是自动按规定 Loop 进行定位,开发者可以根据需求开发“主动定位”功能,主动单次调用 VPS 定位,或提供给用户刷新确认位置的功能以提升用户体验,请参考
2). 算法配置修改入口
空间计算模块提供 VPS 与 SLAM 平滑融合功能,以及图像运动阈值判断等,可联系易现工作人员进行调整修改以优化体验
备注:
- 资源包可以放在设备存储中其他可访问的位置,不一定要放置在 Unity StreamingAssets 中,保证初始化 Tracking2DManager 初始化传入的路径正确且资源无误也是可以的。
- 本文档的示例是将算法配置资源放在 StreamingAssets(Unity StreamingAssets 是存放资源的目录,对应 Android 应用的 assets 目录,资源的访问需要借助 Android AssetManager 进行解压),SDK 也提供了 CopyStreamingAssets.cs,用于最简单的资源解压到应用私有目录的功能,如 SDK Sample SpatialComputing 中,CopyStreamingAssets 完成复制工作后,会由 OnCopyCompleted 回调通知(上图)
- 另外 SDK 在导入工程的时候,会自动从“Assets/.../Demos/SpatialComputing/xxxx”复制到“Assets/StreamingAssets/SpatialComputing/xxxx”,因此开发者使用自己的资源时,应当创建新的目录,以避免被 SDK Sample 的资源覆盖