XJ+Nreal 高精度地图+Nreal眼镜SDK到发布APK至眼镜中

仅支持Anroid平台 Nreal套装自带的计算单元,其实也是⼀个没有显示器的Android设备 新建unity⼯程,将⼯程切换Android平台。

正在上传...重新上传取消正在上传...重新上传取消

Cloud XDK Unity User Manual for Nreal ARGlasses

该XDK是针对 NReal AR 眼镜的版本,运行硬件设备也仅在Nreal眼镜套装上(使用自带的计算单元)或支持Nreal运行的Android手机。

可通过Nreal官网做进⼀步了解https://developer.nreal.ai/develop/discover/introduction-nrsdk 针对Nreal SDK,基于Nreal的追踪等功能,做行进⼀步开发。

⼀、开发环境说明

产品使用Unity引擎完成开发支持版本:2019.4及以上

正在上传...重新上传取消正在上传...重新上传取消

⼆、⼯程环境配置

仅支持Anroid平台

Nreal 套装自带的计算单元,其实也是⼀个没有显示器的Android设备

正在上传...重新上传取消正在上传...重新上传取消新建unity⼯程,将⼯程切换Android平台

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | |------------------------------------------------------------------------|-----------| | Setting | Value | | Player Settings > Resolution and Presentation > Default Orientatio n | Portrait | | |

对Android平台做⼀些设置:

正在上传...重新上传取消正在上传...重新上传取消

|---|------------------------------------------------------------------------------------------------------------------------------|---|
| | | |
| | 正在上传...重新上传取消正在上传...重新上传取消 ||
| |
| | 正在上传...重新上传取消正在上传...重新上传取消 |

|--------------------------------------------------------------|-----------------------------------------------------------------|
| Setting | Value |
| Player Settings > Other Settings > Auto Graphics API | false |
| Player Settings > Other Settings > Graphics APIs | 仅保留OpenGLES3选项 |
| Player Settings > Other Settings > Package Name | Create a unique app ID . For example com.nreal.helloM R |
| Player Settings > Other Settings > Minimum API Level | Android 8.0 (API level26) or higher |
| Player Settings > Other Settings > Scripting Backend | IL2CPP |
| Player Settings > Other Settings > Api Compatiility Lev el | .NETStandard 2.0 |
| Player Settings > Other Settings > Target Architectures | Only ARM64 |
| Player Settings > Other Settings > Internet Access | Require |
| Player Settings > Other Settings > Write Permission | External (SDCard) |
| Player Settings > Other Settings > Allow 'unsafe' code | True |

正在上传...重新上传取消

|---|------------------------------------------------------------------------------------------------------------------------------|
| |
| | 正在上传...重新上传取消正在上传...重新上传取消 |

|---------------------------------------------|------------|
| Setting | Value |
| Player Settings > Quality > V Sync Coun t | Don't Sync |

|---|-----------------------------------------------------------------------------------------------------------------|
| |
| | 正在上传...重新上传取消 |

三、导⼊SeengeneXDKunity

正在上传...重新上传取消正在上传...重新上传取消获取 "SeengeneCloudXDKNreal.unitypackage" 资源包

这个资源包中已经包含了底层Nreal的SDK 目前使用的版本是version1.5.7

导⼊到unity⼯程:

正在上传...重新上传取消正在上传...重新上传取消 导⼊成功后,项目结构如图:

确保没有错误后,进⼊下⼀步操作

四、Unity ⼯程结构说明

    1. 、⼏个关键的目录结构

上图中的这⼏个文件夹是项目的 基础关键文件夹,不能删除,也不要修改位置,修改后可能会使⼯程不能正常运行

NRSDK:Nreal眼镜SDK。包括Nreal自带的⼀些Demo等。

Plugins:⼯程中使用的⼀些插件,包括运行时Debug、Json解析、渲染点云模型、OpenCV

XDKUnityPluginCloud:XDK编辑时和运行时库文件,用来实现点云模型的下载和运行时业务逻辑。以及项目示例,用来存放各个项目 对应的场景、模型、脚本、UI切图等资源

    1. 、推荐目录结构分类

