SONYのToF AR SDKを用いてToFセンサーを活用したアプリケーションを作成する。
今回はToF ARを使用するための各種セットアップと公式チュートリアルの1つであるDepth映像の表示を試す。
この章では、開発基盤であるUnityのインストール手順を記載する。
Unityバージョンについて公式は、2021.3.31f1
もしくは2022.3.11f1
を推奨している。(ToF AR v1.4.0)
一応Unity 2020以上であれば動作するらしいが、今回は推奨に則りUnity 2022.3.11f1をインストールする。
下記のダウンロードページにアクセスする。
「Unity 2022.X」 > 「Unity 2022.3.11」 > 「Unity Hub」のように順に選択していき、 Unity Hubを起動する。
Unity Hub起動後、以下のようなインストール設定ウィンドウが表示される。
Microsoft Visual Studio Community 2022
とAndroid Build Support
にチェックが入ってることを確認して「Continue」をクリック。
続けて、VS2022ライセンス条項の同意確認ウィンドウが表示されるので、チェックボックスにチェックを入れて「Continue」をクリック。
続けて、Android SDK/NDKラインセンス条項の同意確認ウィンドウが表示されるので、チェックボックスにチェックを入れて「Install」をクリック。
Unityのインストールが開始される。
※ VS2022がインストールされていない場合
VS2022がインストールされていない環境では、Unityインストール中にVS2022のインストーラが起動し、追加でアクションが必要となる。
インストール設定はデフォルトのままで「インストール」をクリックする。
続けてワークロードの確認が出るが「続行」をクリックし無視する。
すべてのインストールが完了すると以下のように表示される。
Android SDKが正常にインストールされたかどうかの確認として、下記の場所にSDK
とNDK
、OpenJDK
があるか確認する。
C:\Program Files\Unity\Hub\Editor\2022.3.11f1\Editor\Data\PlaybackEngines\AndroidPlayer
この章では、ToF ARの入手、セットアップ手順を記載する。
下記のダウンロードページにアクセスし、「ToF AR v1.4.0」とあるボタンをクリックする。
次に表示される利用規約に同意して、ToF ARツールキットをダウンロードする。
ダウンロードできたら解凍する。
Unity Hubに戻り、Projectsで右上にある「New project」をクリックして、プロジェクトを新規作成する。
ウィンドウ上部の「Editor Version」が2022.3.11f1
になっていることを確認して「3D」を選択し「Create project」をクリックする。
作成したプロジェクトのウィンドウ上部にあるメニューより「File」>「Build Settings…」を選択する。
続けて、表示されたウィンドウの左下「Player Settings」をクリックする。
続けて、Androidタブ(ドロイドくんアイコンのやつ)を選択して、「Other Settings」中にある下記の設定項目を変更する。
IL2CPP
.NET Framework
or .Net Standard 2.1
ARM64
のみにチェック特に確定ボタンなどはないので、設定を変更したらそのままウィンドウを閉じる。
次に、ウィンドウ上部のメニューより「Assets」>「ImportPackage」> 「Custom Package…」を選択する。
するとファイル選択ウィンドウが表示されるので、TofAR_Base_v1.4.0_Android.unitypackage
を選択して開く。
※ ファイルパスは{解凍先}\TofAR_v1.4.0\01_UnityProject\TofAR_Base_v1.4.0_Android.unitypackage
※ 「TofAR_Base_v1.4.0_Android.unitypackage」と「TofAR_Hand_v1.4.0_Android.unitypackage」があるが、Baseのほうを選択する。
ファイルの読み込みが完了すると、下記のようにインポートするファイルの選択ウィンドウが表示される。
今回はすべてにチェックが入った状態で「Import」をクリックし、インポートする。
ウィンドウ下部の「Project」>「Assets」にてTofAr
が確認できればインポート成功。
この章では、Unity用AR開発フレームワークであるAR Foundationのセットアップ手順を記載する。
AR Foundationの詳細についてはこちら。
ウィンドウ上部のメニューより「Window」>「Package Manager」を選択する。
続いて、Package Manager上部の「Packages」にてUnity Registry
を選択する。
続いて、左のリストを下にスクロールしてみつかるAR Foundation
を選択して、右上にある「Install」をクリックしてインストールする。
インストール完了後、下のようなダイアログがでる。
バックエンド有効化するかどうか聞いてくるので、「Yes」を押して有効化する。
(Unityが自動で再起動される。)
この章では、AR Foundationフレームワークの拡張機能であるARCore Extensions for AR Foundationのセットアップ手順を記載する。
ウィンドウ上部のメニューより「Window」>「Package Manager」を選択する。
続いて、Package Manager左上の「 + 」ボタンから 「Add Package from git URL…」を選択する。
続いて表示される、入力ボックスにhttps://github.com/google-ar/arcore-unity-extensions.git
と入力し、「Add」をクリックしてインストールを開始する。
インストールが完了するとPackage Manager上で以下のように確認できる。
この章では、ToF ARに同梱されているサードパーティのARFoundationConnectorをインポートする手順を記載する。
ウィンドウ上部のメニューより「Assets」>「ImportPackage」> 「Custom Package…」を選択する。
次に、ファイル選択ウィンドウでTofAR.ThirdParty.ARFoundationConnector-vx.x.x.unitypackage
(x.x.xはパッケージのバージョン)を選択して開く。
次に、すべてにチェックが入った状態で「Import」をクリックし、インポートする。
この章では、ARCoreの各種設定について記載する。
まず、今回使用するXRプラグインの提供元を指定していく。
ウィンドウ上部のメニューより「Edit」>「Project Settings...」を選択する。
続いて、左のメニューから「XR Plug-in Management」>「ドロイド君タブ」を選択していき、
Google ARcore
にチェックを入れる。
次に、ネイティブライブラリが実行可能なように設定する。
左のメニューから「Player」>「ドロイド君タブ」を選択していき、
「Publishing Settings」の「Build」にあるCustom Main Manifest
にチェックを入れる。
チェックを入れることで、Androidアプリの構成ファイル(AndroidManifest.xml
)が自動で作成される。
続いて、「Project」パネルより「Assets」>「Plugins」>「Android」と移動していき、
AndroidManifest.xml
をダブルクリックして開く。
開いたら、6行目にあるapplication
タグにandroid:extractNativeLibs="true"
を追記する。
AndroidManifest.xml1<?xml version="1.0" encoding="utf-8"?>2<manifest3xmlns:android="http://schemas.android.com/apk/res/android"4package="com.unity3d.player"5xmlns:tools="http://schemas.android.com/tools">6<application android:extractNativeLibs="true">7<activity android:name="com.unity3d.player.UnityPlayerActivity"8android:theme="@style/UnityThemeSelector">9<intent-filter>10<action android:name="android.intent.action.MAIN" />11<category android:name="android.intent.category.LAUNCHER" />12</intent-filter>13<meta-data android:name="unityplayer.UnityActivity" android:value="true" />14</activity>15</application>16</manifest>
※ extractNativeLibs
とは?
ネイティブライブラリ(C/C++で書かれたHWやOSの機能を直接操作するようなライブラリ)をAPKファイルから抽出し、デバイス上に展開するかどうかを指定するもの。
true
と設定すると、ビルド時にAPKファイルからネイティブライブラリが抽出され、使用可能な状態になる。
一方、false
と設定すると、APKファイルから抽出されない。また、ネイティブライブラリを展開することがないためアプリのサイズを節約できる。
ネイティブライブラリを必要とする場合は、true
に設定し、
ネイティブライブラリを必要としない場合は、false
に設定するのが一般的。
この章では、Android SDK PlatformのAPI Levelに対応するためのビルド設定について記載する。
※ API Levelとは
Androidバージョンと対応したフレームワークAPIのバージョン的なの。
Androidバージョン毎のAPI Levelは以下から確認できる。
API Level表: https://developer.android.com/guide/topics/manifest/uses-sdk-element?hl=ja#api-level-table
まず、ビルドツールであるGradleをインストールしていく。
ただし、Unity 2022では自動的にGradleがインストールされるっぽいので、おそらく確認だけで済むかと思う。
ウィンドウ上部のメニューより「Edit」>「Preferences...」を選択する。
続いて、左のメニューから「External Tools」を選択し、Gradle Installed with Unity
にチェックが入っていることを確認する。
次に、AndroidManifest.xmlにネイティブライブラリの使用を宣言する記述を追加する。
「Project」パネルより「Assets」>「Plugins」>「Android」と移動していき、AndroidManifest.xml
をダブルクリックして開く。
開いたら、以下のように追記する。
AndroidManifest.xml1<?xml version="1.0" encoding="utf-8"?>2<manifest3xmlns:android="http://schemas.android.com/apk/res/android"4package="com.unity3d.player"5xmlns:tools="http://schemas.android.com/tools">6<application android:extractNativeLibs="true">7<activity android:name="com.unity3d.player.UnityPlayerActivity"8android:theme="@style/UnityThemeSelector">9<intent-filter>10<action android:name="android.intent.action.MAIN" />11<category android:name="android.intent.category.LAUNCHER" />12</intent-filter>13<meta-data android:name="unityplayer.UnityActivity" android:value="true" />14</activity>15+<uses-native-library+android:name="libOpenCL.so"+android:required="false" />+<uses-native-library+android:name="libOpenCL-car.so"+android:required="false" />+<uses-native-library+android:name="libOpenCL-pixel.so"+android:required="false" />25</application>26</manifest>
次に、動作させるAndroidのバージョンに対応したAPI Levelを設定する。
ウィンドウ上部のメニューより「Edit」>「Project Settings...」を選択する。
左のメニューから「Player」>「ドロイド君タブ」を選択していき、
「Other Settings」の「Identification」にあるMinimum API Level
とTarget API Level
のそれぞれに、Android 12.0 (12L, API level 32)
を設定する。
この章では、グラフィックスAPIであるVulkanを無効化する設定について記載する。
Unityのほうで自動的にEnableとなっているが、ARCoreはVulkanをサポートしていないため、ビルド時にエラーが発生してしまう。
そのため無効化する設定が必要となる。
ウィンドウ上部のメニューより「File」>「Build Settings…」を選択し、表示されたウィンドウ左下の「Player Settings」をクリック。
続けて、Androidタブ(ドロイドくんアイコンのやつ)を選択して、「Other Settings」の「Rendering」で、Auto Graphics API
のチェックを外し、Vulkan
を選択した状態で「 - 」ボタンをクリックして削除(無効化)する。
以上で設定完了。
ようやく本題。
ToF ARが公式でチュートリアルとして紹介しているDepth映像の表示をやってみる。
「Project」パネルより、「Assets」>「TofAr」>「TofAr」にあるTofArManager
を画面左の「Hierarchy」パネルにドラッグ&ドロップする。
また同様に、「Assets」>「TofAr」>「TofArTof」にあるTofArTofManager
も「Hierarchy」パネルにドラッグ&ドロップする。
TofArManager
は、ToF ARで共通に使われる機能を提供するクラスで、ToF ARを利用するアプリケーションに必須となる。
TofArTofManager
は、デバイス接続を管理するクラスで、ToFカメラからのデータ取得のために必要となる。
続いて、アプリ起動時に自動的にToFカメラからデータ取得を開始するように設定する。
「Hierarchy」パネルより、TofArTofManager
を選択し、画面右の「Inspector」パネル中にあるAuto Start
にチェックを入れる。
続いて、取得したデータを表示するUIを作成する。
「Hierarchy」パネルの「 + 」をクリックし、「UI」>「Panel」と選択しPanel
を追加する。
次に、Depthデータを自動的に表示してくれるDepthViewRawImage
をPanelの子オブジェクトとして追加する。
「Project」パネルより、「Assets」>「TofAr」>「TofArTof」>「V0」>「Resources」>「Prefabs」にあるDepthViewRawImage
を画面左の「Hierarchy」パネルの「Panel」上にドラッグ&ドロップする。
では、先程実装したアプリケーションをデバイス上で実行してみる。
前提として、デバイスはUSBデバッグを有効化しておき、PCとデバイスをUSB接続しておく。
なお、USBデバッグ有効化の手順は割愛する。
まず、ウィンドウ上部にあるメニューより「File」>「Build Settings…」を選択する。
次に「Platform」でAndroid
を選択してから「Switch Platform」をクリックする。
少しの間待ってから、右の画像のように「Build and Run」ボタンが表示されたらクリックし、ビルドと実行を行う。
ビルド完了後、デバイス画面を確認すると下のようにDepth映像が表示された画面を確認することができる。
白色の部分はDepthが正しく取れていないところだ。
ToFセンサの精度があまりよくないのかなんなのかわからないが、正直イマイチなところ..
よりわかりやすくしたデモ動画を作成した。
この動画のようなアプリの実装方法を簡単にAppendix 2. アプリ実装応用に記載しておく。
ToF ARアプリ用のデバッグツール「ToF AR Server」を活用して、開発の利便性を向上させることができる。
ToF AR Serverをスマホにインストールし、起動させると、スマホ上のカメラやToFセンサーからデータを取得・送信し、アプリの動作をUnity上で確認できるようになる。
これにより、アプリのビルドやデバイスへの転送などの手順を毎回行う必要がなくなる。
まず、使用するデバイスにアプリストアからToF AR Serverをインストールする。
ToF AR Server: https://play.google.com/store/apps/details?id=jp.co.sonysemicon.tofar.server
インストールが完了したら、ToF AR Serverを起動する。
起動すると、下のような画面が表示される。
次に、Unityに戻って「Hierarchy」のTofArManager
を選択し、「Inspector」の「Tof Ar Manager (Script)」中にある以下の項目を設定する。
以上の設定が完了後、UnityのPlayボタンを押してデバッグを開始できる。
(少し実機での見え方と違うけど..)
TofArColorManager
を追加。
TofArColorManager
はAssets/TofAr/TofArColor
にある。ColorViewRawImage
をPanelの子オブジェクトとして追加。
ColorViewRawImage
はAssets/TofAr/TofArColor/V0/Resources/Prefabs
にある。ColorViewRawImage
はDepthViewRawImage
の上位に配置する。TransparentDepthView
に変更する。