Skip to content

空间定位

此功能适用于纹理较为丰富的室内场景,不适用场景:

• 室内大/空旷场景:可看到的视野纵深比较大的场景

• 室外场景:场景处于室外(光照不可控、空旷等原因)

• 弱纹理场景:场景里没有明显的参照物或图案、例如大面积白墙场景

• 重复纹理场景:场景中存在多个相同重复的目标物或图案

• 强光或暗光场景:场景中的光线过于强烈或过暗,导致相机曝光不足或过曝

• 动态场景:场景中有过多的移动目标

• 运动空间内:电梯、汽车、高铁、飞机内

• 其他:玻璃反光场景,非50HZ日光灯场景,长时间AR设备不移动的情况

Tips:若无法超出以上范围的情况难以判断,可使用设备预装“空间集锦”应用测试虚拟画面是否能稳定的在空间中显示。

功能点介绍

一、主要功能函数

StartHeadTracking 打开6dof/3dof功能。

StartHeadTracking 打开6dof/3dof功能。

返回值参数类型参数
EStARkitCodeintmode:0表示6dof,1表示3dof。

StopHeadTracking 关闭 6dof/3dof功能。

返回值参数类型参数
EStARkitCodeintmode:0表示6dof,1表示3dof。

GetHeadPose 根据传入的参数获取对应的slam数据。

返回值参数类型参数
EStARkitCodeSTrackingDatapose :用来接收slam数据的结构体
doubletimeStamp:slam的时间戳,应设置为绝对时间或增量时间(单位-毫秒)。option = 1时,时间戳是绝对时间,并返回其附近的姿势;option = 0时,时间戳是增量时间,并获取最新姿势,如果时间戳> 0,则应用运动预测,如果时间戳= 0,则直接返回最新姿势, 如果时间<0, 则返回历史时刻位姿。
Intoption:指示时间戳记是绝对时间还是相对时间,详情见参数timeStamp的介绍。
stringnode:指示目标坐标选择,"camera:rgb":slam坐标转到RGB相机;"camera:tof":slam坐标转到TOF相机;"head":slam坐标转到用户两眼中间;"imu" :slam坐标转到IMU。
Intcoordinate_left:指定数据的左右手系。0为右手系,1为左手系。

GetSlamDataNote 获取slam数据的节点名转换。

返回值参数类型参数
stringstringnote:获取数据的节点名。,按照关键字匹配,关键字分别是: "rgb","tof","head","imu",如果都不匹配则默认为"head"。

TransfromPose 将fromNote节点下的Unity位姿转换到显示的Head节点。

返回值参数类型参数
EStARkitCodeSTrackingDatafromPose:需要转换的Unity坐标系的位姿。
STrackingDatatoPose:转化为Unity世界坐标系的位姿
stringfromNode:需要转换的节点("rgb"和"tof"选一个)
doublepredictTime:当前显示模式下的预测时间。(GlassSeeThrough 下是"BaseDisplayAPI.Instance.DisplayGetPredoctedTime" 这个接口获取的预测时间)
stringtoNode :需要转换的目标节点,可以不指定,默认为world节点

二、recenter功能

3DOF模式下,用户可使用脚本StARkitHeadTrackingService.cs的SceneRecenter()函数,让眼镜显示的画面回到眼前。(不建议6DOF模式使用,此功能会改变虚拟物体的位姿)

三、状态获取函数

StARkitGetModuleStatus 获取各模块的当前状态。

返回值参数类型参数
EStARkitCodeEStARkitModulemodule:需要获得哪个模式的状态。
EStARkitStatusstatus:查询的模式当前状态。

RegisterModuleStatusCB 注册状态变化的回调函数。主要是slam的状态,但是也包括其他模块。建议使用CommonStatusCallBack中的封装模块。

返回值参数类型参数
EStARkitCodeAction<int, int, int, IntPtr>statusCB:注册状态回调函数,当状态发生改变时会主动回调。回调是另外的线程回调的,使用必须注意不能直接在回调中处理Unity组件。回调的参数:见此表后面的一张表格。