为了保持⼯程结构规范性,建议保留这3个目录不变,新建⼀个文件夹放置项目自⼰的对象。在这个新建的文件夹中,对资源文件按照类型和功能进行分⼦文件夹管理。

    1. 、主场景Hierarchy结构简单说明

项目场景有⼀个"Demo.unity"

正在上传...重新上传取消位于"Assets\XDKUnityPluginCloud\Demo\Scenes"中

主场景⼏个关键的结点说明

NRCameraRig:

Nreal相机功能组件,用来渲染虚拟场景。

正在上传...重新上传取消正在上传...重新上传取消LeftCamera、CenterCamera、RightCamera是Nreal自带的3个摄像机。

正在上传...重新上传取消XDKUIManager,主界面,由于产品使用方式是头戴式眼镜,界面元素需要跟随眼镜移动,所以该UI界面放置在了3D场景中,放 在了NRCameraRig下面。这个UI主界面,开发具体的业务逻辑主要位置,需要做⼤量改动。

NRInput:

Nreal功能组件,获取输⼊信息,这个结构不可以改变

XDKCloudSession:

SDK组件,实现了重定位基本业务逻辑,目前不需要做修改

SceneRoot:

场景根结点,主要用来放置各种3D物体,同样也是开发业务逻辑的主要位置,需要做⼤量的改变。

正在上传...重新上传取消正在上传...重新上传取消 AddedObjects用来存放应用中需要显示的3D虚拟对象。 MapRootDemo是项目点云模型,是开发者在空间中摆放物体的参考。

正在上传...重新上传取消JingYu是预先放在这里,用来做视觉参考的模型。开发者在熟悉本SDK后可以将这个模型删除掉。

Directional Light:

默认平行光,开发者可以设定自⼰需要的平行光。

对于App中要显示的3D物体,只要是有在场景中有特定位置的物体,就必须要放置在SceneRoot下边。 SceneRoot的Transform属性设置必须保持默认,位置旋转和缩放不可以更改。

    1. 、XDK核心组件及脚本编写简单说明:

正在上传...重新上传取消正在上传...重新上传取消位于 "XDKSession"物体上有两个C#脚本组件: XDKCloudSession.cs 和 XDKCloudInterface.cs

XDKCloudSession:

负责通过ARFoundation获取相机图像和位姿,传递给重定位算法,获取重定位结果。使用重定位结果,实时更新场景Transformer。

XDKCloudInterface

负责通过网络的访问云定位算法,实现了获取SessionID,和重定位功能。是被XDKCloudSession使用的⼯具类。

    1. 、XDK调试信息组件说明:

正在上传...重新上传取消正在上传...重新上传取消脚本CloudDemoController用来做调试信息的管理。其功能包括:

正在上传...重新上传取消正在上传...重新上传取消 对XDKCloudSession的单例进行事件监听,当事件发生时在调试界面上显示对应的关键信息说明。 和调试界面上的按钮进行绑定,当用户操作按钮时作出相应操作,方便用户调试。

建议开发者早期关注调试界面,以便掌握SDK的当前⼯作状态。后期产品发布前可以对调试信息模块做隐藏或者直接删除。

五、加载点云模型文件、设置场景

通过"SeengeneXDK" 编辑器下载文件具体过程如下

    1. 、打开 "SeengeneXDK"编辑器

正在上传...重新上传取消正在上传...重新上传取消选择 "Window > Seengene XDK" 打开编辑器窗⼝

    1. 、获取项目信息

通过指定的地图ID获取项目信息

在 Map ID 输⼊框中,输⼊项目ID,项目ID⼀般是⼀串10位-12位 的数字

点击按钮 "1.GetMapInformation",会从服务器获取项目信息,然后显示在编辑器界面上。目前显示的项目信息包括:

正在上传...重新上传取消正在上传...重新上传取消企业(Company)、

正在上传...重新上传取消正在上传...重新上传取消 企业ID(CompanyID)、项目(Program)、

正在上传...重新上传取消正在上传...重新上传取消项目ID(ProgramID)、

正在上传...重新上传取消 Ply点云文件下载地址(PlyFileUrl)、 点云缩放配置文件地址(ScaleFileUrl)

