Tango 开发指南(9) — 区域学习 API (Java 描述)
来源:互联网 发布:linux新手基础知识总结 编辑:程序博客网 时间:2024/06/16 23:33
配置
加载区域描述
学习模式
二者结合使用
同时使用运动追踪和区域学习
使用 ADF
使用元数据
配置
与区域学习相关的配置有两个:加载区域描述和学习模式。
加载区域描述
要加载 ADF 文件,你必须将 TangoConfig.KEY_STRING_AREADESCRIPTION 设置为要加载的 ADF 文件的 UUID,这样当 TangoService 启动时就会加载对应的 ADF。
try { mConfig.putString(TangoConfig.KEY_STRING_AREADESCRIPTION, uuid);} catch (TangoErrorException e) { // handle exception}
下面的例子演示了如何加载最新保存的 ADF 文件。具体来说是先获取一个 ADF 文件列表,最后一个就是最新的 ADF:
ArrayList<String> fullUUIDList = new ArrayList<String>();// Returns a list of ADFs with their UUIDsfullUUIDList = mTango.listAreaDescriptions();// Load the latest ADF if ADFs are found.if (fullUUIDList.size() > 0) { mConfig.putString(TangoConfig.KEY_STRING_AREADESCRIPTION, fullUUIDList.get(fullUUIDList.size() - 1));}
学习模式
要使用区域学习功能,TangoConfig.KEY_BOOLEAN_LEARNINGMODE 必须为 true,该项默认为 false:
try { TangoConfig mConfig = mTango.getConfig(TangoConfig.CONFIG_TYPE_CURRENT); mConfig.putBoolean(TangoConfig.KEY_BOOLEAN_LEARNINGMODE, true);} catch (TangoErrorException e) { // handle exception}
调用 Tango.saveAreaDescription() 去保存 ADF 文件,注意该操作耗时较长,切勿在 UI 线程中调用。
二者结合使用
上述两种配置项同时使用时,当前会话会创建一个新的 ADF。如果自定位是借助已加载 ADF 实现的,而且此时调用了 Tango.saveAreaDescription() 方法,将会有一个新的 ADF 文件生成,该文件的内容包含当前会话的 ADF 和已被加载的 ADF。
注意:只有借助已加载 ADF 实现的自定位才能完成保存区域描述的操作。更多信息参见 Area Learning Mode 和 Loaded Area Description Files。
同时使用运动追踪和区域学习
通常情况下,同时使用者两项技术和单独使用基本的运动追踪技术很类似。首先需要指定合适的坐标帧对,然后使用回调或时间戳方式去获取 pose 数据。
区域学习有两种坐标帧对。第一种,
(baseFrame,targetFrame)=(TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION, TangoPoseData.COORDINATE_FRAME_DEVICE);通过这种方式获取的是设备相对于区域学习原点的 pose 数据,包括漂移修正。如果加载了 ADF,只有借助 ADF 文件完成自定位之后才能获得 pose 数据,以 ADF 中的原点作为原点。如果开启了学习模式但未加载 ADF 文件,服务初始化完成后就立即能获得 pose 数据,以服务开始的位置为起始点。
第二种,
(baseFrame,targetFrame)=(TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION, TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE);这种方式提供的是在给定时刻区域描述和服务开始位置的偏移。这种方式提供的数据只有当自定位发生时才会有更新。
应用中,应当使用第一种作为运动追踪的帧对,第二种作为发生自定位的标志。
@Overridepublic void onPoseAvailable(TangoPoseData pose) {if (pose.baseFrame == TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION && pose.targetFrame == TangoPoseData.COORDINATE_FRAME_DEVICE) { // Process new ADF to device pose data.}else if (pose.baseFrame == TangoPoseData.COORDINATE_FRAME_AREA_DESCRIPTION && pose.targetFrame == TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE) { // Process new localization.}
**
使用 ADF
**
使用元数据
ADF 中有元数据可以使用。元数据包含若干键值对,具体的键名称对参见 TangoAreaDescriptionMetaData。
获取某 uuid 对应的 ADF 中的键名称:
public String getName(String uuid) { TangoAreaDescriptionMetaData metadata = new TangoAreaDescriptionMetaData(); metadata = mTango.loadAreaDescriptionMetaData(uuid); byte[] nameBytes = metadata.get(TangoAreaDescriptionMetaData.KEY_NAME); if (nameBytes != null) { String name = new String(nameBytes); return name; } // Do something if null}
为某个 ADF 设置键名称:
public void setName(String name, String uuid) { TangoAreaDescriptionMetaData metadata = new TangoAreaDescriptionMetaData(); metadata = mTango.loadAreaDescriptionMetaData(uuid); metadata.set(TangoAreaDescriptionMetaData.KEY_NAME, name.getBytes()); mTango.saveAreaDescriptionMetadata(uuid, metadata);}
获取当前所有可用 ADF 的 UUID:
ArrayList<String> mFullUUIDList;try { mFullUUIDList = mTango.listAreaDescriptions();} catch(TangoErrorException e) { // handle the errors}if (mFullUUIDList.size() == 0) { // handle the fact that there's no ADFs stored}
- Tango 开发指南 — 区域学习 API (Java 描述)
- Tango 开发指南(9) — 区域学习 API (Java 描述)
- Tango 开发指南 — 运动追踪 API(Java 描述)
- Tango 开发指南 — 深度感知 API (Java 描述)
- Tango 开发指南 — 区域学习原理
- Tango 开发指南(10) — 深度感知 API (Java 描述)
- Tango 开发指南(7)— 运动追踪 API(Java 描述)
- Tango 开发指南(8) — 区域学习原理
- Tango 开发指南 — 原理
- Tango 开发指南 — Pose
- Tango 开发指南 — 事件
- Tango 开发指南 — 用 Java 开发应用
- Tango 开发指南(1) — 用 Java 开发应用
- Tango 开发指南 — 运行 Java demo 工程
- Tango 开发指南(5) — 参考帧
- Tango 开发指南(10) — 深度感知原理
- Tango 开发指南 — 参考帧
- Tango 开发指南 — 运动追踪原理
- Power of Three问题及解法
- JavaScript中String.prototype用法
- python海龟turtle分形树(表白用)
- 问题解决:Error -27776: Server "XXX" shut connection during attempt to negotiate SSL session
- 带头视图的瀑布流
- Tango 开发指南(9) — 区域学习 API (Java 描述)
- 跨域问题以及Nginx配置文件
- Android Lottie动画框架简单例子
- hdu 5112 A Curious Matt (java,快速输入)
- poj1664 放苹果
- 算法-动态规划-背包问题
- 设备驱动程序框架分析——(以点灯为例)
- PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
- Win64 驱动签名