UnRegisterModuleStatusCB 取消状态回调注册,需和注册成对调用。

返回值参数类型参数
EStARkitCodeAction<int, int, int, IntPtr>statusCB:取消注册回调接口,这个一定要是注册时传入的那个。

Action <int,int,int,IntPtr>状态回调函数:

(i) st_MODULE_6DOF

EventDescription_lengthDescription
0 (PLEASE_MOVE_SLIGHTLY)Description 的字节长度,用来读取IntPtr中的数据的。说明字符串
1 (TEXTURE_NOT_ENOUGH)说明字符串
2 (MOVE_TOO_FAST)说明字符串
3 (INITIAL_SUCCESS)说明字符串
4 (TRACK_LOST)说明字符串
5 (KEYFRAME_COUNTER)关键帧编号计数器(int)
6 (RELOCALIZED)字符串:"lost:relocalized(丢失:重新定位成功)","map:relocalized(地图:重新定位成功)"
7 (TRACKING_QOS)浮点数的跟踪质量值[0-100]
8(MAP_EXPORT)字符串:"success"表示保存map文件成功;"fail:bad path"表示文件路径有问题;"fail:unknow"表示未知错误导致失败。
9(MAP_LOAD)字符串"success"表示保存map文件成功;"fail:bad path"表示文件路径有问题;"fail:bad file"表示文件错误;"fail:unknow"表示未知错误导致失败。
10(ANCHOR_FRAMES)保存的锚点环境框架的数量。

(ii) st_MODULE_3DOF

EventDescription_lengthDescription
11(3DOF_INITIAL_SUCCESS)说明字符串

四、状态回调函数

属性名类型说明
CurrentCommonStatusCallBack这是一个静态访问单例
StatusCBAction<EStARkitModule, EStARkitEventID, string>;这是一个委托事件变量,通过+=(注册)和-=(取消注册),会在收到底层回调后的下一帧调用注册的委托事件。

五、主要数据结构介绍

EStARkitModule

属性名说明
MODULE_STARKIT0整个设备
MODULE_6DOF16dof模块
MODULE_3DOF23dof模块
MODULE_MESH3SpatialMesh模块
MODULE_PLANE4FindPlane模块

EStARkitStatus

表示各个模块当前状态。

属性名说明
STATUS_UNINIT0模块没有初始化
STATUS_INITED1模块已经初始化
STATUS_RUNNING2模块正在正常工作
STATUS_STOPPED3模块已经停止

ETrackingMode

属性名说明
TRACKING_POSITION0表示6dof。
TRACKING_ORIENTATION1表示3dof。

ETrackingNote

属性名说明
None0未定义
HEAD1人的两眼中间
RGB2RGB相机
TOF3TOF相机
IMU4IMU坐标系

STrackingData

属性名类型说明
dTimedouble时间戳,单位是秒。
dVectordouble[]slam的平移数据,,是x,y,z三个轴坐标的数组,所以长度为3。
dQuaterniondouble[]slam的旋转四元素数据,分别是x,y,z,w,长度为4。
tagchar[]数据标签信息,长度为10。

六、功能点样例

MixtureSeeThrough Demo主要展示双目合像显示和Slam的3dof/6dof锚定效果。支持投屏功能,详情咨询售后。

  1. 选择Assets/stARkit/Lenovo.stARkit.SDK/Tutorial/MixtureSeeThrough/ MixtureSeeThrough_6dof,按照Android Build的步骤出一个APK。
  2. 将Build好的apk在设备中安装好后进入。
  3. 进入应用后,会看到有一个星宝在正前方,3dof模式下,你只能转动头,无法走进或者走远观察,方块可以随着转动固定在头的相对位置,并且没有明显的形变表示功能正常。6dof模式下,不仅可以转头,还能前后上下左右的移动,从各个角度观察方块的位置,方块在真实世界的位置没有明显的移动变化表示功能正常。