成功获取信息后,界面上会显示下载按钮 "2.Setup Scene"

在场景设置界面"SceneSetup"中:

|---|------------------------------------------------------------------------------------------------------------------------------|
| |
| | 正在上传...重新上传取消正在上传...重新上传取消 |

SourceScene :要设置的主场景PlyMeshObj :用来显示点云的节点对象CustomMaterial :点云模型自定义材质

    1. 、检查和设置场景

通过企业、项目等信息确认该项目是自⼰的项目后,请点击按钮 "2.Setup Scene"。如果场景没问题,则显示如下画面。

正在上传...重新上传取消正在上传...重新上传取消并且这时地图ID输⼊框变为不可编辑状态,窗⼝右上角显示重置按钮 "-RESET ALL-"。如果点击该按钮,则清空之前的状态,可以重新输⼊MapID。

    1. 、显示点云和移除点云

此时点击"3.Show Point Cloud"则开始下载点云,下载完成后,点云将显示在场景中,从Unity的Scene窗⼝可以看到。用户可以用点云做参考,将自⼰应用中要显示的3D对象摆放位置。

正在上传...重新上传取消正在上传...重新上传取消摆放完毕后,可以使用"Remove Point Cloud"来移除Scene中的点云。

正在上传...重新上传取消

    1. 、重置地图

当需要制作另⼀个项目时,因为当设置⼀个项目后,MapID输⼊框是不可修改的,此时可以点击按钮"-RESET ALL-"来重置地图。重置地图后,恢复到5.1节的状态。

六、场景业务逻辑制作

正在上传...重新上传取消正在上传...重新上传取消

    1. 、显示隐藏点云模型

对于场景业务逻辑,SDK提供了运行时加载和显示点云的功能。使用右下角的按钮 "点云模型" 来控制显示隐藏点云模型。

    1. 、模拟定位成功

如果用户在定位不成功的情况下,可以使用"定位成功"按钮来模拟定位成功后的情况。

    1. 、XDKCloudSession说明

XDKCloudSession 是云定位SDK中最重要的模块。

正在上传...重新上传取消右侧的属性面板中:

正在上传...重新上传取消XDK Version是sdk的版本号,开发者在和悉见的沟通中,请务必说明自⼰使用的云定位SDK的版本。

正在上传...重新上传取消正在上传...重新上传取消由于使用云服务器来进行重定位,所以需要在客户端指定项目使用定位服务器的URL(LocateServer)和地图的ID(MapID)。同时这 里有获取地图配置的服务器地址ConfigServer,但是这个参数开发者⼀般不需要修改。

正在上传...重新上传取消正在上传...重新上传取消设置地图Id和服务器请求URL有两种方式:1)在XDKCloudSession对象的属性面板上进行设置。2)在代码中进行设置。开发者需要获 取到XDKCloudSession脚本对象,再设置其中对应的属性。在设置了参数后可以调用XDKCloudSession类中提供的StartWork方法来 开始连接云定位服务器开启定位服务。该对象也提供了StopWork方法停止云定位服务。

正在上传...重新上传取消正在上传...重新上传取消重点是右侧的首次定位成功的事件回调。开发者通常需要在这里增加自⼰的逻辑调用。

正在上传...重新上传取消正在上传...重新上传取消另外这里提供了SDK关键事件的debug信息回调。如果开发者关注SDK的当前状态,则可以使用该接⼝。

七、打包安装到真机

从unity⼯程中打包APK安装包

正在上传...重新上传取消安装到Android真机(即可以是Nreal眼镜自带的计算单元,也可以是普通的Anroid手机)上,准备运行...

⼋、在真机上运行

正在上传...重新上传取消正在上传...重新上传取消

    1. 、配置Nreal环境

由于是在Nreal眼镜上运行,所以要首先准备⼀下Nreal的运行环境。这里请参考Nreal官网的说明和相关文档。 确定Nreal环境配置完成,并可以正常运行Nreal示例场景后,再进行后续步骤...

    1. 、运行产品

正在上传...重新上传取消正在上传...重新上传取消由于采用的云定位,所以也要确定Android设备连接到网络程序启动后,提示扫描周围环境

