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

news2024/11/15 17:53:20

仅支持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下边。 SceneRootTransform属性设置必须保持默认,位置旋转和缩放不可以更改。

    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日志

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

九、常见问题说明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1143528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql源码安装

Linux环境 1、mysql下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 下载参考: 2、把下载的 MySQL 压缩包上传到 Linux 服务器 3、解压mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.39-linux-glibc2.12-x86…

【UE】Rider编辑器错误 .NET SDK 的版本 6.0300 至少需要 MBuild 的 17.00 版本,当前可用的 MSuld 版本

异常:.NET SDK 的版本 6.0300 至少需要 MBuild 的 17.00 版本,当前可用的 MSuld 版本为 16.1.2.50704请在 global.json 中指定的 .NET SDK 更为需要当前可用的 MSBuld 版本的版本 解决 切换当前使用的MBuild版本 File->Settings…打开设置窗口 找到…

基于web和mysql的图书管理系统

系统分为用户端和管理员端 用户端功能如下 登陆注册数据一栏个人信息修改个人信息修改密码图书查询借阅信息借阅状态安全退出 管理员端功能如下 登录个人信息修改个人信息修改密码读者管理书籍管理借阅管理借阅状态安全退出 用户 管理员 源码下载地址 支持:远程…

javaswing/gui+mysql的学生信息管理系统

使用了Java Swing作为前端界面的开发工具,而 MySQL 作为后端数据库管理系统。这个系统主要用于学生信息的管理,包括班级和学生的增删改查操作。 在系统开发过程中,首先设计了数据库表结构,包括班级表和学生表,并定义了…

损失函数总结(九):SoftMarginLoss、MultiLabelSoftMarginLoss

损失函数总结(九):SoftMarginLoss、MultiLabelSoftMarginLoss 1 引言2 损失函数2.1 SoftMarginLoss2.2 MultiLabelSoftMarginLoss 3 总结 1 引言 在前面的文章中已经介绍了介绍了一系列损失函数 (L1Loss、MSELoss、BCELoss、CrossEntropyLos…

NCCL后端

"NCCL" 代表 "NVIDIA Collective Communications Library","NVIDIA 集体通信库",它是一种由 NVIDIA 开发的用于高性能计算的通信库。NCCL 专门设计用于加速 GPU 群集之间的通信,以便在并行计算和深度学习等领域…

智能直播,助力新营销战场 !降本增效,新消费市场唾手可得

在当今竞争激烈的全球商业环境中,企业们迫切需要降低成本、提高效率,物联网(IoT:Internet of Things)的快速崛起为企业提供了全新的增长动力。它直接改变了人们的生活方式,其中最突出的表现就是网购&#x…

每日一题 2558. 从数量最多的堆取走礼物(简单,heapq)

怎么这么多天都是简单题,不多说了 class Solution:def pickGifts(self, gifts: List[int], k: int) -> int:gifts [-gift for gift in gifts]heapify(gifts)for i in range(k):heappush(gifts, -int(sqrt(-heappop(gifts))))return -sum(gifts)

2023MathorCup(妈妈杯) 数学建模挑战赛 解题思路

云顶数模最新解题思路免费分享~~ 2023妈妈杯数学建模A题B题思路,供大家参考~~ A题 B题

ReentrantLock 是如何实现锁公平和非公平性的 ?

公平和非公平 公平,指的是竞争锁资源的线程,严格按照请求顺序来分配锁。非公平,表示竞争锁资源的线程,允许插队来抢占锁资源。ReentrantLock 默认采用了非公平锁的策略来实现锁的竞争逻辑。 ReentrantLock ReentrantLock 内部使…

C程序设计(第五版)谭浩强

目录 目录 第1章程序设计和C语言 ​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑第2章算法——程序的灵魂 ​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编…

Java面向对象(进阶)-- this关键字的使用

文章目录 一、引子(1) this是什么?(2)什么时候使用this1.实例方法或构造器中使用当前对象的成员2. 同一个类中构造器互相调用 二、探讨(1)问题(2)解决 三、this关键字&am…

sql---慢查询和语句耗时

查看当前会话的所有的sql语句耗时情况 profile 开启 查询指定sql的各个阶段耗时 查看执行计划指令 Explain Explain select * from 表 Index 和 all 属于性能不太好 在不扫描得的情况下才可能为null,index表示使用了索引但是扫描了所有的索引&#xff…

Java 入门指南:使用 Docker 创建容器化 Spring Boot 应用程序

文章目录 步骤 1: 准备工作步骤 2: 克隆 Spring Boot 应用程序步骤 3: 创建 Dockerfile步骤 4: 构建 Docker 映像步骤 5: 运行容器步骤 6: 链接到本地数据库步骤 7: 使用 Docker Compose 运行多个容器步骤 8: 设置 CI/CD 管道结论 🎈个人主页:程序员 小侯…

《SpringBoot项目实战》第三篇—留下用户调用接口的痕迹

系列文章导航 第一篇—接口参数的一些弯弯绕绕 第二篇—接口用户上下文的设计与实现 第三篇—留下用户调用接口的痕迹 第四篇—接口的权限控制 第五篇—接口发生异常如何统一处理 本文参考项目源码地址:summo-springboot-interface-demo 前言 大家好!…

【QT开发(17)】2023-QT 5.14.2实现Android开发

1、简介 搭建Qt For Android开发环境需要安装的软件有: JAVA SDK (jdk 有apt install 安装) Android SDK Android NDKQT官网的介绍: Different Qt versions depend on different NDK versions, as listed below: Qt versionNDK…

Python 算法高级篇:桶排序与基数排序

Python 算法高级篇:桶排序与基数排序 引言什么是桶排序?桶排序的基本步骤桶排序的示例 什么是基数排序?基数排序的基本步骤基数排序的示例 桶排序与基数排序的应用桶排序的应用基数排序的应用 Python 示例代码总结 引言 在算法高级篇的课程中…

css列表样式

html文件如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> <link href"css/style.css" rel"stylesheet" type"text/css">&…

(c语言进阶)字符串函数、字符分类函数和字符转换函数

一.求字符串长度 1.strlen() (1)基本概念 头文件&#xff1a;<string.h> (2)易错点&#xff1a;strlen()的返回值为无符号整形 #include<stdio.h> #include<string.h> int main() {const char* str1 "abcdef";const char* str2 "bbb&q…

如何公网远程访问OpenWRT软路由web界面

文章目录 1.openWRT安装cpolar2.配置远程访问地址3.固定公网地址 简单几步实现在公网环境下远程访问openWRT web 管理界面&#xff0c;使用cpolar内网穿透创建安全隧道映射openWRT web 界面面板443端口&#xff0c;无需公网IP&#xff0c;无需设置路由器。 1.openWRT安装cpola…