はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Meta Quest 3実機が来たのでアプリを実機実行してみる

前回:
hatsune.hatenablog.jp

前回は、Meta Quest 3開発用にUnity環境の準備を整えました。
今回は、Meta Quest 3実機が来たので、前回の最後に作ったアプリを実機で動かすまでをみていきます。

開発者モードの有効化

Meta Quest 3へアプリをデプロイするには、Meta Quest 3を開発者モードにする必要があります。
そのためには次の2つのステップが必要です。

  • Meta Quest for Developers で 新しい組織を登録
  • MetaQuestアプリで開発者モードを有効

Meta Quest for Developers で 新しい組織を登録

https://developer.oculus.com/manage/organizations/
まず、「Meta Quest for Developers」のサイトで新しい組織を登録します。
このとき、Meta Quest 3でログインしているものと同じアカウントと認証方法でログインするのが重要です。
私は、Facebookで使っているメールアドレスとFaceBook認証でログインしました。

MetaQuestアプリで開発者モードを有効

スマホのMetaQuestアプリでMeta Quest 3を開発者モードにします。
左下のメニューからメニュー画面に移り、[デバイス]アイコンをクリックします。

[ヘッドセットの設定]をクリックし、一覧表示から[開発者モード]をクリックします。


[開発者設定]画面で開発者モードをONにします。

PCとMeta Quest 3をUSBで接続

開発者モードに移行出来たら、PCとMeta Quest 3をUSBケーブルで接続します。
ここで初回は30秒~1分くらい待つのですが、Meta Quest 3側に「USBデバッグを有効」にするかどうかのダイアログがでますので、[許可する]ボタンをクリックします。

Unityからアプリをデプロイして実機実行する

実機側の準備ができたのでUnityを起動して、前回作成したMetaHelloWorldのプロジェクトを開きます。

Meta Quest 3実機をデプロイ先に指定する

[ファイル]-[Build Settings]メニューで設定画面を開いて、[Run Device]から「Meta Quest 3」を選択します。

Meta Quest 3にアプリをデプロイして実行

[Build and Run]ボタンをクリックすると、apkファイル名を指定する画面が表示されるのでプロジェクト名と同じ「MetaHelloWorld」を指定します。

1回目のビルドは、思っている以上に時間がかかりますので、気長に待ちます。2回目のビルドからはかなり速くなります。

ビルドエラーがでずにビルドが成功すれば、自動的に実機にデプロイされて実機でアプリが起動します。

まとめ

次回は、ビデオシースルーを有効にして周りの風景がみえるMRアプリとして実行できるようにします。

いまだからこそMRTK3を始めよう

前回:
hatsune.hatenablog.jp

来週には、Meta Quest 3が届きそうなので、ワクワクしながら実機開発できるときを待っています。
Meta Quest 3アプリ開発には、UnityとMRTK3を使う予定なので、開発環境を整えておいて、実機が届いたらすぐにMRデバイスでの「Hello World」ともいうべき豆腐をリアル空間に浮かせるアプリをつくれるようにしておきたいと思います。

MRTK3とは

MRTK3は、Mixwd Reality ToolKit の最新バージョンになります。
MRTKは、Microsoftから離れて運営委員会にてOSSとして開発が進められています。GItHubのURLもgithub.com/microsoft~から変更されています。
github.com

ライセンスの変更

Microsoft時代のMRTKはMITライセンスでしたが、運営委員会になって BSD-3-Clause license に変更になっています。
この二つのライセンスは非常に似ており、

  • 著作権表示とライセンス表示を維持する限り、自由にコードの使用、変更、配布を許可
  • 商用利用可能
  • 他のライセンスのプロジェクトに組み込み可能

という類似点があります。
相違点としては、「BSD-3-Clause license」には、「開発者の名前を無断で宣伝目的に利用できない」という制限が追加されている点です。
つまり、ライセンスが変更されたことによる使い勝手の違いはほぼないといっていいでしょう。

MRTK3の動作条件

