メタバースからお蕎麦を食べる
VRChat上にいるお友達にロボットアームを操作してもらい、現実の僕にお蕎麦を食べさせた。作ったものの仕組みとか思い出についてまとめる。
動いている様子
クワマイもVtuberになって4年が経ちました🎉🥳
— クワマイ (@beet_lex) 2022年3月21日
今回はVRChatからロボットアームを操作してお蕎麦を食べさせてもらいます。
そして初めてのVtuberコラボゲストとして網野環さんが来てくださいました。ありがとうございました。
メタバースからお蕎麦を食べるhttps://t.co/VfWvFJxEue pic.twitter.com/qJcGgt8Kg7
GitHub
作ったものはここに公開してる。使い方とか書いてないからもし遊んでみたい人は聞いてね。
VRChat上のオブジェクト位置姿勢を色に変換して画面に描画するshader。
描画された色を読み取ってオブジェクト位置をロボットアームに送るUnity project。
動いてる仕組み
VRChat上にある小さな立方体を掴んで移動させるとロボットアームの手先が連動するようになっている。仕組みを順に解説する。
オブジェクト位置姿勢を画面に出力
Shaderを使ってVRChat上のオブジェクト位置姿勢を色に変換して画面に描画した。位置姿勢を32bitの2進数に変換して縦に並べて表示している。XYZをRGBに対応させているのでカラフルな感じ。
画面をキャプチャ
VRChatの画面に出力された色を読み取り2進数から10進数に戻すことで位置姿勢を取得する。画面キャプチャには凹さんのuWindwCaptureを使用させていただきました。
位置姿勢をロボットに送信
取得した位置姿勢をロボットに送信する。使用しているロボットはROSを使用しているので位置姿勢をROSのPoseStampedという形式に変換してロボット制御用のPCに送っている。PoseStampedを送るためにROS-TCP-Connectorを使用しています。
ちなみにお仕事でUnityとロボットを連携させる教材を作ってるのでよかったら見てね。ロボットはシミュレータがあるからパソコンさえあれば無料で遊べちゃう。
ロボットアームを動かす
受信した位置姿勢に合わせてロボットの手先位置を移動させる。移動させるための関節角を計算する逆運動学についてはこちらの記事。
VRChatから現実を見る
VRChatにいるロボットの操作者に現実世界が見えるようにWebカメラの映像をVRChatに配信した。映像配信にはTopazChatというツールを使用させていただきました。
映像がないと操作者には声しか頼りにならないのでスイカ割りや二人羽織のような状況になる。操作が難しくなるしなによりつまんない。TopazChatのおかげでエンタメ性が高まった。
記事になった
MoguLiveで記事にしていただきました。個人的に遊んでるだけだったので記事になるのは不思議な感じ。どこかお出かけしたらニュースになっちゃった様な感覚。
感想
前々から思ってることだけどシンプルなロボットでも人間が操作すると意志や感情をともなった賢そうな動きをするのが面白い。動画でも言ってるようにフォークを口に押し込まれた感覚は実際に人から食べさせてもらう感覚に近くて生々しさを感じられた。
人から食べさせてもらう行為は親子とか近い間柄で行われるイメージがあったので、他人から食べさせてもらうと身内にでもなったような不思議な感覚になった。
今回でVRChatとROSを連携させることができたので、もっと自由度の高いロボットアームや移動ロボットと連携させたりできたらいいな。
関連記事
VRChatからリアルに干渉することは過去にもちょっとやってるのでよかったら見てね。そもそもVRChatからロボットを動かすのはVRChatを知った当初からやりたかったことだったから今回できてよかった。