ソースを読み解く際の前提条件や仕様は以下のようになっています。
座標系の仕様
座標系を直している関係上、-z方向が前方になっているので注意してください。
使用モジュール
python : numpy, numpy-quaternion
Arduino : Adafruit_PWMServoDriver
unity: ROS TCP Connector, Oculus XR Plugin
PC-Arduino uno間のシリアル通信の仕様
PC-Arduino Unoシリアル通信は開始フラグ0xFFから終了フラグ0xFEで一つの通信ブロックとなります。角度データは、整数部、小数部(二桁)の順に入っています。2バイトで一組になります。
データのサイズは0から253まで取れます。255, 254 は、開始フラグと終了フラグに使われているためです。開始フラグと終了フラグを含んだ大きさが符号なし1バイトで入ります。
チェックサムは、終了フラグの前に入っています。開始フラグからチェックサムの直前までのデータを
- 0と開始フラグのxor演算
- 1の結果とデータサイズのxor演算
- 2の結果とデータの1番目のxor演算
と順番にxor演算を行った結果が入っています。
チェックサムに0xFF, 0xFE が入っていても問題なく処理されます。
頭の位置
頭の位置は小さなオブジェクトを作成し、そのオブジェクトを”CenterEyeAnchor”に入れて求めています。-0.15ほど後ろに下げています。”Cast Shadow” off で影も消しています。影ありにするとスクリーンにこのオブジェクトの影が落ちてしまいます。