2023/10/07時点 (MRTK v3.0.0時点) での動作条件は、Unity 2021.3.21 以降(OpenXR、Unity 2021.3 LTS、Unity 2022.3 LTS、Unity の XR Interaction Toolkit)となります。
また、今回はMeta Quest 3を対象としているため、Oculus XR Pluginは4.1.1以降を使うのですが、こちらの動作条件はUnity 2022.3.1以降となっています。
この2つを加味するとUnityのバージョンは、2022.3.1以降を使うのがよさそうです。
Unityの最新バージョンはUnity 2023となりますが、メジャーバージョンアップによる非互換をある程度の期間避けるならば、長期サポート版(LTS版)最新版であるUnity 2023(2023/10/07時点の最新は、LTS Release 2022.3.10f1)を使うのがよいでしょう。

Unity 2022 LTSをインストールする

UnityHubをダウンロード

UnityのサイトからUnityHubのインストーラーをダウンロードします。
unity.com

UnityHubをインストール

ダウンロードできたらインストーラーを起動してUnityHubをインストールします。

UnityHub自体は小さなプログラムなので、インストールすぐに終わります。

UnityHubを起動

インストールができたら起動します。

アカウントがないならアカウントを作成してから、サインインします。

Unity Editorのインストール

サインインが成功するとUnity Editorのインストールが可能です。ここでバージョンを選択するのですが、LTS版の最新版がデフォルトになっているので、変更せずにそのままインストールを進めます。

必要なディスクサイズは5GBくらいですが、ダウンロードとインストールにある程度の時間が必要なので、時間に余裕をもって始めましょう。

MRTK3をインストールする

MRTK3はUnityプロジェクトごとにインストールを行います。そこで、まずは空のUnityプロジェクトを作成して、MRTK3のインストールがどのようなものか感覚をつかんでみましょう。
今回の空プロジェクト作成には、以下のバージョンを使用しています。

  • Mixed Reality Feature Tool 1.0.2209.0 Preview
  • Unity Hub 3.5.2
  • Unity Editor 202.3.10f
  • MRTK 3.0.0
  • Meta XR Utilities 56.0.0-preview
  • Oculus XR Plugin 4.1.1

Unityで空のプロジェクトを新規作成

新規作成

Unity Hubを起動したら、[Projects]メニューから[New Project]をクリックして新規プロジェクトを作成します。

テンプレートとUnity Editorバージョンの指定

テンプレートとしては「3D」を選択し、プロジェクト名には「MetaHelloWorld」とします。もちろんプロジェクト名は任意につけることができるので他の名前でもOKです。

もし、複数のUnity Editorをインストールしている場合は、利用するUnity Editorのバージョンが想定しているバージョンか確認して必要に応じてバージョンを選択しなおしてください。

ターゲットプラットフォーム指定

Unity Editorで[File]-[Build Setting]で、Platfromで「Android」を選択します。

初めてのときはAndroid Supportがまだインストールされていませんので[Install with Unity Hub]をクリックしてインストールします。

Android Supportをインストールした場合は、Unity Editorを再起動してから[Switch Platform]をクリックしてターゲットプラットフォームを切り替えます。

Player設定

[File]-[Build Setting]-[Player Setting]でMeta Quest 3用に設定を整えます。

  • [Other Settings]-[Rendering]-[Color Space]:Linear
  • [Other Settings]-[Rendering]-[Auto Graphics API]:チェックを外す
  • [Other Settings]-[Rendering]-[OpenGLES3]-[Require ES3.2]:チェック
  • [Other Settings]-[Rendering]-[sRGB]-[Multithreaded Rendering]:チェック
  • [Other Settings]-[Identification]-[Minimum API Level]:Android 10.0 Marshmallow (API level 29)
  • [Other Settings]-[Identification]-[Target API Level]:Automatic (highest installed)
  • [Other Settings]-[Configuration]-[Install Location]:Automatic
