这两年虚拟现实VR和增强现实AR简直火的不要不要的,众多巨头都在发力,Google也推出了自己的AR技术解决方案,因为目前介绍Tango的中文资料还比较少,所以本人结合官网文档和自己的理解写了本文,如有错漏请不吝赐教。
一、简介
1. Tango是什么,可以用来干什么?
Tango是Google的一个AR增强现实项目,配合其独特的移动设备和SDK可以方便的在应用中使用AR技术。
2. Tango室内定位为什么有很高的精确度?
众所周知,传统的定位技术(GPS\WIFI等)在室内定位上精度很低,那么Tango是怎么实现室内定位的呢?
Tango采用的是“参照定位”,即相对于“初始位置”的一种定位方式,不涉及到卫星定位。它根据硬件设备的传感器,比如重力传感器、IMU陀螺仪等,获取移动设备相对于初始位置的“位移”和“旋转角度”,自己构建了一个“参照坐标系”,因此有较高的准确度。
当然,还有其他一些软件技术手段,比如通过区域学习修正偏差等。
3. 几个重要的概念
Tango中如下3个概念,其实也算是3个功能模块。开发者通过设置TangoConfig对象的相应字段来选择开启哪些功能。
a. 移动追踪(motion tracking)
移动追踪指的是,Tango会记录追踪移动设备的在3D空间中的位置,位置数据包括地点和超像旋转角度等、实时报告给应用。
b. 区域学习(Area Leaning)
移动追踪只会反馈移动设备当前的坐标信息、对于设备“看”到的东西没有任何记忆,区域学习使移动设备能够看到和记住物理空间的关键视觉特征,比如边缘,角落等。
区域学习会把看到的保存起来,下次再次“看”到的时候会进行匹配,利用这些数据修正误差(漂移修正),使得轨迹追踪、定位更加准确。
c. 深度感知(Depth Perception)
深度感知给予设备“明白”物体之间的距离,这是通过独特的硬件设备技术实现的,比如“结构光”、“光速飞行时间TOF”和Stereo立体测量
4. Tango的简单使用方式
在Android中,Tango是一个后台Sevice,负责AR工作。我们使用Tango的方式就是启动这个Service,与其进行交互。
Tango主要有如下两个对象:
private Tango mTango; //Tnago对象
private TangoConfig mConfig; //配置
按照需求对TangoConfig类进行配置,下面代码配置了移动追踪和自动恢复
private TangoConfig setupTangoConfig(Tango tango) {
TangoConfig config = tango.getConfig(TangoConfig.CONFIG_TYPE_DEFAULT);
//开启移动追踪功能
config.putBoolean(TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true);
// 自动恢复
config.putBoolean(TangoConfig.KEY_BOOLEAN_AUTORECOVERY, true);
return config;
}
初始化Tango,调用它的connect()方法。
@Override
protected void onResume() {
super.onResume();
mTango = new Tango(HelloMotionTrackingActivity.this, new Runnable() {
@Override
public void run() {
synchronized (HelloMotionTrackingActivity.this) {
mConfig = setupTangoConfig(mTango);