Augmented Reality (AR)
Overview
GoogleのARCore技術を利用したAugmented Reality (AR)拡張現実のAndroidアプリを開発しました。 Androidのカメラの中で3Dモデルの飛行機を任意の経路で飛ばすことができます。
Source Code
Source code may be found as the Kotlin program in the GitHub repository.
https://github.com/HideoMiyauchi/AndroidApp
Usage
準備
アプリの中で飛行機の制御用として用いる為に、どちらかの拡張画像(Augmented Images)を4cm〜5cm程度の大きさで印刷してください。印刷ができない場合は、日本円の1000円紙幣を使うこともできます。
インストールと起動
本アプリをGoogle Playよりインストールし起動します。
その際、カメラ使用許可を与えてください。
起動時のダイアログに従ってGooglePlay開発者サービス(AR)をインストールしてください。
その後、左のナビゲーションバーのFlight Simulation(AR)を選択して開始します。
拡張画像による飛行方法
- ①環境理解
- スマホを縦に持って周囲を写してください。 アプリは周囲の環境の特徴点と平面を検出し、認識した平面に白いメッシュを描きます。 細かいメッシュは遠い場所の平面を、荒いメッシュは近い場所を表します。 メッシュが現れるまで時間が掛かる場合がありますので辛抱強く待ってください。
- ②アンカーの決定
- 現れたメッシュの1つをタップすることで、そのメッシュは実世界の基準座標(Anchor)となって、 仮想オブジェクト=飛行機を表示します。同時にメッシュの表示は消えます。 別のメッシュを選択したい場合は再びタップすることでメッシュを表示できます。
- ③拡張画像
- 準備で印刷した拡張画像(Augmented Image)を画面内にかざします。カメラから良く見えるようにかざしてください。
- ④拡張画像の認識
- アプリが拡張画像を認識すると、その周囲に小さな仮想枠を表示します。 この状態で拡張画像の向きを少し変えると、連動して飛行機の向きが変わります。 拡張画像を動かして飛行機を真っ直ぐに保つ角度を習得してください。 大きく拡張画像を動かしてしまうと認識できずに仮想枠が連動しなくなるので、仮想枠が追従できる程度の大きさで拡張画像を動かす練習をしてください。
- ⑤別の拡張画像を用いる
- 地球画像以外でも認識できます。写真のように日本円の1000円紙幣でも使えます。
- ⑥飛行開始
- “START”ボタンを押すと飛行機が進み始めます。 拡張画像の動きで飛行機の飛行ルートを変えることができます。 右のシークバーで飛行機の速度を調整できます。 途中で見失った場合や制御不能に陥った場合は”RESET”ボタンを押してください。
デモによる飛行方法
拡張画像無しのデモフライトを行うことができます。上記①と②の手順⑤に”DEMO”にチェックをし”START”ボタンを押してください。すると決められた経路を飛行しはじめます。 右のシークバーで飛行機の速度を調整できます。
内部構造
ARCoreセッションは、事前に参照画像を登録しておいた拡張画像データベース(Augmented Image Database)を開始時に読み取ります。次にカメラデバイスにアクセスし、撮像画像からアンカーとなる平面と拡張画像の検出を行います。
検出された平面と拡張画像は実世界座標系での位置・姿勢として追跡され、カメラデバイスが移動・回転しても常に補正計算されます。
このアプリでは拡張画像の三次元姿勢(Pose)を飛行機の昇降舵(elevator)と補助翼(aileron)に連動させ、Flight Dynamicsで飛行経路を計算し、3DオブジェクトとしてOpenGLで描画を行っています。
拡張画像について
拡張画像(Augmented Image)について触れておきます。
Googleからの要件は次のとおりです。

このようにARCoreが認識できる拡張画像は品質スコアが75以上が推奨になっています。
Googleが提供している地球画像の品質スコアは100でしたが、自分が作成した飛行機画像は90でした。1000円札では70でかろうじてセーフでした。
さらに色々な画像を調べてみましたが品質スコアが高い画像がなかなか見つかりません。絵画であれば特徴点も多く、幾何学的でも無いのでスコアが上がるだろうと期待していたのですが、レオナルド・ダ・ヴィンチのモナリザでも品質スコアは70でした。
この後、ARCoreのドキュメントに次の一文を見つけました。
A good reference image is hard to spot with the human eye.
まさにこれだと思います。
最後に
以前は外部のジャイロセンサーからの姿勢データを元に飛行機を動かしていましたが、拡張画像を使えばジャイロ自体が不要になるだろうという発想で今回の開発をしました。ほどほど実現できたと思いますが、拡張画像の動きを大きくするとARCoreが追跡できなくなることがあるので、今後の改善に期待したいところです。
YouTube( Android + ARCore )
PRIVACY POLICY
This privacy policy has been compiled to better serve those who are concerned with how we treat information and what permissions are required to use this app.
Camera permission is required to take pictures of the environment and to overlay the 3D object.
This app do not collect any sensitive personal information from users.
This app runs on Google Play Services for AR (ARCore), which is provided by Google LLC and governed by the Google Privacy Policy.
ARCore is to power this session, Google will process visual data from your camera.