Quality設定

  • [Rendering]-[Pixel Light Count]:1
  • [Rendering]-[Anti Aliasing]:4x Multi Sampling
  • [Textures]-[Global Mipmp Limit]:0:Full Resolution
  • [Texture]-[Anisotropic Textures]:Per Texture
  • [Particles]-[Soft Particles]:チェックを外す
  • [Terrain]-[Billboards Face Camera Position]:チェック

MRTK3

MRTK3は、「Mixed Reality Feature Tool」を使ってUnityプロジェクトに配置します。
MRTK3は、様々なコンポーネントから構成されていて、必要な機能を選択してUnityプロジェクトに追加することで、不要なコンポーネントを入れずにコンパクトな実行ファイルを作成することができます。
機能導入時にはUnity Editorを起動したままでも問題ありませんが、導入後にUnity Editorの再起動が必要なので、Unity Editorは終了しておいて作業するのがよいでしょう。

Mixed Reality Feature Toolのインストール

ダウンロードサイトから「MixedRealityFeatureTool.exe」をダウンロードします。インストーラーではなく実行ファイルそのもののダウンロードとなります。
learn.microsoft.com

Mixed Reality Feature ToolでUnityプロジェクトフォルダを指定

Mixed Reality Feature Toolを起動したら、MRTK3を配置するUnityプロジェクトフォルダを指定します。

指定したら[Discover Features]をクリックして導入する機能を選択します。

導入機能の選択


導入する機能を選択して、[Get Features]をクリックしてUnityプロジェクトにMRTK3に含まれている機能から使用する機能を追加します。今回は、次の5つを追加します。
MRTK3

  • MRTK Input 3.0.0
  • MRTK Standard Assets 3.0.0
  • MRTK UX Components 3.0.0
  • MRTK UX Components (Non-Canvas) 3.0.0

Platform Support

  • Mixed Reality OpenXR Plugin 1.9.0


選択した機能を確認したら[Import]ボタンで導入します。

Unity Editorの起動

MRTK3導入後の初回起動時に、MRTK3が使用している「Unityの新しいInput System」を使用しているため、切り替え確認ダイアログが表示されるので、[YES]をクリックして先に進みます。

Meta Quest 3用必要パッケージのインポート

ここまでで一般的なAndroid OSベースのAR/VR/MRデバイス向けのアプリを作成できますが、Meta Quest 3の固有機能を使うためのパッケージをインポートします。

Meta XR Utilities

「Meta XR Utilities」は、Meta Questを使うための固有パッケージです。
assetstore.unity.com
Unity Editorで[Edit]-[Project Settings]-[Package Manager]メニューから次のURLを登録しておくと便利です。

Name : Meta XR
URL : https://npm.developer.oculus.com
Scope : com.meta.xr.sdk

インポートは、[Window]-[Package Manager]から、「My Registries」を選んでリストの中から「Meta XR Utilities」を選んで[Install]できます。

Oculus XR Plugin

Quest 3には、Oculus XR Pluginの4.1.1以上が必要です。

「Oculus XR plugin」の追加は、[Edit]-[Project Settings]-[XR Plug-in Mangement]から行います。
設定前は、[Edit]-[Project Settings]-[XR Plug-in Mangement]には、次の4つが表示されています。

  • OpenXR
  • Project Validation
  • XR Interaction Toolkit
  • XR Simulation

[XR Plug-in Mangement]を選んで[Plug0in Providers]の[Oculus]にチェックを入れると「Oculus XR Plugin」が追加されます。

インストールされているOculus XR Pluginのバージョンを確認するには、[Window]-[Package Manager]から左上の[Packages]で「In Project」を選んで「Packages - Unity」の中にある「Oculus XR Plugin」を探せばわかります。

もしくは、[Project]タブの[Packages]-[Oculus XR Plugin]を選択して[Inspector]タブに表示される[Version]で確認することもできます。

Validationの解消

[Edit]-[Project Settings]-[XR Plug-in Mangement]-[Project Validation]を選択して、エラーや警告がないかを確認します。
エラーや警告が表示されていたら[Fix All]をクリックして解消します。

