Meta(Oculus)Quest のコントローラーの動きでロボットの手の動きを制御:プログラムの前提条件・仕様

ソースを読み解く際の前提条件としてpython部分の仕様は以下のようになっています。

座標系の仕様

座標系を直している関係上、-z方向が前方になっているので注意してください。

使用モジュール

python : numpy, numpy-quaternion

Arduino : Adafruit_PWMServoDriver

unity: ROS TCP Connector, Oculus XR Plugin

PC-Arduino uno間のシリアル通信の仕様

通信データ構造イメージ

PC-Arduino Unoシリアル通信は開始フラグ0xFFから終了フラグ0xFEで一つの通信ブロックとなります。

データサイズイメージ

データのサイズは0から253まで取れます。255, 254 は、開始フラグと終了フラグに使われているためです。開始フラグと終了フラグを含んだ大きさが符号なし1バイトで入ります。

チェックサム計算仕様

チェックサムは、終了フラグの前に入っています。開始フラグからチェックサムの直前までのデータを

  1. 0と開始フラグのxor演算
  2. 1の結果とデータサイズのxor演算
  3. 2の結果とデータの1番目のxor演算

と順番にxor演算を行った結果が入っています。

チェックサムに0xFF, 0xFE が入っていても問題なく処理されます。

頭の位置

頭の位置は小さなオブジェクトを作成し、そのオブジェクトを”CenterEyeAnchor”に入れて求めています。-0.15ほど後ろに下げています。”Cast Shadow” off で影も消しています。影ありにするとスクリーンにこのオブジェクトの影が落ちてしまいます。