Apple社がWWDC2017でARKitを発表していたので、Androidエンジニアとしても、いつまでもPanicARを使っている場合ではないと思い、Google Tangoに手を出すことにしました。

Google Tangoとは

Googleが公開しているAR(Augmented Reality)のフレームワークと、それを提供するGoogle社製の"Tango Core"アプリとなります。
Google Tangoを利用してARを実現させるアプリは、そのデバイスに"Tango Core"アプリがインストールされている必要があるので、恐らく"Tango Core"アプリにてモーショントラッキングカメラや深度カメラを用いて空間を認識し、その情報をプロセス間通信にて3rd Partyアプリに提供しているようです。

そのため、デバイスが対応していないとTangoは動作しない機能となっていて、2017.06現在で以下の2機種しかサポートしていないです。
機種名称メーカー発売日備考
Lenovo Phab 2 ProLenovo2016.11.01Google VR(DayDream)に対応していない
ZenFone ARASUS2017.06.23Google TangoとGoogle VR(DayDream)の両方とも対応

対応している機種が未だ少ないので、開発者泣かせの機能となっていますが、今後は少しずつ増えていくことを期待したいです。
※ 弊社では、DayDreamも調査したかったので、ZenFone ARを発売日前に予約しました。

提供されている機能

フレームワークとして、主に以下の機能が提供されています。
名称概要備考
Motion Tracking3次元空間において、デバイス自体の動きや向きをトラッキングする機能-
Area Learningデバイスがいる空間を学習・保存することで、デバイスがどこにいるかを認識できるようにする機能
例:階段やキッチンにいる
-
Depth Perception物体同士の奥行きの認識-
Visual Positioning Service別の空間を今いる空間にマッピングする機能。
Motion Tracking、Area Learning、Depth Perceptionを組み合わせることで実現される応用機能
サンプルアプリが提供されていないので、未だ実現できていない可能性あり

開発言語・環境

開発言語・環境として以下の3種類の言語(?)向けのAPIが提供されています。
  • C言語:Android NDKにて開発するためのAPI
  • Java:Android SDKにて開発するためのAPI
  • Unity:Unityを使用して開発するためのAPI

パーミッション

作成するアプリとしては、Augmented Realityを提供するため、カメラ機能を使用するパーミッションが必須です。
作成するアプリとプロセス間通信で連携する"Tango Core"アプリは以下のパーミッションが有効になっていないと、正常に動作しなくなります。
また以下のパーミッションは"Tango Core"アプリ(バージョン: 1.54:2017.05.19-ikariotikos-release-0-gb8208291:240016016:stable)からユーザへのパーミッション要求ダイアログ表示は発生しないので、無効にされてしまうと作成したアプリからは対応できないようです。
パーミッション名概要
カメラカメラの起動権限。作成したアプリ側で権限を得ていても"Tango Core"アプリが無効になっていると、カメラは起動できるが仮想オブジェクトが表示されない
位置情報位置情報取得権限。位置情報を必要としないときは正常に動作するが、必要なときは動作しなくなるらしいですが、未確認(Google Playにアップされている位置情報が必要なアプリで試してみましたが、正常に動作していました)
領域学習
(Area Learning)
デバイスがある場所を学習する権限
モーショントラッキングモーショントラッキングを使用する権限
データセットデータセットを使用する権限

領域学習などの権限を得るには、ActivityCompat.requestPermissionsではなく、指定されたActivityを起動し、それの戻りをActivity.onActivityResultで受ける必要があります。
ユーザへの権限取得確認用Activity起動Intent: Tango.getRequestPermissionIntentにて生成
指定できる値は以下のようになっています。
種別
Tango.PERMISSIONTYPE_ADF_LOAD_SAVE領域学習の権限取得用
Tango.PERMISSIONTYPE_MOTION_TRACKINGモーショントラッキング実行権限取得用。
ただしGoogle社より公開されているjava_motion_tracking_exampleでコールされていないので、現状はコールしなくても動作するようです
Tango.PERMISSIONTYPE_DATASETデータセットへのアクセス権限取得用
また、これらの権限はアプリ毎で管理されている情報ではなく、"Tango Core"アプリで一括管理されています。こちらの権限を取り消したい場合は、
com.google.tango/com.google.atap.tango.TangoSettingsActivity2
を起動して、その先の"許可"から取り消すことになります。
ZenFone ARでは、設定アプリにある"Tango"から起動することが可能です。

アプリリリース時の注意点

  • インストール制限
  • Google Tangoはデバイス要求を満たしていないと動作しないため、インストールできるデバイスを制限する必要があります。
    Google TangoをサポートしているデバイスはGoogle提供されているライブラリが組み込まれているようで、それをインストールする際の必須条件とすることが求められています。
    <application ...>
                        :
        <!-- 以下のライブラリ使用宣言を追加 -->
        <uses-library android:name="com.projecttango.libtango_device2" android:required="true" />
                        :
    </application>
    
  • ファミリー向けアプリとしてリリースする場合の注意喚起の表示
  • ファミリー向けプログラムに同意しているアプリは、アプリの起動時に以下の内容の警告を表示しなければなりません。
    • 保護者による監視が重要であること
    • 仮想現実内での危険行為が物理現実にも影響を及ぼすこと


これまでAndroidアプリ開発をやってた身としては、Java環境での開発と思いましたが、ガリガリOpenGLのコードを実装できる能力を持たないものとしては、Unityを使うことになるかと。
なので、次回からは"Unityを使用したGoogle Tango"の話題を中心に記載していきます。


参考文献:
Tango Developer Overview
ファミリー向けプログラム

コメントの投稿