問題ない(含む、問題ない警告のみの場合)状態になると[Fix All]の表示が消えますので、この状態になるようにします。

Meta Quest 3用必要パッケージの設定

Oculus XR Plugin

[Edit]-[Project Settings]-[XR Plug-in Mangement]-[Oculus]で、[Target Devices]として[Quest 3]にチェックを入れます。

また、[Low Overhead Mode (GLES)]にもチェックが入っていることを確認します。

シーンの設定

それでは、最後に「シーン」を設定してMRTK3が利用できるように設定します。

シーンのカメラ削除

シーンに初期設定されている「Main Camera」ではなく、MRTK3のカメラを使うので「Main Camera」は削除します。

MRTK XR Rigの追加

[Project]タブの[Packages]-[MRTK Input]-[Assets]-[Prefabs]から「MRTK XR Rig」を[Hierarchy]タブへドラッグ&ドロップして追加します。

MRTK XR Rigの設定

「MRTK XR Rig」の初期設定値では、[Camera Y Offset]がY方向「1.6」mとなっています。
この「MRTK XR Rig」がアプリ上のカメラであり、Meta Quest 3を被った時の目の位置と目線の方向を表しますので、このオフセット値を0に設定します。また、[Position Y]も「0」、[Tracking Origin Mode]も「Device」とします。

  • Position:0, 0, 0
  • Tracking Origin Mode:Device
  • Camera Y Offset:0

Input Simulatorの追加

unity Editor上でデバッグするときに、Meta Quest 3の入力をキーボードでシミュレートするための機能「Input Simulator」を追加します。
[Project]タブの[Packages]-[MRTK Input]-[Simulation]-[Prefabs]から「MRTKInputSimulator」を[Hierarchy]タブへドラッグ&ドロップして追加します。

豆腐サンプル(XR Hello World)の作成

共通設定が完了したらMRアプリのHello Worldともいえる空中に浮かんだCubeを表示するアプリを作成します。

豆腐の追加

Cubeの追加

[Hierarchy]タブを右クリックして、[3D Object]-[Cube]メニューをクリックしてCubeを追加します。

Cubeの位置と大きさを調整

初期位置ではカメラと重なってしまうので、「Hierarchy」で「Cube」を選択して、その「Inspector」でPositionを(0, 0, 3)=3m先の位置、Rotationを(30, 30, 0)、Scaleを(0.5, 0.5, 0.5)にして配置します。

Unity Editor上で実行

Meta Quest 3実機上で動作させる前に(というか現時点で実機はまだ来ていないので)、Unity Editor上でデバッグ実行してしてみましょう。
Unity Editor上の[▶]ボタンをクリックしてデバッグ実行を開始すると自動的に[Scene]タブが[Game]タブに基地変わります。この状態でシフトキーを押すと、「Input Simulato」の機能によりMRデバイスの入力がシミュレートされて指マークが表示されます。

Meta Quest 3がでたので開発環境をおさらいする

Meta Quest 3が発売されました。
www.meta.com

Meta Quest 3とはどのようなデバイスなのでしょうか。

フルカラーパススルー

Microsoft HoloLensは光学シースルーといって、現実世界を直に見ることができて、そこに半透明のデジタルオブジェクトを一緒に見ることでリアルとバーチャルを融合しています。
一方、Meta Quest 3は、周りの現実世界を直に見るのではなく、本体に装着したカメラで捉えた映像をデジタルオブジェクトと一緒に見る「フルカラーパススルー」によってリアルとバーチャルを融合しています。
Meta Quest 3の「フルカラーパススルー」はカメラ映像の遅延が激しいと動きとの差異が生じて違和感を感じてしまうところですが、どうやら、Meta Quest 3の「フルカラーパススルー」はかなり性能がよいみたいで、実際にアキヨド店頭で体験してみましたが、なかなか良い感じを持ちました。
実際に現実にあるものを手で触れた時もずれは感じませんでしたので、Meta Quest 3を装着したまま日常生活を(傍からの見た目はありますが)送ることも出来そうです。
もっともスマホ画面の文字のような小さなものを読むのは少しつらいので、「ちょっと最近、老眼気味でー」という世界をみんなで味わえばいいんじゃないかと思います。

