ソースを読み解く際の前提条件としてpython部分の仕様は以下のようになっています。
座標系の仕様
座標系を直している関係上、-z方向が前方になっているので注意してください。
![](https://robot-creation-diary.com/wp-content/uploads/2023/01/関節可動範囲-1024x566.png)
![](https://robot-creation-diary.com/wp-content/uploads/2023/01/軸の回転方向-1024x918.png)
使用モジュール
python : numpy, numpy-quaternion
Arduino : Adafruit_PWMServoDriver
unity: ROS TCP Connector, Oculus XR Plugin
PC-Arduino uno間のシリアル通信の仕様
![](https://robot-creation-diary.com/wp-content/uploads/2023/01/シリアル通信データ仕様-1024x352.png)
PC-Arduino Unoシリアル通信は開始フラグ0xFFから終了フラグ0xFEで一つの通信ブロックとなります。
![](https://robot-creation-diary.com/wp-content/uploads/2023/01/データサイズ設定のイメージ-1-1024x407.png)
データのサイズは0から253まで取れます。255, 254 は、開始フラグと終了フラグに使われているためです。開始フラグと終了フラグを含んだ大きさが符号なし1バイトで入ります。
![](https://robot-creation-diary.com/wp-content/uploads/2023/01/チェックサム計算イメージ-1024x325.png)
チェックサムは、終了フラグの前に入っています。開始フラグからチェックサムの直前までのデータを
- 0と開始フラグのxor演算
- 1の結果とデータサイズのxor演算
- 2の結果とデータの1番目のxor演算
と順番にxor演算を行った結果が入っています。
チェックサムに0xFF, 0xFE が入っていても問題なく処理されます。
頭の位置
![](http://robot-creation-diary.com/wp-content/uploads/2023/03/headposition.png)
頭の位置は小さなオブジェクトを作成し、そのオブジェクトを”CenterEyeAnchor”に入れて求めています。-0.15ほど後ろに下げています。”Cast Shadow” off で影も消しています。影ありにするとスクリーンにこのオブジェクトの影が落ちてしまいます。