概要
WebRTCを使ってRaspberry Pi Zero Wからのカメラ映像をHoloLens2に投影することにより、別の視点からの状況を同時に見れたりすることが出来たりする。今回記事にしたのは環境構築に非常に手間取ったためである。
結論としては、dllをビルドした時の対象アーキテクチャを合わせてあげる必要があった。
使ったハードと技術並べてタイトルにしただけなのになろう系みたいな長文タイトルになってしまった。
はじめに
HoloLens2の背面にカメラを載せて、車のバックモニターみたいな機構を作れないか調べてたらWebRTCと呼ばれる技術が使えそうだということで、実際に簡単なプロジェクトを作ってみることにした。
環境構築
以下の環境、ライブラリを使用した。
- Windows 10 Home
- Unity 2019.4.13f1
- Visual Studio 2019
- Raspbian GNU/Linux 10
- Microsoft Mixed Reality Toolkit 2.5.0
- MixedReality-WebRTC 2.0.0-preview.1
- MixedReality-WebRTC Samples 2.0.0-preview.1
- MixedReality-WebRTC-ayame
- WebRTC シグナリングサービス Ayame Lite
- WebRTC Native Client Momo
- Newtonsoft.Json 12.0.3
- SuperSocket.ClientEngine
- WebSocket4Net v0.15
プロジェクト作成
Raspberry Pi Zero W編
- OSはデフォルトのRaspberry Pi OSを使用。スイッチサイエンス社からOSがプリインストールされているキットが販売されていたため、OSのインストールは割愛する。
- WebRTCクライアントのWebRTC Native Client Momoを配置する。Raspberry Pi Zero W用のバイナリが提供されているのでそれをダウンロードする。
- 実行方法はSETUP_RASPBERRY_PI.mdを参照。
シグナリングキーとルームIDはHoloLens2側と合わせること。
HoloLens2編
ビルドサポート追加
HoloLens2はUWP環境らしいので以下のようにUWPのビルドサポートを追加する。
ライブラリ追加
MixedReality-WebRTC
プロジェクトフォルダ/Packages/manifest.jsonファイルに以下のように追記をする。
"scopedRegistries": [
{
"name": "Microsoft Mixed Reality",
"url": "https://pkgs.dev.azure.com/aipmr/MixedReality-Unity-Packages/_packaging/Unity-packages/npm/registry/",
"scopes": [
"com.microsoft.mixedreality"
]
}
],
"dependencies": {
"com.microsoft.mixedreality.webrtc": "2.0.0-preview.1",
"com.microsoft.mixedreality.webrtc.samples": "2.0.0-preview.1",
ライブラリがインポートされるとWindowタブ > Package Managerに追加される。
MixedReality-WebRTC-ayame
GithubのReleasesからMixedReality-WebRTC-ayama-x.x.x.unitypackageをダウンロードし、インポートする。
README.mdにはWebSocket4Net、SuperSocket.ClientEngine、Newtonsoft.Jsonのdllをインポートすると書いてあるので、それらもインポートする。
WebSocket4Net
v0.15ブランチを使用する。
WebSocket4Net.slnを開き、ビルドタブからWebSocket4Net.Net45のビルドを選択しdllファイルを作成する。作成されたWebSocket4Net.dllをプロジェクト内に配置してInspectorからPlatform settingsでUWPでの設定を変更する。
SDKをUWPに、ScriptingBackendをIl2Cppに変更している。
SuperSocket.ClientEngine
WebSocket4Netのビルド時にWebSocket4Net.dllと同じディレクトリにSuperSocket.ClientEngine.dllが作成されているので、それをWebSocket4Net.dllと同じようにプロジェクト内に配置してInspectorからPlatform settingsでUWPでの設定を変更する。
Newtonsoft.Json
Newtonsoft.Jsonのサイトからビルド済みのものをダウンロードできる。
netstandard2.0ディレクトリ内にあるNewtonsoft.Json.dllファイルを同様に、プロジェクト内に配置してInspectorからPlatform settingsでUWPでの設定を変更する。
Microsoft Mixed Reality Toolkit
GithubのReleasesからMicrosoft.MixedReality.Toolkit.Unity.Foundation.x.x.x.unitypackageをダウンロードし、インポートする。
シーン作成
MixedReality-WebRTC-ayameにシグナリングサーバーにayameを用いたサンプルシーンがあるのでそれを流用する。今回はRaspberry Pi Zero WからHoloLens2に一方的に映像を送るのでHoloLens2から送る処理は取り除く。
AyameSignalerのシグナリングキーなども設定する。この時、Raspberry Pi Zero Wと同じシグナリングキーとルームIDを設定する。
後々使うかもしれないのでMicrosoft Mixed Reality Toolkitもシーンに追加する。
Mixed Reality ToolkitタブからAdd to Scene and Configure...を選択してオブジェクトを追加する。
ビルド
Build SettingsとPlayer Settingsを設定しビルドを行う。
実機確認
— 夏野すぐる (μ兵装) (@fuyunosuguru) November 4, 2020