コントローラー

デジタル側のものを触るには、HoloLensのように自分の手を認識して触る(ハンドトラッキング)も可能ですが、HoloLensほどの精度はないようなので、通常はコントローラーを使ったほうがいいでしょう。
以前のMeta Quest 2のコントローラーにあったトラッキング用のリングもなくすっきりとしていて持った感じも好印象でした。

ケースは付属していない

Meta Quest 3には本体やコントローラを入れるためのケースは付属していません。
https://www.amazon.co.jp/dp/B0CCZW1KCF/
純正品もよいですが、サードパーティ製の安価で使いやすいものがでてくることを期待したいところですね。

Meta Quest 3アプリの作成環境

Meta Quest 3は、Meta Quest 2のアプリも動作するそうです。
だとすると、Unity + MRTK 3といういつもの組み合わせでアプリが作成できそうですね。

Meta Quest 3アプリ=Androidアプリ+Oculus XR Plugin

Meta Quest 3は、「Snapdragon XR2 Gen2」というSoCを使っており、AndroidベースのOSが稼働しています。
そのため、Unityでアプリを作成するときもターゲットOSとしてAndroidを指定してあげて、Oculus XR Pluginというライブラリを追加してあげることでMeta Quest 3の機能を使ったアプリを作成することができます。
「Oculus?」と首をかしげる人もそろそろ出てきそうですが、Meta Questシリーズの前身はOculus Questというもので、Oculus社というMeta社とは別の会社が開発・販売していたデバイスだったころの名残がまだライブラリに残っているわけです。

MRTK 3とは

MRTK 3は、Unity でのクロスプラットフォーム Mixed Reality 開発用のライブラリで、様々なMRデバイス向けのアプリを開発するときに便利なライブラリです。
github.com
元々は、Microsoft HoloLensなどMicrosoftのMRデバイス向けとして提供されていましたが、クロスプラットフォームを想定してHoloLens以外でのデバイス向けアプリにも対応し、現在ではMicrosoftから独立した団体が運営しているOSSプロジェクトとしてリリースされています。

まとめ

Meta Quest 3実機が来たら、HoloLens 1を最初に手にしたころのワクワクを思い出して、いろいろアプリをデプロイしてみたいと思います。
あと1週間くらいで届きそうなのでいまから待ち遠しいです。

次回:
hatsune.hatenablog.jp

nanoFrameworkを使ってデバッグ時にa3000000エラーが発生したときの対処法

nanoFrameworkを使ってM5Stack Core 2やM5Stick C PlusのアプリをC#で作成していてデバッグ実行すると、a3000000のエラーが表示されてアプリが起動せずにデバッグ実行が終わってしまうことがあります。

Error: a3000000

Waiting for debug commands…

このときの対処方法は、次の通りです。

ソリューションエクスプローラから参照設定を削除


mscorelib「以外」の参照設定を削除します。

Package.configの内容削除


packagesの中の要素を削除します。

NuGetでライブラリを再取得

あらためて必要なライブラリをNuGetで再取得します。

まとめ

a3000000エラーは、ファームウェア/ SDKの不一致による展開エラーの場合が多いので、この方法で解消できます。
もちろん、「Developer PowerShell for VS2022」を起動して、事前に各種バージョンを最新化しておいてください

dotnet tool update --global nanoff
nanoff --target M5Core2 --update --serialport COM4

KURO-DACHI/CLONE/CRU3でHDDをコピーする(自己責任でお願いします)

ノートPCを使っていると(デスクトップPCでも?)HDDとかは本当に使わなくなっていてSSD一択なのですが、自宅で唯一HDDを使っているのがHDDレコーダーです。

