人間のあるべき姿の探索

思索・人形・エンジニアリング

人形に憑依しつつ…

肉体から解放されたいので自分以外の意識のない肉体に入り込んでいこうと思います。VRアバターになるのも良さそうなんですが、現実空間で肉体を持って早数十年ということで現実空間への期待があり、まだあきらめるのは早いかなと思っています。

ということで、以下の形式をやっていきます。

デモ

youtu.be

途中から画面が切り替わっているように見えますが、HMD内でテクスチャを表示して、そこにカメラの映像が貼り付けられています。カメラの目の前に自分がいるので、単に切り替わったように見えますね。

システム構成

図の通りで、かなりシンプルです。PICO4の実行環境はUnityアプリケーションなので、別スレッドでビデオを受け取ってTextureに貼り付けるスレッドとHMDの姿勢を取得してロボットに送るスレッドからなっています。ロボット側はそれに対応してメッセージをやり取りする複数のスレッド(プロセスでも良いです)と、ハードウェアの接続をしています。

今後の話

VRのアプリケーションとしてクリティカルになるのが遅延で、基本的にはフレームレートが90fpsくらいほしいところですが、HMD内部でレンダリングするのではなく映像を送る為、フレームレートはあきらめて低遅延で送ることにしました。

今回は概念実証的な側面が強かったので、とりあえず送ることを重視してUDPで送りました。調べた範囲だとWebRTCを使うとパブリックなネットワークで通信できるんですが内部的にはUDPプロトコルなので、まずローカル環境で動かす…といったことを目標にしました。

因みに、5Gのネットワークを使ってない、(おそらく)メッセージが詰まっているなどでデモ動画はかなりカクカクして重たい動きをしているので、この辺りが改善点です。(送信制御何もせず送ってるだけなので…因みにTCPのソケット通信だとfpsが落ちる代わりに滑らかではあったので、後でそっちも試してみようと思います)

ちょっと実装的な話にはなりましたが、課題が多いですね…この辺り結構悩んでいて、現状の技術のレベルだと結構難しいらしいです。Teamsを両側で開くのも考えたんですが、そういったソリューションを提供しているAzure Communication Serviceは本格的なUnity対応をする予定がなさそうなので微妙な気持ちになっています。あとTeamsはWebRTC使ってるっぽくて内部的にはUDPのパケット送ってるっぽいんですが、遅延が400ms程度はあるので、やっぱりリアルタイムの映像配信はかなり難しいみたいですね。

完全な同期は少なくとも現時点では不可能と判断したため、アプリケーション的に遅延が許容されるものとして、今年中に何とか出来たらなと思います。カクカクするとストレスはあるんですが、VR酔いしやすい自分でも歩き回ったり激しい動作が無ければあまり酔いは感じなかったので、システムのレベルではなく、運用まで込みで考えています。

さすがに頭の中でタスクを抱えきれなくなったので大きなレベルで書き出してみたんですが、この一つ一つが更に細分化される形になるので作業量の多さに絶望してます。(例えばセキュリティ対応だと通信周りで認証入れる実装をしたり、それだけで最低1日はつぶれる気がしますが、そもそも人形の造形が数か月かかってるので終わりですね)