- ホーム
- コラム
- YDC Labコラム
- ARCore調べてみた

ARCore調べてみた
2020.06.22
Lab研究員 中木
もくじ
- 1.◆XR
- 2.◆AR用フレームワーク
- 3.◆ARCoreとは
- 4.◆クイックスタートを試してみた
◆XR
さて、世の中には「ほにゃららR」という言葉が沢山登場しています。
ここでの「R」は「Reality」です。
- VR(Virtual Reality) : 仮想現実
- AR(Augmented Reality) : 拡張現実
- MR(Mixed Reality) : 複合現実
- SR(Substitutional Reality) : 代替現実
- XR(X Reality) : クロスリアリティ
- CR(Cinematic Reality)
- RR(Real Reality)
・・・違い分かります??
VR・AR・MRに加えて、これらの技術を総称する「XR」が登場したようです。
それぞれの技術の違いを図にまとめると

こんな感じです。
◆AR用フレームワーク
では、ARをエッジデバイス(Android端末)で実装するにはどうすれば良いのでしょう?
ということでAR用のフレームワークを調べてみました。

なんと、17種類も見つかりました。
この中で、Androidで使えてリリース後も無料で使用できるのは、ARCoreだけですね。
ということで、ARCoreについて調べました。
◆ARCoreとは

Google社が提供するARプラットフォームです。
赤外線奥行きセンサーの様な特殊なデバイスを必要とせずに、スマホの内蔵カメラやモーションセンサーだけでARコンテンツを構築することが出来ます。
開発環境としては下記に対応しています。
- Androidネイティブ(Java)
- Unity
- Unreal
- iOSネイティブ(Objective-C)
UnityでもiOSでも使えるというのは嬉しいですね。
機能としては、下記のようなものがあります。
モーショントラッキング
カメラの画像を分析して、物体の表面とする場所にマーキングし、座標を使って3D空間上に立体的な像を検出することが出来ます。
水平面の検出(認識)
カメラ映像とIMUセンサーを使用して水平面を検出し、自由に物やキャラクターなどを配置することが出来ます。
Light estimation(光源の推測)
カメラによって全体の明るさを数値で検出することが出来る機能です。
Augmented Images
現実に有る物体に合わせてARオブジェクトを動かすことができる機能です。
マーキングした物体が動いていれば、それに追随してARオブジェクトを動かすことができます。
Augmented Faces API
カメラで捉えた顔の凹凸を読み取ることができます。
スノーっぽいことが出来そうですね。
Environmental HDR
機械学習によって、陰影や反射をARオブジェクトに反映する機能です。
現実の物体とARオブジェクトを違和感なく並べることが可能です。
Scene Viewer
ARCore対応のAndroid端末上のブラウザから、ARで現実世界上に3Dオブジェクトを表示することが出来る機能です。
ウェブサイトにARコンテンツを追加することが出来ます。
Sceneform
アニメーション機能によってARオブジェクトをジャンプさせたり、スピン、移動することなどができるものです。
躍動感のあるARコンテンツを実現できいるようになります。
◆クイックスタートを試してみた
では早速、動かしてみましょう!!
というわけで、公式の「Quickstart for Android」を試してみました。
https://developers.google.com/ar/develop/java/quickstart
以下、Quickstart for Androidを順番に読み進めています。
・まずはAndroid Studioのインストール
version 3.1以降で、Android SDK Platform version 7.0(API Level 24)以上をインストールしろとのこと。
・・・良くわからないけど、とりあえず最新版インストールしておけば問題ないでしょう。
Android Studioの公式ページからインストーラをダウンロードし、インストールします。
https://developer.android.com/studio/index.html
※ Android Studioは、EclipseのPleiades日本語化プラグインが使えるみたいです。
英語のインターフェイスに不安が有る方は日本語化しましょう。
https://mergedoc.osdn.jp/#pleiades.html#PLUGIN
・続いてサンプルプロジェクトを開く
githubからダウンロード

samplesフォルダ内に、HelloARプロジェクトがあるので、それを開けとのこと。

・・・hello_ar_java ですかね。
・次に、デバイスまたはエミュレーターの準備
https://developers.google.com/ar/discover/supported-devices
サポートされている端末 ↑ 又は Androidエミュレーターで動かせます、と。
ただし、エミュレーターで動かす場合は、Google Play Storeにサインインするか、Google Play Services for AR を手動でアップデートする必要があるとのこと。
・・・これはエミュレーターが起動してからの作業ですね。
・いよいよ、サンプルの実行
Deployment targetを選んで Runボタン▶で実行できるとのこと。

ツールバーの真ん中辺りに Runボタン▶ありますね。
その左横のドロップダウンでターゲットを選びます。

・・・はい。Android端末も接続しておらず、エミュレーターの設定もしていないため、ターゲットに選択できるアイテムがありません。
→ AVDマネージャで仮想デバイスを作成します。
AVD:Android Virtual Device

「仮想デバイスの作成」をクリックします。

独断と偏見による推測ですが、Pixel 3 を選べば大丈夫でしょう。
先程、Google Play Storeにサインインする必要がある、と書いてあったので、「Playストア」列にマークが付いているものを選びました。

これも先程 API Level 24 以上 との記述があったので、一番新しそうな リソース名:Q を選択しました。
※ 初回はイメージのダウンロードが必要です。リソース名列に「Download」と書いてあるイメージは未ダウンロードです。「Download」の文字をクリックするとイメージのダウンロードが出来ます。

問題なさそうなので、そのまま「完了」

仮想デバイス一覧に登録されました。
AVDマネージャの画面を閉じて、Runボタン▶横のドロップダウンを確認します。

今作った仮想デバイスが選択されていますね。
この状態でRunボタン▶をクリックします。

Androidエミュレーターが起動し、実行したアプリも起動しました。
・・・が、Google Play Services for ARを最新にしろと出てますね。
とりあえず、「CONTINUE」をタップ。
Google Play Storeに飛ばされるのでサインイン。

Google Play Services for AR のページに来ましたが、、、、あれ?
「Your device isn’t compatible with this version.」
日本語にすると「お使いのデバイスはこのバージョンと互換がありません。」
・・・クイックスタートの最初の方で、「Google Play Services for AR を手動でアップデートする」との記述が有ったのを思い出したので、その方法を確認します。https://developers.google.com/ar/develop/java/emulator#update-arcore
ふむふむ。
1. GitHubのリリースページから最新の「Google_Play_Services_for_AR_1.17.0_x86_for_emulator.apk」をダウンロード
https://github.com/google-ar/arcore-android-sdk/releases
2. ダウンロードしたAPKを、起動中のエミュレーターにD&D
すると、アプリ一覧に「Google Play Services for AR」が登場する。

これでもう一度サンプルプログラムを実行

起動しました!!!
画面真ん中に写っているのは、エミュレーターの操作方法の説明。
背景に写っているのは、カメラで撮影している部屋の映像です。
(エミュレーターなので、部屋もバーチャルです)
部屋の中を動いて、まずは平面の検出をします。

次にARオブジェクトを置きます。

少し視線を移動させてみます。

ちゃんと動いていますね。
今回は「水平面の検出(認識)」の機能使って紹介しました。
次は実機で動かしてみて、他のARCoreの機能を試してみたいと思います。
それでは、最後までお読みいただきありがとうございました。