ロボット×複合現実ゲーム - rokihi/MobileRobotShootingGameRTC GitHub Wiki
これからのゲームはロボット×複合現実だ。
ロボット×複合現実ゲームシステムの一例としての,RTミドルウェアを用いたシンプルな移動ロボットシューティングゲーム.
本システムを参考として,今後ゲームやアートなど多種多様なロボット×複合現実システムが生み出されることを期待する.

RTMで,ロボット操縦やカメラ画像の取得,位置姿勢,ゲームの状態判定などを統合する.
Unityで,ヘッドマウントディスプレイを通した複合現実感の表現を行う.
ラッパーツールを利用してUnityをRTMとつなげて,ゲームの状態判定RTCからの出力(=ゲーム状態)を受け取り,それにあわせた表現をしている.
プレイヤーは,ヘッドマウントディスプレイを通してUnityで表現された複合現実感を体感しながら,移動ロボットを操縦し,敵への攻撃を一定数成功させることを目的とする.
今回は, ロボットの位置姿勢取得にARマーカー, 操作デバイスにJoystick, 移動ロボットにKobukiを用いているが, コンポーネントの入替えによって異なる仕様にすることも可能である.
プレイヤーの操縦するロボットと敵の位置姿勢(TimedPose2D),攻撃の入力(joystickボタン入力;TimedBooleanSeq)を受け取り,当たり判定やヒット数のカウントを行い,ゲーム状態を出力.
コンフィグ値で設定した規定回数,敵に攻撃がヒットするとプレイヤーの勝ちとなる.攻撃の当たる範囲もコンフィグ値で調整できる.
出力に関して,今回は一例としてのシンプルのため,各状態ごとにポートを設け整数(TimedLong)を出力している.
(勝敗:0/1,プレイヤーの攻撃発生:0/1,プレイヤーのダメージ:0~3,敵の攻撃発生:0/1,敵のダメージ:0~3)
より複雑なゲームシステムにおいては,idlで独自型を定義するとよい.
また,敵の位置姿勢や攻撃は,人間が操作しても他のコンポーネントにおいて自動で生成してもよい.
自動で先頭のデータが1の配列(TimedBooleanSeq)を出力.
敵の攻撃(Joystickボタン押下)を想定したもの.出力を一定時間ごとかランダムか,コンフィグで設定する.
カメラ画像(Img::TimedCameraImage)を受け取り,ARマーカーを検出し, 検出したマーカー情報を配列(ARTKMarkerInfoSeq)として出力.
ARToolKitのインストールおよびARToolKitに含まれるプログラムで生成するカメラパラメータのファイル(.dat)が必要.
ARマーカー情報(ARTKMarkerInfoSeq)を受け取り,コンフィグ値で指定したIDに対応するマーカーの位置姿勢(TimedPose2D)を出力.
Webカメラで取得した画像(Img::TimedCameraImage)を出力.
コンフィグでpreview_windowをtrueにすると画像を確認できる.
カメラ画像(Img::TimedCameraImage)を入力として,キャリブレーションを行いキャリブレーションデータを生成する.
キャリブレーション用chesspatternを印刷し,それが写った状態のカメラ画像のウィンドウをアクティブにしてtを入力.10回でキャリブレーションデータ(.yml)ができる.
ジョイスティック/ゲームパッドの操作を,スティック(TimedLongSeq)・ボタン(TimedBooleanSeq)として出力.
SFMLのインストールが必要
スティックの入力(TimedLongSeq)を,速度情報(TImedVelocity2D)に変換して出力.
速度入力(TimedVelocity2D)によって,移動ロボットKobukiを動かす.
libkobukiのインストールが必要.
Kobukiに接続したノートPCで動作させる.動作時はCOMポートをコンフィグ値で設定する.ポート番号はデバイスマネージャーで確認.ただし10以上の場合は「\.\COMポート番号」とする!(COM24なら\.\COM24)
ゲーム状態を受け取る.入力に応じてUnityでのイベントが発生する.
ラッパーツールを利用して,Unityのスクリプト内でRTCを生成し,RTCの入力をUnityで受け取っている.
- OpenRTMをインストール.
- Unityをインストール.
- ヘッドマウントディスプレイ(OculusRift)及びシースルーカメラ(ovrvision)をセットアップ.
- ARToolKitをインストール.(または物体認識や色検出など,物体の位置姿勢を取得する方法を用意してもよい)
- SFMLをインストール.
- 各RTCをインストール.
- MobileRobotGameVR
- AutoBoolSeqOut
-
ARTKMarker
ARToolKitをインストール後,ARToolkitのパスが通っていることを確認しビルド.
C:\Program Files (x86)\ARToolKit5\bin\calib_camera.exeでcamera_param.datを生成する.
ARTKMarker.confにconf.dafault.cameraParamFile: camera_param.dat
を追加する(=コンフィグ値のデフォルトを設定).
camera_param.datとARTKMarker.conf,rtc.confを実行ファイルのフォルダ(build\src\Release)の中に入れる. - ARTKMarkerInfoToPose2D
-
WebCamera
画像ファイルの取扱のため,OutPort.hを入れ替える(ここからダウンロードし,C:\Program Files (x86)\OpenRTM-aist\1.1.2\rtmに上書きする).
加えて,rtc.confにcorba.args: -ORBgiopMaxMsgSize 3145728
を追加する.
WebCamera.confにconf.dafault.camera_param_filename: ../../../calibrationfile.yml
を追加する.rtc.confとWebCamera.confを実行ファイルのフォルダに置く. -
CameraCalibration
ビルドしたら,chesspatternを印刷し,RTCを実行してキャリブレーションを行う.それが写った状態のカメラ画像のウィンドウをアクティブにしてtを入力.10回でキャリブレーションデータができるため,calibrationfile.ymlとして,WebCameraのフォルダにコピーする. -
SFMLJoystick
SFMLをインストール後,SFMLのパスが通っていることを確認しビルド. - SFMLJoystickToVelocity
-
KobukiRTC(または他の移動ロボットを用意してもよい)
KobukiにつなぐPCでlibkobukiをインストールしてから,KobukiRTCをビルド.使用時にはCOMポートの設定を忘れずに. - RTMAdapter Unityプロジェクトのzipファイルをダウンロードし解凍する.ここを参考にラッパーツールをインストールする.Unityプロジェクトを開き再生ボタンを押すと,RTCが立ち上がる.
以上のコンポーネントを立ち上げ,図のように繋げ,Activate All.