Google Tango Java SDK开发:Motion Tracking 运动追踪
Java API Motion Tracking Tutorial运动追踪教程
This page describes how the Java API handles motion tracking. 该页面描述了如何使用Java API处理运动追踪。
Lifecycle 生命周期
The normal motion tracking system lifecycle consists of three states: TangoPoseData.POSE_INITIALIZING, TangoPoseData.POSE_VALID, and TangoPoseData.POSE_INVALID. In the POSE_INITIALIZING state, the system is not yet ready and pose data is not available. In the POSE_VALID state, the system is functioning normally. In the POSE_INVALID state, the system believes its estimate was invalid and needs to be reinitialized. A fourth state, POSE_UNKNOWN, is used for all other cases.
一般的运动追踪系统生命周期包括三个状态:TangoPoseData.POSE_INITIALIZING, TangoPoseData.POSE_VALID,和TangoPoseData.POSE_INVALID。在POSE_INITIALIZING状态时,系统还没有准备好,姿态数据不可用。在POSE_VALID状态时,系统运行正常。在POSE_INVALID状态时,系统认定它的估计是无效的需要重新初始化。第四种状态POSE_UNKNOWN表示其他状态。
Should the pose data become POSE_INVALID, the motion tracking system can be reinitialized in two ways. If config_enable_auto_recovery was set to true, the system will immediately enter the POSE_INITIALIZINGstate. It will use the last valid pose as the starting point after recovery. IfTangoConfig.KEY_BOOLEAN_AUTORECOVERY was set to false, the system will essentially pause and always return poses as POSE_INVALID until Tango.resetMotionTracking() is called. Unlike auto recovery, this will also reset the starting point after recovery back to the origin.
假如姿态数据变成POSE_INVALID,运动追踪系统可以以两种方式重新初始化。如果config_enable_auto_recovery设为真,系统将很快输入POSE_INITIALIZING状态。它将使用最后的有效姿态作为恢复后的初始点。如果TangoConfig.KEY_BOOLEAN_AUTORECOVERY设为否,系统将根本上中止,并总是返回POSE_INVALID直到调用Tango.resetMotionTracking()。这不同于自动恢复,它在恢复到原点后也会重设开始点。
The lifecycle state is recorded in the TangoPoseData object's statusCode. 生命周期状态是记录在TangoPoseData对象的statusCode中。
For more information, although the page is based around the C API, please see our Device Pose concepts page. 对于更多信息,虽然该网页是基于C API的,也请看我们的设备姿态概念页。
Configuration配置信息
In order to use motion tracking, your TangoConfig must have KEY_BOOLEAN_MOTIONTRACKING set to true. If you are using the default TangoConfig as your starting point, it is already set to true.
为了使用运动追踪,你的TangoConfig必须将KEY_BOOLEAN_MOTIONTRACKING设为真。如果你正在使用默认的TangoConfig作为你的起始点,那么已经设为真。
You also have the option to set KEY_BOOLEAN_AUTORECOVERY. In the default TangoConfig, this is set to true. See the Lifecycle section for the behavior of this parameter.
你还有个选项可以设置KEY_BOOLEAN_AUTORECOVERY。在默认的TangoConfig中,这项设为真。看LifeCycle节查看本参数的行为。
Getting pose data获取姿态数据
There are two coordinate frame pair options for basic motion tracking: device with respect to start of service, and device with respect to the previous device pose. With start of service, the device's pose is relative to the position where the motion tracking system initialized. You can receive pose data in both the callback and polling forms. With previous device pose, the device's pose is relative to its last position. Pose data is only available as a callback.
有两个用于基本运动追踪的坐标框架对的选项:相对于开始服务的设备位姿,以及相对于上一个设备位姿的设备位姿。如果是相对于开始服务,那么设备位姿是相对于运动追踪系统初始化时的位置。你可以在反馈和请求两种形式中接收位姿数据。如果是相对于上一个设备位姿,设备位姿是相对于上一个位置。位姿数据只有在反馈中才可用。
Callback-based基于反馈的
If you are using the callback-based approach, you must define the coordinate frame pairs you are interested in and construct your onPoseAvailable() callback.
如果你正在使用基于反馈的方法,你必须定义你感兴趣的坐标框架对,然后创建你的onPoseAvailable()反馈。
You also have to implement onXyzIjAvailable and onTangoEvent, because the Tango.OnTangoUpdateListenerinterface requires an implementation for all three of those methods.
你还需要引用onXyzljAvailable和onTangoEvent,因为Tango.OnTangoUpdateListener接口需要以上三个方法的引用。
private void setTangoListeners() {
final ArrayList<TangoCoordinateFramePair> framePairs = new ArrayList<TangoCoordinateFramePair>();
framePairs.add(new TangoCoordinateFramePair(
TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
TangoPoseData.COORDINATE_FRAME_DEVICE));
// Listen for new Tango data
mTango.connectListener(framePairs, new OnTangoUpdateListener() {
@Override
public void onPoseAvailable(final TangoPoseData pose) {
// Process pose data from device with respect to start of service
}
@Override
public void onXyzIjAvailable(TangoXyzIjData arg0) {
// We need this callback even if we don't use it
}
@Override
public void onTangoEvent(final TangoEvent event) {
// This callback also has to be here
}
});
}
Polling-based基于请求的
In the polling-based approach, you must first specify the coordinate frame pair you are interested in. For simple motion tracking, this will always be TangoPoseData.COORDINATE_FRAME_DEVICE with respect toTangoPoseData.COORDINATE_FRAME_START_OF_SERVICE.
在基于请求的方法中,你必须先指定你感兴趣的坐标框架对。对于简单的运动追踪,这总会是参考TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE的TangoPoseData.COORDINATE_FRAME_DEVICE。
// Define what motion is requested.
TangoCoordinateFramePair frames_of_reference;
frames_of_reference.baseFrame = TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE;
frames_of_reference.targetFrame = TangoPoseData.COORDINATE_FRAME_DEVICE;
Then call `Tango.getPoseAtTime() as desired. In the example below, the timestamp is set to 0.0 to get the latest pose. If you specify a specific timestamp, the system will return an interpolated pose at that exact time. Timestamps are relative to the device boot.
然后调用Tango.getPoseAtTime()作为期望的。在下面的例子中,时间戳设为0.0用以得到最新的位姿。如果你指定一个特定的时间戳,系统将返回特定时间的内插位姿。时间戳是相对于设备启动时。
new Thread(new Runnable() {
final int pollingUpdatePeriodMilliseconds = 66;
@Override
public void run() {
while (true) {
try {
Thread.sleep(pollingUpdatePeriodMilliseconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
final TangoPoseData queryPoseStartDevice =
mTango.getPoseAtTime(0.0, frames_of_reference);
} catch (TangoErrorException e) {
e.printStackTrace();
}
}
}
}).start();
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License, and code samples are licensed under the Apache 2.0 License. For details, see our Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Google Tango Java SDK开发:Motion Tracking 运动追踪的更多相关文章
- Google Tango Java SDK开发:Configure and Connect 配置和连接
Configure and Connect 配置和连接 Note: This section assumes you are familiar with the Android Activity Li ...
- Apache Beam入门及Java SDK开发初体验
1 什么是Apache Beam Apache Beam是一个开源的统一的大数据编程模型,它本身并不提供执行引擎,而是支持各种平台如GCP Dataflow.Spark.Flink等.通过Apache ...
- [No0000105]java sdk 开发环境变量powershell 自动配置脚本
# 设置Java SDK 环境变量 $softwares = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Unin ...
- Google Tango Java实例程序
Java API:https://developers.google.com/tango/apis/java/reference/ 1. java_augmented_reality_example ...
- Google Tango初学者教程
Getting Started with the Tango Java API In this tutorial, we'll go through setting up your build env ...
- Hello_Motion_Tracking 任务一:Project Tango采集运动追踪数据
我们来看一下中的几个基本的例子 (区域描述.深度感知.运动追踪.视频4个) 参考:Google Tango初学者教程 1. hello_motion_tracking package com.proj ...
- 分享 Java微信开发SDK
分享 Java微信开发SDK •发布于 4周前 •作者 朋也 •432 次浏览 •最后一次编辑是 2周前 •来自 分享 给大家分享两个java开发微信公众号的sdk jfinal-weixin ...
- 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)
fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...
- 微博开发平台java SDK demo学习之friendships
本文解释了在java SDK的demo中与feiendships有关的功能 截图如下: 关注一个用户(需要知道该用户uid) 取消关注一个用户(用户uid) 获取用户粉丝列表(授权用户的screen_ ...
随机推荐
- VirtualBox的vdi映像导入遇到的uuid冲突问题 (转)
virtualbox导入vdi文件时出现下面的问题: 打开hard disk D:\software\GT5.0.0.vdi 失败 Cannot register the hard disk 'D ...
- erlang单独配置文件
一种是erl启动的时候加参数 doudizhu.config [ {doudizhu,[ {listen_port, }, {node_caller_prefix,"ruby"}, ...
- emacs里面模拟vim按键操作的插件evil
emacsConfig/evil-setting.el (setq evil-mode t) (setq evil-shift-width ) ;; some modes aren't meant f ...
- OpenVPN添加本地路由方法
我只使用了第一种方法,第二种第三种没有测试. 1. 在OpenVPN配置文件中增加 OpenVPN在连接成功之后会自动增加一些路由,把默认网关改成VPN的,使所有流量都从VPN走.OpenVPN提供了 ...
- 测试Linux端口的连通性的四种方法
Linux系统有时候需要测试某个端口的连通性,用户可以参考如下方法来测试. 方法一.telnet法 telnet为用户提供了在本地计算机上完成远程主机工作的能力,因此可以通过telnet来测试端口 ...
- 前端开发中常用的CSS选择器解析(一)
你也许已经掌握了id.class.后台选择器这些基本的css选择器.但这远远不是css的全部.下面向大家系统的介绍css中最常用的选择器,包括我们最头痛的浏览器兼容性问题.掌握了它们,才能真正领略cs ...
- ES6系列_4之扩展运算符和rest运算符
运算符可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁. 运算符有两种:对象扩展运算符与rest运算符. 1.对象扩展( spread)运算符(...) (1)解决参数个数 ...
- angularjs之$ajax请求
AngularJS不仅仅只有双向绑定等等功能,还有发送Ajax请求的Api. 效果图: 请求的文件(data.php): <?php $data = [ '股市下跌', '清明小长假结束', ' ...
- eclipse中debug改变变量的值
step1:debug断点到变量的下一行,在debug试图的右上角variables中看到该变量的值: step2:鼠标右键点击str出现下图,选择Change Value... step3:点击Ch ...
- ios 解决Wkwebview闪烁问题
// 网页闪烁问题 if ([self.webView.realWebView isKindOfClass:[WKWebView class]]) { ((WKWebView * ...