我们来看一下中的几个基本的例子

(区域描述、深度感知、运动追踪、视频4个)

参考:Google Tango初学者教程

1. hello_motion_tracking

package com.projecttango.examples.java.hellomotiontracking;

import com.google.atap.tangoservice.Tango; //Tango
import com.google.atap.tangoservice.Tango.OnTangoUpdateListener; //更新监听
import com.google.atap.tangoservice.TangoConfig; //配置信息
import com.google.atap.tangoservice.TangoCoordinateFramePair; //坐标框架对
import com.google.atap.tangoservice.TangoErrorException; //错误异常
import com.google.atap.tangoservice.TangoEvent; //事件驱动
import com.google.atap.tangoservice.TangoInvalidException; //无效异常
import com.google.atap.tangoservice.TangoOutOfDateException; //过时异常
import com.google.atap.tangoservice.TangoPointCloudData; //点云数据
import com.google.atap.tangoservice.TangoPoseData; //位姿数据
import com.google.atap.tangoservice.TangoXyzIjData; //XyzIj数据 import android.app.Activity; //活动
import android.os.Bundle;
import android.util.Log; //日志
import android.widget.Toast; //提醒 import java.util.ArrayList; //数组列 /**
* 运动追踪API示例的主活动类。处理与Tango服务的连接,以及Tango位姿数据布局视图的传播。
*/
public class HelloMotionTrackingActivity extends Activity { private static final String TAG = HelloMotionTrackingActivity.class.getSimpleName(); //类的示例名字 private Tango mTango; //Tango对象
private TangoConfig mConfig; //Tango配置对象 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_motion_tracking);
} @Override
protected void onResume() {
super.onResume(); // 将Tango服务按照一般Android服务初始化。因为我们在onPause中调用mTango.disconnect()
// , 这将会断开Tango服务的连接,所以每次调用onResume时我们都应该创建Tango对象。
mTango = new Tango(HelloMotionTrackingActivity.this, new Runnable() {
// 传进一个Runnable对象,当Tango准备好时由UI线程调用。该Runnable将会运行在一个新的线程中。
// 当Tango准备好时,我们只有在没有UI线程改变时可以调用Tango函数。
@Override
public void run() {
synchronized (HelloMotionTrackingActivity.this) {
try {
mConfig = setupTangoConfig(mTango);
mTango.connect(mConfig);
startupTango();
} catch (TangoOutOfDateException e) {
Log.e(TAG, getString(R.string.exception_out_of_date), e);
showsToastAndFinishOnUiThread(R.string.exception_out_of_date);
} catch (TangoErrorException e) {
Log.e(TAG, getString(R.string.exception_tango_error), e);
showsToastAndFinishOnUiThread(R.string.exception_tango_error);
} catch (TangoInvalidException e) {
Log.e(TAG, getString(R.string.exception_tango_invalid), e);
showsToastAndFinishOnUiThread(R.string.exception_tango_invalid);
}
}
}
});
} @Override
protected void onPause() {
super.onPause();
synchronized (this) {
try {
mTango.disconnect(); //中止断开连接
} catch (TangoErrorException e) {
Log.e(TAG, getString(R.string.exception_tango_error), e);
}
}
} /**
* 设置tango配置对象。确保mTango对象在调用该方法之前已初始化
*/
private TangoConfig setupTangoConfig(Tango tango) {
// 创建一个Tango配置对象,并调用HelloMotionTrackingActivity API
TangoConfig config = tango.getConfig(TangoConfig.CONFIG_TYPE_DEFAULT);
config.putBoolean(TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true); // 如果遇到无效状态,Tango服务应该自动恢复
config.putBoolean(TangoConfig.KEY_BOOLEAN_AUTORECOVERY, true);
return config;
} /**
* 设置Tango服务的回调监听,然后在Tango连接之后获取其他需要的参数。监听新的位姿数据。
*/
private void startupTango() {
// 锁定配置信息然后连接到Tango。选择坐标框架对。
final ArrayList<TangoCoordinateFramePair> framePairs =
new ArrayList<TangoCoordinateFramePair>();
framePairs.add(new TangoCoordinateFramePair(
TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
TangoPoseData.COORDINATE_FRAME_DEVICE)); // 监听新的Tango数据
mTango.connectListener(framePairs, new OnTangoUpdateListener() {
@Override
public void onPoseAvailable(final TangoPoseData pose) {
logPose(pose); //日志位姿
} @Override
public void onXyzIjAvailable(TangoXyzIjData xyzIj) {
// We are not using onXyzIjAvailable for this app.该APP不使用onXyzIjAvailable函数
} @Override
public void onPointCloudAvailable(TangoPointCloudData pointCloud) {
// We are not using onPointCloudAvailable for this app.该APP不使用onPointCloudAvailable函数
} @Override
public void onTangoEvent(final TangoEvent event) {
// Ignoring TangoEvents.忽略TangoEvents
} @Override
public void onFrameAvailable(int cameraId) {
// We are not using onFrameAvailable for this application.该APP不使用onFrameAvailable函数
}
});
} /**
* Log the Position and Orientation of the given pose in the Logcat as information. 将给定位姿的位置和方向传到日志(怎么得到的位置和方向)位姿 框架
*
* @param pose the pose to log.
*/
private void logPose(TangoPoseData pose) {
StringBuilder stringBuilder = new StringBuilder(); float translation[] = pose.getTranslationAsFloats();
stringBuilder.append("Position: " +
translation[0] + ", " + translation[1] + ", " + translation[2]); float orientation[] = pose.getRotationAsFloats();
stringBuilder.append(". Orientation: " +
orientation[0] + ", " + orientation[1] + ", " +
orientation[2] + ", " + orientation[3]); Log.i(TAG, stringBuilder.toString());
} /**
* Display toast on UI thread.
*
* @param resId The resource id of the string resource to use. Can be formatted text.
*/
private void showsToastAndFinishOnUiThread(final int resId) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(HelloMotionTrackingActivity.this,
getString(resId), Toast.LENGTH_LONG).show();
finish();
}
});
}
}

