ドライバ側で加速度センサーとジャイロセンサーからクォータニオンを算出し、その結果を返却しています。
取得できる値はクォータニオンの実数部をw、虚数部をxyzとすると、
    w = q[0]
    x = q[1]
    y = q[2]
    z = q[3]
    // "q"はUnlimited Handから取得したクォータニオンの全データが格納された配列

このクォータニオンからXYZ軸からのそれぞれの角度の求め方は以下のようになります。
    X軸からの回転角度(Pitch):atan2(2.0f * q[2] * q[3] - 2.0f * q[0] * q[1], 2.0f * q[0] * q[0] + 2.0f * q[3] * q[3] - 1.0f)
    Y軸からの回転角度(Roll):-1.0f * asin(2.0f * q[1] * q[3] + 2.0f * q[0] * q[2])
    Z軸からの回転角度(Yaw):atan2(2.0f * q[1] * q[2] - 2.0f * q[0] * q[3], 2.0f * q[0] * q[0] + 2.0f * q[1] * q[1] - 1.0f)
    詳細はArduino向けプラグインに同梱されている"MadgwickAHRS.h"のgetPitch/getRoll/getYaw参照

ただ、Unlimited Handを机の上に置いておくだけクォータニオンの値が変化し続けました。
ジャイロセンサーで得られるX軸方向の回転角速度もUnlimited Handを机の上に置いているだけなのに、255が返却されていたので、その辺が何か影響しているように見えました。
※ ジャイロセンサーから得られる値については、Forumで問い合わせ中。

クォータニオン自体の説明は以下のサイトなどを参考にしてください。。。
四元数で3次元回転

次回から、Photo-Reflectorなどのセンサー値から指の状態の取得を試みる予定です。

コメントの投稿