HDDの故障は突然に

jp.sharp
SHAPR BD-HDW80は、3.5インチSATAの1TB HDDが使われているのですが、さすがに長年使っていると耐用年数の関係からHDDがどうしても最初に故障します。
自宅のものもまさに
「ハードディスクにエラーが発生しました」
と表示されたウィンドウが何の前触れもなくある日突然表示されました。
リセット操作で治るときもあるようですが、残念ながら復旧してくれませんでした。
cs.sharp.co.jp

HDDを交換しよう

SHAPR BD-HDW80のHDDの中にはシステム領域もあるため、新品のHDDを好感しただけでは使えるようになりません。
使用中のHDDが完全に壊れているときにはどうしようもないのですが、アクセスできるようであればHDDをクローン(まるごとコピー)してから交換することで再び使えるようになる可能性があります。

HDDを購入しよう (WD20PURZ)

使用していたHDDは容量1TBのWD10EARSでした。
https://www.amazon.co.jp/dp/B0045OW6ZY/www.amazon.co.jp
SATAの5400rpmというスペックのHDDで同型番のものを入手してもいいのですが10年前のモデルですので、同容量でAV対応の最近の型番のHDDを調達しました。
https://www.amazon.co.jp/dp/B072L175ZW/
今回は、WD20PURZをチョイス。WDの紫とか買うことになる未来は予想してなかったです。

HDDのクローン (KURO-DACHI/CLONE/CRU3)

使用していたHDDと新品HDDを両方をPCに繋いでクローンソフトでクローンしてもいいのですが、今回は玄人志向のKURO-DACHI/CLONE/CRU3を使ってPCレスでクローンしてみました。
www.kuroutoshikou.com
Aスロットに使用していたHDD、Bスロットに新品HDDを入れて、CLONEボタンを長押しして白色LEDが点滅したら離してからすぐに再度CLONEボタンを押せば、AスロットからBスロットへのコピーが始まります。
クローン時間は意外にかかり、14:20~17:20とだいたい3時間くらいかかりました。

HDDの換装と初期化

HDDのクローンが終わったら、新品HDDをレコーダーにいれて電源をONにします。
すると「HDDの初期化に失敗しています。」と表示がされます。
このメッセージが出ても、クローンが失敗しているわけではなく、SHAPR BD-HDWシリーズでは、使用するHDDのIDを登録しないと利用できなくなっているからです。

サービスモードを呼び出すためのリモコン」です。

そこで、IDを登録する作業をするのですが、そこで必要になってくるのが「サービスモードを呼び出すためのリモコン」です。
こちらは一般販売しているものではありませんのでヤフオクなどから入手するか、代替信号を送信できる回路を組んだ赤外線リモコンを作成するか、どちらかが必要になります。
今回は、ヤフオクにて入手しました。

サービスモードに入る

BD-HDW80が立ち上がったら、リモコンの[ホーム]ボタンでメニュー画面に入り、[設定]-[初期化・更新]-[システム動作テスト]メニューを選択します。
この状態で、本体に向けて「サービスモードを呼び出すためのリモコン」を電源をONにすればサービスモードに入ります。

エイジング

次に本体リモコンの赤ボタンをクリックしてエイジングに入ります。

HDD-ID登録

次に本体リモコンを使って[HDD-ID登録]まで移動してクリックすれば「未登録」だったところが「済」となります。

ハードディスクの初期化

本体リモコンの[ホーム]ボタンでメニュー画面に入り、[設定]-[初期化・更新]-[ハードディスクの初期化]メニューをクリックしてHDDを初期化すれば完了です。

終わりに

          • -

元々ついていたHDDのシステム領域が読み込めないとコピーしても同じようにエラーなります。
HDDが壊れる前にクローンつくっておくというのも安全策かもしれませんね。

          • -

ダメもとで調べていろいろやってみたら無事に復活しました。
撮りためていた番組はすべて消えてしまったけど、1TBの奇麗な録画領域が復活しました。