正在上传...重新上传取消正在上传...重新上传取消

首次重定位成功后,扫描定位提示图标消失

正在上传...重新上传取消

    1. 、产品操作方式说明

操作方式分为两个部分:

  1. 点击Android设备屏幕上的⼏个功能按钮

对于普通手机是屏幕,Nreal计算单元则是遥控器

  1. 使用眼镜视野中的射线点击

在眼镜视野中会看到虚拟的手机模型,而且这个Android设备模型是被实际的Android设备控制的。模型前端有⼀条射线发射出去,我们 可以通过这条射线来瞄准点击视野中的⼀些物体,例如按钮。

      1. Android 设备屏幕功能按钮说明:

如下图所示,共有3个功能按钮,目前的设置的功能如下:

APP按钮:点击可显示隐藏Debug界面

|---|-----------------------------------------------------------------------------------------------------------------|
| |
| | 正在上传...重新上传取消 |

触摸板:在眼镜视野中使用射线瞄准物体后,点击⼀下触摸板中部,可触发相应功能,例如目前使用这种方式来操作视野中的按钮 HOME按钮:目前仅在Nreal套件计算单元上有功能。按⼀下弹出"退出app"的提示面板,此时使用射线操作。如果确认退出,则App关 闭。

      1. 、使用眼镜视野中的射线点击

正在上传...重新上传取消正在上传...重新上传取消*)点击按钮:

使用眼镜点击按钮的方式为:使用射线对准某个按钮,然后点击手机上的触摸板(触摸板是指APP按钮和Home按钮中间的区域)

*)归正射线:

如果在眼镜中看起来射线的方向与直接手机的方向不⼀致的话,可以常按APP按钮3秒钟

    1. 、查看Debug信息

点击Android设备上的App按钮,显示Debug界面

正在上传...重新上传取消正在上传...重新上传取消

正在上传...重新上传取消左上角文字信息:

SceneRoot : 场景中SceneRoot Transform信息,位置、旋转、缩放ARCamera : 相机位姿,也就是⼈的位姿,位置、旋转

Interval : 重定位成功时间间隔

左下角文字信息:

更新图片:给云定位发送的图片个数重定位成功:定位成功的图片个数

右侧按钮

保存图片:选中后,将会把发给云定位的图片保存在本地,保存路径,

~/Android/data/com.seengene.XDKCloud(包名)/seengene

模拟定位成功:当没有真实环境无法扫描成功时,可用此键模拟定位成功点云模型:控制点云模型的显示与隐藏

使用射线点击右下角的"点云模型"按钮,可以控制点云模型的隐藏与显示

正在上传...重新上传取消正在上传...重新上传取消Log日志查看:

该功能仅支持带有屏幕的普通手机,不支持Nreal自带的计算单元这个界面是显示在手机屏幕上的

当点击APP按钮切换到Debug模式后,手机界面会显示

正在上传...重新上传取消正在上传...重新上传取消点击log日志开关,会在屏幕上显示log日志

正在上传...重新上传取消正在上传...重新上传取消

九、常见问题说明

问题描述:运行时点云与真实环境基本吻合,但虚拟物体位置有明显的偏移可能原因:可能是虚拟物体被标记成了静态

相关推荐
小蜜蜂嗡嗡1 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi001 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体
Zlzxzw1 小时前
使用unity创建项目,进行动画制作
unity·游戏引擎
zhangphil3 小时前
Android理解onTrimMemory中ComponentCallbacks2的内存警戒水位线值
android
你过来啊你3 小时前
Android View的绘制原理详解
android
移动开发者1号6 小时前
使用 Android App Bundle 极致压缩应用体积
android·kotlin
移动开发者1号6 小时前
构建高可用线上性能监控体系:从原理到实战
android·kotlin
X_StarX6 小时前
【Unity笔记01】基于单例模式的简单UI框架
笔记·ui·unity·单例模式·游戏引擎·游戏开发·大学生
九班长6 小时前
Golang服务端处理Unity 3D游戏地图与碰撞的详细实现
3d·unity·golang
ysn111119 小时前
NGUI实现反向定位到层级面板结点
unity