颜色外观
空间定位
此功能适用于纹理较为丰富的室内场景,不适用场景:
• 室内大/空旷场景:可看到的视野纵深比较大的场景
• 室外场景:场景处于室外(光照不可控、空旷等原因)
• 弱纹理场景:场景里没有明显的参照物或图案、例如大面积白墙场景
• 重复纹理场景:场景中存在多个相同重复的目标物或图案
• 强光或暗光场景:场景中的光线过于强烈或过暗,导致相机曝光不足或过曝
• 动态场景:场景中有过多的移动目标
• 运动空间内:电梯、汽车、高铁、飞机内
• 其他:玻璃反光场景,非50HZ日光灯场景,长时间AR设备不移动的情况
Tips:若无法超出以上范围的情况难以判断,可使用设备预装“空间集锦”应用测试虚拟画面是否能稳定的在空间中显示。
功能点介绍
一、主要功能函数
StartHeadTracking 打开6dof/3dof功能。
StartHeadTracking 打开6dof/3dof功能。
返回值 | 参数类型 | 参数 |
---|---|---|
EStARkitCode | int | mode:0表示6dof,1表示3dof。 |
StopHeadTracking 关闭 6dof/3dof功能。
返回值 | 参数类型 | 参数 |
---|---|---|
EStARkitCode | int | mode:0表示6dof,1表示3dof。 |
GetHeadPose 根据传入的参数获取对应的slam数据。
返回值 | 参数类型 | 参数 |
---|---|---|
EStARkitCode | STrackingData | pose :用来接收slam数据的结构体 |
double | timeStamp:slam的时间戳,应设置为绝对时间或增量时间(单位-毫秒)。option = 1时,时间戳是绝对时间,并返回其附近的姿势;option = 0时,时间戳是增量时间,并获取最新姿势,如果时间戳> 0,则应用运动预测,如果时间戳= 0,则直接返回最新姿势, 如果时间<0, 则返回历史时刻位姿。 | |
Int | option:指示时间戳记是绝对时间还是相对时间,详情见参数timeStamp的介绍。 | |
string | node:指示目标坐标选择,"camera:rgb":slam坐标转到RGB相机;"camera:tof":slam坐标转到TOF相机;"head":slam坐标转到用户两眼中间;"imu" :slam坐标转到IMU。 | |
Int | coordinate_left:指定数据的左右手系。0为右手系,1为左手系。 |
GetSlamDataNote 获取slam数据的节点名转换。
返回值 | 参数类型 | 参数 |
---|---|---|
string | string | note:获取数据的节点名。,按照关键字匹配,关键字分别是: "rgb","tof","head","imu",如果都不匹配则默认为"head"。 |
TransfromPose 将fromNote节点下的Unity位姿转换到显示的Head节点。
返回值 | 参数类型 | 参数 |
---|---|---|
EStARkitCode | STrackingData | fromPose:需要转换的Unity坐标系的位姿。 |
STrackingData | toPose:转化为Unity世界坐标系的位姿 | |
string | fromNode:需要转换的节点("rgb"和"tof"选一个) | |
double | predictTime:当前显示模式下的预测时间。(GlassSeeThrough 下是"BaseDisplayAPI.Instance.DisplayGetPredoctedTime" 这个接口获取的预测时间) | |
string | toNode :需要转换的目标节点,可以不指定,默认为world节点 |
二、recenter功能
3DOF模式下,用户可使用脚本StARkitHeadTrackingService.cs的SceneRecenter()函数,让眼镜显示的画面回到眼前。(不建议6DOF模式使用,此功能会改变虚拟物体的位姿)
.png)
三、状态获取函数
StARkitGetModuleStatus 获取各模块的当前状态。
返回值 | 参数类型 | 参数 |
---|---|---|
EStARkitCode | EStARkitModule | module:需要获得哪个模式的状态。 |
EStARkitStatus | status:查询的模式当前状态。 |
RegisterModuleStatusCB 注册状态变化的回调函数。主要是slam的状态,但是也包括其他模块。建议使用CommonStatusCallBack中的封装模块。
返回值 | 参数类型 | 参数 |
---|---|---|
EStARkitCode | Action<int, int, int, IntPtr> | statusCB:注册状态回调函数,当状态发生改变时会主动回调。回调是另外的线程回调的,使用必须注意不能直接在回调中处理Unity组件。回调的参数:见此表后面的一张表格。 |
UnRegisterModuleStatusCB 取消状态回调注册,需和注册成对调用。
返回值 | 参数类型 | 参数 |
---|---|---|
EStARkitCode | Action<int, int, int, IntPtr> | statusCB:取消注册回调接口,这个一定要是注册时传入的那个。 |
Action <int,int,int,IntPtr>状态回调函数:
(i) st_MODULE_6DOF
Event | Description_length | Description |
---|---|---|
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
Event | Description_length | Description |
---|---|---|
11(3DOF_INITIAL_SUCCESS) | 说明字符串 |
四、状态回调函数
属性名 | 类型 | 说明 |
---|---|---|
Current | CommonStatusCallBack | 这是一个静态访问单例 |
StatusCB | Action<EStARkitModule, EStARkitEventID, string>; | 这是一个委托事件变量,通过+=(注册)和-=(取消注册),会在收到底层回调后的下一帧调用注册的委托事件。 |
五、主要数据结构介绍
EStARkitModule
属性名 | 值 | 说明 |
---|---|---|
MODULE_STARKIT | 0 | 整个设备 |
MODULE_6DOF | 1 | 6dof模块 |
MODULE_3DOF | 2 | 3dof模块 |
MODULE_MESH | 3 | SpatialMesh模块 |
MODULE_PLANE | 4 | FindPlane模块 |
EStARkitStatus
表示各个模块当前状态。
属性名 | 值 | 说明 |
---|---|---|
STATUS_UNINIT | 0 | 模块没有初始化 |
STATUS_INITED | 1 | 模块已经初始化 |
STATUS_RUNNING | 2 | 模块正在正常工作 |
STATUS_STOPPED | 3 | 模块已经停止 |
ETrackingMode
属性名 | 值 | 说明 |
---|---|---|
TRACKING_POSITION | 0 | 表示6dof。 |
TRACKING_ORIENTATION | 1 | 表示3dof。 |
ETrackingNote
属性名 | 值 | 说明 |
---|---|---|
None | 0 | 未定义 |
HEAD | 1 | 人的两眼中间 |
RGB | 2 | RGB相机 |
TOF | 3 | TOF相机 |
IMU | 4 | IMU坐标系 |
STrackingData
属性名 | 类型 | 说明 |
---|---|---|
dTime | double | 时间戳,单位是秒。 |
dVector | double[] | slam的平移数据,,是x,y,z三个轴坐标的数组,所以长度为3。 |
dQuaternion | double[] | slam的旋转四元素数据,分别是x,y,z,w,长度为4。 |
tag | char[] | 数据标签信息,长度为10。 |
六、功能点样例
MixtureSeeThrough Demo主要展示双目合像显示和Slam的3dof/6dof锚定效果。支持投屏功能,详情咨询售后。
- 选择Assets/stARkit/Lenovo.stARkit.SDK/Tutorial/MixtureSeeThrough/ MixtureSeeThrough_6dof,按照Android Build的步骤出一个APK。
- 将Build好的apk在设备中安装好后进入。
- 进入应用后,会看到有一个星宝在正前方,3dof模式下,你只能转动头,无法走进或者走远观察,方块可以随着转动固定在头的相对位置,并且没有明显的形变表示功能正常。6dof模式下,不仅可以转头,还能前后上下左右的移动,从各个角度观察方块的位置,方块在真实世界的位置没有明显的移动变化表示功能正常。