Classiclll's Blog

an old boy

クラスの妄想 モーションプラス

イメージ 1

クラスの妄想 モーションプラス

ブツはあるけどLibはまだない

 

ここ一ヶ月ほどCha0sからの新WiiremoteJを待っている。
2週間前にはブツも入手したというのに・・・

 

で、リリースまでの暇つぶしに、またクラスの妄想をやってみる。

 

Wiiモーションプラスは、三軸ジャイロセンサーを内蔵した【特殊】な拡張デバイス

 

【普通】の拡張デバイスであるヌンチャクやクラコンと同様、Wiiリモコンの拡張ポートに接続して使うが、【普通じゃない】ところは、Wiiモーションプラスもまた【拡張ポートを持っている】というところ。
  • WiiremoteJの作者Cha0sも、そこのところのデザインに苦心しているんでは、って思っている。

で、三軸ジャイロセンサーって何? って事になるけど、要は
「X、Y、Zの三軸周りの角速度(red/sec)を100Hzでサンプリングするセンサー」
じゃあ、角速度って何、って事に・・・

 

一般に、3次元空間内での質点の位置は3軸の各座標と3軸方向の各(加)速度の、値6組で記述できる(6自由度)。なので初期状態(位置)から(加)速度を積分する事によって、任意の時刻における位置を求められる。

 

ところが、これは【外から】観測される(加)速度の場合。

 

運動体の中に設置されているリモコンの加速度センサーは、運動体の直線運動の加速度とともにそれ自身の回転の加速度も検出してしまい、両者を区別する術がない。なので、単純に積分するとおかしな事に・・・
そこで、モーションプラスの出番、というわけ。
  • ただし、どのくらいの精度がでるか、不明(あんまり期待できなさそう)

Wiiリモコンの拡張デバイスではなく、Wiiリモコンのオプション属性

  • 今後、クラスLocだけでなくクラスShipの理解も必要かも
    public class WiiRimokon extend Ship{
      //added
      void setMotionSense(boolean level);// モーションプラスの感度を指定。
      boolean getMotionSensingLev();// 現在のモーションプラスの感度
       level : true,  精密測定(13bit, 0.05degree/sec/bit)
             : false, 大レンジ測定(13bit, 0.20degree/sec/bit)
      Loc stern(); //リモコンの【現在の】座標(m)
      Loc fore(); //リモコンの前方ベクトル(長さ1)
        :    //その他、クラスShipが持っているプロパティ/メソッド群
      Loc acc; //リモコンの加速度(重力と角加速度が分離されたもの m/sec/sec)
      Loc vel; //リモコンの速度(同上 m/sec)
      Loc rot_vel; //リモコンの角速度(rad/sec)
        x:roll(round x_ax), y:pith(round y_ax), z:yaw(round z_ax)
      void setInitial(Loc pos, Loc fore); //リモコンの初期状態をセット
      Void resetMotion(); // リモコンの速度、角速度、位置、姿勢をリセット
        速度 : すべてゼロ
        角速度: すべてゼロ
        時刻 : ゼロ
        位置 : 初期位置
        姿勢 : 初期方向
    }
    


Processing については、
日本語サポートサイトからたどれるP5インフォメーション→言語が参考になる。
(解説してあるのは一昔前の版だから注意が必要だけど、loop()→draw()の読み替えだけで大抵OK)
・山本徹(thoru)さんがFunProce55ingで解説してくれている。(【簡潔】で【わかり易く】、【楽しい】解説)
例題集は習作集と区別するためにこちらに置いている。
・P5のスケッチからアプレットを作り、【ジオシティーズ】にアップする手順をまとめたので、参考に。
WiiRemoteアクセスライブラリWrj4P5はここ