姿勢角検出
キューブのモーションセンサー(6 軸検出システム)の出力値をもとに姿勢推定アルゴリズムによってキューブの姿勢角を算出した値(推定値)を提供します。
この姿勢角はモーションセンサーの生値ではなく、加速度・角速度をキューブ内で合成して算出した値であるため、姿勢角の値には常に一定の誤差やずれ(ドリフト)を含みます。
この機能はデフォルトでは無効になっています。設定 - 姿勢角検出の設定で有効化することではじめて利用可能になります。
姿勢角検出は以下の特性(characteristic)を使うことで取得できます。特性はモーション検出および磁気センサーと同じです。
プロパティ | 値 |
---|---|
Characteristic UUID | 10B20106-5B3B-4571-9508-CF3EFCD7BBAE |
Properties | Write, Read, Notify |
Descriptor | Sensor Information |
書き込み操作
姿勢角検出の要求
以下のデータを書き込むことで姿勢角情報を要求できます。キューブは要求を受け取ると、必ず 1 回姿勢角の通知を行います。
データ位置 | タイプ | 内容 | 例 |
---|---|---|---|
0 | UInt8 | 情報の種類 | 0x83 (姿勢角検出の要求) |
1 | UInt8 | 通知内容の種類 | 0x01 (オイラー角での通知) |
通知内容の種類は以下のとおりです。
通知内容の種類 | 意味 |
---|---|
0x01 | オイラー角での通知 |
0x02 | クォータニオンでの通知 |
0x03 | 高精度オイラー角での通知 |
読み出し操作 / 通知
キューブの姿勢角が変化すると、この特性は BLE セントラルに情報を通知します。 通知される情報は読み出し操作でも取得できます。
特性はモーション検出および磁気センサーと共通です。これらの情報も取得されますので、利用の際にはモーション検出 - 読み出し操作 / 通知および磁気センサー - 読み出し操作 / 通知も確認してください。
姿勢角情報の取得(オイラー角での通知)
通知内容の種類にオイラー角での通知を設定した場合には以下のデータが取得できます。
データ位置 | タイプ | 内容 | 例 |
---|---|---|---|
0 | UInt8 | 情報の種類 | 0x03 (姿勢角検出) |
1 | UInt8 | 通知内容の種類 | 0x01 (オイラー角での通知) |
2 | Int16 | Roll(ロール/X 軸) | 0x00B4 (180°) |
4 | Int16 | Pitch(ピッチ/Y 軸) | 0x0000 (0°) |
6 | Int16 | Yaw(ヨー/Z 軸) | 0xFF4E (-178°) |
角度
角度の範囲は Roll および Yaw が -179°(0xFF4D) から 180°(0x00B4) 、 Pitch は -90°(0xFFA6) から 90°(0x005A) です。
回転順序は Yaw(ヨー/Z 軸)、Pitch(ピッチ/Y 軸)、Roll(ロール/X 軸)の順です。
ロール角とピッチ角は、キューブのタイヤ面を下面として水平に置いた状態が 0° です。ヨー角は、キューブが起動したときの向きが 0° です。
誤差
Z 軸まわりの回転(オイラー角におけるヨー角)に対してはセンサーによる絶対値補正が行えないため誤差が蓄積されます。 以下はその影響の具体例です。
- キューブを動かしていないのに、数秒に 1° 程度ヨー角がずれる
- Z 軸を中心軸としてキューブを 1 回転させると、ヨー角が数 ° ずれる
姿勢角情報の取得(クォータニオンでの通知)
通知内容の種類にクォータニオンでの通知を設定した場合には以下のデータが取得できます。
データ位置 | タイプ | 内容 | 例 |
---|---|---|---|
0 | UInt8 | 情報の種類 | 0x03 (姿勢角検出) |
1 | UInt8 | 通知内容の種類 | 0x02 (クォータニオンでの通知) |
2 | Float32 | W | 0x0000803F (1.0) |
6 | Float32 | X | 0x00000000 (0.0) |
10 | Float32 | Y | 0x00000000 (0.0) |
14 | Float32 | Z | 0x00000000 (0.0) |
値
W, X, Y, Z それぞれの値の範囲は -1.0 から +1.0 です。
姿勢角情報の取得(高精度オイラー角での通知)
通知内容の種類に高精度オイラー角での通知を設定した場合には以下のデータが取得できます。
角度は単精度の浮動小数点で取得できます。
データ位置 | タイプ | 内容 | 例 |
---|---|---|---|
0 | UInt8 | 情報の種類 | 0x03 (姿勢角検出) |
1 | UInt8 | 通知内容の種類 | 0x03 (高精度オイラー角での通知) |
2 | Float32 | Roll(ロール/X 軸) | 0x00003443 (180.0°) |
6 | Float32 | Pitch(ピッチ/Y 軸) | 0x00000000 (0.0°) |
10 | Float32 | Yaw(ヨー/Z 軸) | 0x00000000 (0.0°) |
姿勢角情報の取得(オイラー角での通知)との違い
姿勢角情報の取得(オイラー角での通知)は整数での角度情報が通知されます。
姿勢角情報の取得(高精度オイラー角での通知)は単精度浮動小数点での角度情報が通知されます。
角度
角度の範囲は -180° < Roll ≦ 180°、 -180° < Yaw ≦ 180° 、 -90° < Pitch ≦ 90° です。
回転順序は Yaw(ヨー/Z 軸)、Pitch(ピッチ/Y 軸)、Roll(ロール/X 軸)の順です。
ロール角とピッチ角は、キューブのタイヤ面を下面として水平に置いた状態が 0° です。ヨー角は、キューブが起動したときの向きが 0° です。
誤差
Z 軸まわりの回転(オイラー角におけるヨー角)に対してはセンサーによる絶対値補正が行えないため誤差が蓄積されます。 以下はその影響の具体例です。
- キューブを動かしていないのに、数秒に 1° 程度ヨー角がずれる
- Z 軸を中心軸としてキューブを 1 回転させると、ヨー角が数 ° ずれる