将位姿保存下来。更改程序:

。。。

然后

图1 Hello_Motion_Tracking

1.1 创建button按钮

默认button按钮ID为“button”。目的为显示实时数据。log功能坏了。听说win7的缘故。

1.2 创建handler接收处柄

以及

1.3 在log()函数中输入

2. hello_depth_perception深度感知

3.

>>Google Tango初学者教程

>>Hello_Depth_Perception 任务二:Project Tango采集深度感知数据

Hello_Motion_Tracking 任务一:Project Tango采集运动追踪数据的更多相关文章

  1. Hello_Depth_Perception 任务二:Project Tango采集深度感知数据

    Java API Depth Perception Tutorial深度感知教程 Configuration 配置信息 In order to use depth perception, your T ...

  2. Hello_Area_Description 任务三:Project Tango采集区域描述数据

    Permission Dialogs for Users in Java在Java中用户使用的权限对话框 Tango works by using visual cues from the devic ...

  3. 服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana

    服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana https://www.cnblogs.com/xishuai/p/elk- ...

  4. Google Tango Java SDK开发:Motion Tracking 运动追踪

    Java API Motion Tracking Tutorial运动追踪教程 This page describes how the Java API handles motion tracking ...

  5. UE4在Android调用Project Tango

    Project Tango应该说是Google一试水AR的设备,其中Project Tango主要二个功能,一个是获取深度信息,如MS的Kinect,有相当多的设备都有这个功能,二是第一人称相对定位, ...

  6. Project Tango Explorer

    https://sensortower.com/android/ie/projecttango-google/app/project-tango-explorer/com.projecttango.t ...

  7. google project tango 学习笔记

    google io 2015上 project tango 的演示视频

  8. DirectSound播放PCM(可播放实时采集的音频数据)

    前言 该篇整理的原始来源为http://blog.csdn.net/leixiaohua1020/article/details/40540147.非常感谢该博主的无私奉献,写了不少关于不同多媒体库的 ...

  9. 采用Flume实时采集和处理数据

    它已成功安装Flume在...的基础上.本文将总结使用Flume实时采集和处理数据,详细过程,如下面: 第一步,在$FLUME_HOME/conf文件夹下,编写Flume的配置文件,命名为flume_ ...

随机推荐

  1. linux shell获取用户输入

    一.获取用户输入1.基本读取read命令接收标准输入的输入,或其它文件描述符的输入.得到输入后,read命令将数据输入放入一个标准变量中.[root@rac2 ~]# cat t8.sh #!/bin ...

  2. Apache Commons Codec 与消息摘要算法(hash算法)

    首先我们要明白 Codec 是什么含义.它是 Coder + decoder = Codec,也就是编码器解码器.即是编码器,也是解码器. 官网地址:http://commons.apache.org ...

  3. vim之YCM配置

    BundleInstall,默认会出现错误 ycm_client_support.[so|pyd|dll] and ycm_core.[so|pyd|dll] not detected; you ne ...

  4. php调用dll经验小结

    最近做一个网站,需要频繁使用远程数据,数据接口已经做好.在做转换的时候遇到了性能上的问题:开始打算用php来实现转换,苦苦查了数天,都没有找到直接操作字节的方法.虽然可以使用 pack() 方法将各个 ...

  5. 关于Ceph现状与未来的一些思考

    http://blog.csdn.net/mightysheldor/article/details/51093476 Ceph从2004年提交了第一行代码,至今为止已经10年了.这个起源于Sage博 ...

  6. solr学习之六--------Analyzer(分析器)、Tokenizer(分词器)

    首先,不知道大家在前面的例子中没有试着搜索文本串,就是在第二节,我们添加了很多文档.如果字段值是一个文本.你如果只搜索这个字段的某个单词,是不是发现搜不到? 这就是因为我们没有配置Analyzer,因 ...

  7. CentOS 6.7 编译PHP7 make时出现错误:undefined reference to `libiconv_close’

    编辑Makefile文件,找到变量EXTRA_LIBS,并在末尾添上-liconv EXTRA_LIBS = -lcrypt -lz -lexslt -lcrypt -lrt -lmcrypt -ll ...

  8. 接口自动化(三)--读取json文件中的数据

    上篇讲到实际的请求数据放置在json文件内,这一部分记述一下python读取json文件的实现. 代码如下(代码做了简化,根据需要调优:可做一些容错处理): 1 import json 2 3 cla ...

  9. delete,truncate,drop的区别

    操作 删除对象 表和索引的空间 是否回滚 时间 delete table和view的数据,可以使用where精确删除,删除会触发触发器 表或索引的空间不变化 是dml,可以rollback回滚 最慢 ...

  10. extjs [1]

    1.JS 类的声明,和对象的创建 2.原始方法用EXTJS创建一个window 3.利用一个按钮触发window窗体,了解一下EXTJS的事件机制 4.用EXTJS4.0的create来创建windo ...