メインコンテンツまでスキップ
Version: 2.3.0

姿勢角検出

Cube coordinate system

キューブのモーションセンサー(6 軸検出システム)の出力値をもとに姿勢推定アルゴリズムによってキューブの姿勢角を算出した値(推定値)を提供します。
この姿勢角はモーションセンサーの生値ではなく、加速度・角速度をキューブ内で合成して算出した値であるため、姿勢角の値には常に一定の誤差やずれ(ドリフト)を含みます。

note

この機能はデフォルトでは無効になっています。設定 - 姿勢角検出の設定で有効化することではじめて利用可能になります。

姿勢角検出は以下の特性(characteristic)を使うことで取得できます。特性はモーション検出および磁気センサーと同じです。

プロパティ
Characteristic UUID10B20106-5B3B-4571-9508-CF3EFCD7BBAE
PropertiesWrite, Read, Notify
DescriptorSensor Information

書き込み操作 #

姿勢角検出の要求#

以下のデータを書き込むことで姿勢角情報を要求できます。キューブは要求を受け取ると、必ず 1 回姿勢角の通知を行います。

データ位置タイプ内容
0UInt8情報の種類0x83 (姿勢角検出の要求)
1UInt8通知内容の種類0x01 (オイラー角での通知)

通知内容の種類は以下のとおりです。

通知内容の種類意味
0x01オイラー角での通知
0x02クォータニオンでの通知

読み出し操作 / 通知 #

キューブの姿勢角が変化すると、この特性は BLE セントラルに情報を通知します。 通知される情報は読み出し操作でも取得できます。

note

特性はモーション検出および磁気センサーと共通です。これらの情報も取得されますので、利用の際にはモーション検出 - 読み出し操作 / 通知および磁気センサー - 読み出し操作 / 通知も確認してください。

姿勢角情報の取得(オイラー角での通知)#

通知内容の種類をオイラー角での通知にした場合は以下のデータが取得できます。

データ位置タイプ内容
0UInt8情報の種類0x03(姿勢角検出)
1UInt8通知内容の種類0x01(オイラー角での通知)
2Int16Roll(ロール/X 軸)0x00B4(180°)
4Int16Pitch(ピッチ/Y 軸)0x0000(0°)
6Int16Yaw(ヨー/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 回転させると、ヨー角が数 ° ずれる

姿勢角情報の取得(クォータニオンでの通知)#

通知内容の種類をクォータニオンでの通知にした場合は以下のデータが取得できます。

データ位置タイプ内容
0UInt8情報の種類0x03(姿勢角検出)
1UInt8通知内容の種類0x02(クォータニオンでの通知)
2Int16w0x0000(0)
4Int16x0x2710(10,000)
6Int16y0x0000(0)
8Int16z0x0000(0)

値の範囲#

値の範囲は -10,000 から 10,000 になります。 一般的にクォータニオンの値の範囲は -1 から 1 の値をとりますが、通知データは 4 桁の固定小数点と同等の精度で扱うためにこれを 10,000 倍して小数値を切り捨てた整数値で表現しています。