読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

ProjectTangoとはなんなのか、どうしたらいいのか

前置き

この記事は
Androidその2 Advent Calendar 2016
の12/1の記事です
qiita.com

概要

ProjectTangoとは一体なんなのか
一言で言うなら
通常のスマホでは体験できないAR体験をいろいろなセンサーを搭載していることによって体験できる
端末である

ProjectTangoを以下の視点から考えてみるのが本記事の目的

目次

  • 現状
  • 得られる体験
  • 開発環境
  • 開発のやり方
  • Community

詳細

現状

ProjectTangoが発表されてだいぶ経つが、ようやくDevKitではない正式商品がLenovoから発売された(日本ではまだ未発売)
http://shopap.lenovo.com/jp/tango/

Tango対応アプリもいろいろ発表されている
ここではGoogle純正アプリのみ紹介しているがサードパーティによるアプリも多く公開されている
play.google.com

噂では11月下旬予約開始とあったが、まだ予約開始はされていない模様
www.itmedia.co.jp

追記12/2
Phab2Pro発売しました!!みんなTangoやろう!!
http://shopap.lenovo.com/jp/smartphones/phab-series/phab2-pro/

得られる体験

しのごの言うよりまずは動画を見ましょう
Tangoの全体的な紹介
www.youtube.com

家具設置アプリ
www.youtube.com

これらの体験を得るために以下の概念が使われている

  • MotionTracking
  • AreaLearning
  • DepthPerception
MotionTracking

www.youtube.com
Tangoデバイスが3D空間(現実空間)の中で自身の動きや方向を追跡できる機能
バイスを使って周りを歩き、前後左右に動かしたり、任意の方向に傾けたりすると、どこにあるのか、どの方向に向いているのかがわかる
これは、マウスの動作と似ているが、平面上を移動する代わりに、Tango空間のマウスパッドは現実世界みたいなイメージ

AreaLearning

www.youtube.com
MotionTrackingだけでは、デバイスは移動している領域の視覚的特徴を「認識」するが、「記憶」しない
AreaLearningをONにするとTangoデバイスは認識した内容を保存することができる
以前に保存した領域を入力すると、Tangoデバイスはその領域に以前来たことがあると認識することができる

DepthPerception

DepthPerceptionでは、奥行きを計測することによって、デバイスは周囲の形を解析することができる
仮想オブジェクトが実際の環境の一部であるように見えるだけでなく、その環境とやり取りすることができる「拡張現実感」を作成することができる
www.youtube.com
この動画では、3DObjectを現実空間にうまく配置している

開発環境

ProjectTangoでは上記の体験を開発するために、以下の開発言語がサポートされている

  • C
  • Java
  • Unity(C# or UnityScript)

C or Javaの場合AndroidStudioを使って開発することになる
Unityの場合、当然Unityを使うことになる

ProjectTangoを利用するケースではインタラクションなUIを求められるケースが多い
インタラクションUIを作るにはゲームエンジンであるUnityが非常に適している

またGooglePlayで公開されている多くのTangoAppもUnityで作られており、TangoAppはUnityで作ることがデファクトスタンダードになると考え、開発環境はUnityを使っていくのがベターだと考える

開発のやり方

今Tangoを学ぶ上で最適な登り方は以下だと思っている

Tango体験

GooglePlayでTangoアプリをいくつか落としてみて体験してみる
触ってみないとイメージができない
play.google.com

開発環境構築

触ってみて、イメージができたら開発環境を構築してみる
developers.google.com

MotionTracking, DepthPerceptionサンプル実装

まずは簡単な二つから
Unity Tutorial : Motion Tracking with Unity  |  Tango Unity SDK  |  Google Developers
Unity Tutorial : Depth Perception with Unity  |  Tango Unity SDK  |  Google Developers
この二つはスクリプトを書く必要がなく必要なprefabを配置していくだけなので、簡単にtangoを体験できる

AreaLearningサンプル実装

次にAreaLearningを実装してみる
Using Area Learning in Unity  |  Tango Unity SDK  |  Google Developers
こちらは少しスクリプトを動かす必要がある、かつ動きをわかっていないとアプリの操作ほうがわからないため少し頑張る必要がある

サンプル動かす

こちらにサンプルソースが公開されている
github.com

これらのprojectを実際にimportしてみて動かしてみる
そしてソースの難解さに頭を抱える

TangoConceptの各ページやUXページを読む

ここまでくるとTangoの深遠さが見えてくる
深遠さを理解したところでドキュメントを読んでいきましょう

まずpose, Frame, Coordinateなど必要な概念を見ていく
What Are Tango Poses?  |  Tango  |  Google Developers
Frames of Reference  |  Tango  |  Google Developers
Coordinate Systems  |  Tango  |  Google Developers

あとサンプルなどを動かしてみてご理解いただけたと思いますが、UXが洗練されていない
ですがUXのBestPracticeなどのページもあるので読んでいく
Using the Tango Unity UX Framework  |  Tango Unity SDK  |  Google Developers
Tango UX Best Practices  |  Tango  |  Google Developers

Community

上記を読んでもわからないことはたくさんあると思う
そんな時は以下に質問を投げてみましょう
plus.google.com
stackoverflow.com

だが見る限りあまり活発ではないので、正直一番早いのはTangoSDKのソースを読むことである
 UnityのTangoSDKはソースで提供されているため、どのように処理しているのか読むことができる

まだ正直バグっぽい動きもある
そんな時はissueをたててみよう
github.com

まとめ

上記ではまだまだ語れていない概念がたくさんある
LifeCycleであったり、Permissionであったり
User Permissions UX  |  Tango  |  Google Developers
Tango Permissions and Lifecycle in Unity  |  Tango Unity SDK  |  Google Developers

またTangoSDKはいまだに月に一回Updateが行なわれている
Release Notes  |  Tango  |  Google Developers
このアップデートにより急にアプリが動かなくなる現象がまだよく起こっているように感じる
特にAreaLearningまわりは管理デリケートに扱わないと簡単にアプリが落ちる

などなど問題点ばかりを上げる結果となってしまったが、TangoのMotionTrackingによるTrackingは最適な環境であれば数センチの誤差で観測できるし、DepthPerceptionは空間をそのままAR表現の対象とすることができるのでARのユーザー体験を考える上で非常に重要なデバイスになることは間違いない

我々がTangoを使うのではない、我々がTangoというUXを作っていくつもりでやっていきたい