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_INITIALIZINGTangoPoseData.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 运动追踪的更多相关文章

  1. Google Tango Java SDK开发:Configure and Connect 配置和连接

    Configure and Connect 配置和连接 Note: This section assumes you are familiar with the Android Activity Li ...

  2. Apache Beam入门及Java SDK开发初体验

    1 什么是Apache Beam Apache Beam是一个开源的统一的大数据编程模型,它本身并不提供执行引擎,而是支持各种平台如GCP Dataflow.Spark.Flink等.通过Apache ...

  3. [No0000105]java sdk 开发环境变量powershell 自动配置脚本

    # 设置Java SDK 环境变量 $softwares = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Unin ...

  4. Google Tango Java实例程序

    Java API:https://developers.google.com/tango/apis/java/reference/ 1. java_augmented_reality_example ...

  5. Google Tango初学者教程

    Getting Started with the Tango Java API In this tutorial, we'll go through setting up your build env ...

  6. Hello_Motion_Tracking 任务一:Project Tango采集运动追踪数据

    我们来看一下中的几个基本的例子 (区域描述.深度感知.运动追踪.视频4个) 参考:Google Tango初学者教程 1. hello_motion_tracking package com.proj ...

  7. 分享 Java微信开发SDK

    分享 Java微信开发SDK •发布于 4周前  •作者 朋也  •432 次浏览  •最后一次编辑是 2周前  •来自 分享 给大家分享两个java开发微信公众号的sdk jfinal-weixin ...

  8. 区块链:基于Hyperledger Fabric的 java 客户端开发(java sdk /java api server/java event server)

    fabric针对java 开发的部分支持不是很友好.基于目前较为稳定的fabric 1.4版本,我们封装了一个java sdk,apiserver,eventServer 封装java sdk的主要目 ...

  9. 微博开发平台java SDK demo学习之friendships

    本文解释了在java SDK的demo中与feiendships有关的功能 截图如下: 关注一个用户(需要知道该用户uid) 取消关注一个用户(用户uid) 获取用户粉丝列表(授权用户的screen_ ...

随机推荐

  1. cowboy添加验证码

    参考的http://beebole.com/blog/erlang/how-to-implement-captcha-in-erlang-web-application/,移到cowboy,修改了下: ...

  2. Nginx+tomcat+redis 集群session共享

    插件资源下载地址:https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/tag/2.0.2 一.前置条件 J ...

  3. 使用maven构建基本的web项目结构

    由于当前公司在组织进行项目基本结构的整理,将以前通过eclipse/ ant 方式构建的项目向maven上迁移,于是便进行maven项目方面的调研. 对于maven项目,基本的结构已经在标准文件中: ...

  4. HDU-6156 Palindrome Function(数位DP)

    一.题目 二.思路 1.这是很明显的数位DP: 2.和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作.但是,不管多少进制,原理都是一样的: 3.这里有个小坑,题目中 ...

  5. 浅谈Storm流式处理框架

    Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据.但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢,运维复杂. 有需求也就有创造,在Hadoop基本奠定了大数据霸 ...

  6. jeesite快速开发平台(五)----用户-角色-部门-区域-菜单-权限表关系

    转自: https://blog.csdn.net/u011781521/article/details/78994904

  7. Spring cloud config-client 爬坑

    配置文件 找不到属性 Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'from' in st ...

  8. C#流对象使用完后不立即释放的问题

    public class testwriter : MonoBehaviour { // Use this for initialization void Start () { } [MenuItem ...

  9. Word编写代码时输出半角引号

    工具--自动更正选项--键入时自动套用格式,去掉直引号替换为弯引号.

  10. XGBoost参数调优

    XGBoost参数调优 http://blog.csdn.net/hhy518518/article/details/54988024 摘要: 转载:http://blog.csdn.NET/han_ ...