人間のあるべき姿の探索

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

人形になる為のシステム:HMD側アプリケーション

人形になるぞ!

godiva-frappuccino.hatenablog.com

 人形になる為に、人形に機構を仕込んで、更にHMD経由でその人形を操作できるようにします。今回はHMD側のシステムを紹介します。

 要件としては、頭部の姿勢を人形システムに送信できること及び人形の視線映像を受信できることです。まず、ローカルネットワークでの通信を前提として、それぞれUDPで送信します。その前提のもと、通信プロトコル等考えていきます。

 頭部の姿勢はHMD及び人形で異なります。人形システムはその自由度に合わせた3自由度の姿勢モデルがあり、HMDはより汎用的な形でHMDが取れる頭部姿勢のモデルを作成します。実は元々5自由度想定していたので5自由度分の姿勢を持ったPoseModelを定義しています。これをJsonにしてUDPでひたすら人形システムに投げつけます。単位系は簡易的な値オブジェクトの様なものを定義しています。厳密に定義すると重くなってしまいそうなので見通しやすさも考慮して、デフォルトで取得されるメートル単位から人間がコーディング基い概念のモデリングをするのに扱いやすいセンチメートル単位に、そして確度はラジアンに変換して扱うことでデータが入る部分で単位を定義してPoseModelインスタンスを作成すればその後は単位がずれないように制限しています。

 送信用のメインプログラムは適当にループを回して条件を満たしたところで送信を始めます。Unity側でUpdate関数が呼ばれるのが30fpsなので、それを10~11fps程度に抑制しつつ人形側に姿勢を送ります。

 視線映像については詳細が長くなるので割愛しますが、UDPでひたすら画像を受け取り続けて視界に表示させます。Unity画面上にはメニューを表示するキャンバスとカメラ映像を表示させるPlaneを配置し、Main Camera配下に各コンポーネントを配置することでメニューを頭部姿勢に追従させます。オレンジのやつがカメラ映像表示用部分です。