[Android] Gyroscope ジャイロセンサー

Android7

スマホのスピンやターンを検知するセンサーとしてGyroscopeがあります。
gyro driftを補正した TYPE_GYROSCOPE
gyro drift補正の無いTYPE_GYROSCOPE_UNCALIBRATED があります。
 

Android Studio 2.2.3
Android 7.1.1

 


Gyroscope

 
Gyroscopeの座標系は加速度センサーと同じです。端末x, y, z軸の反時計方向での回転速度、角速度を計測します。単位は[rad/s]
Gyroscopeには2タイプあります

TYPE_GYROSCOPE_UNCALIBRATED はジャイロドリフトの補正がないセンサー出力です。ジャイロドリフトの補正がないと放置しておくとバイアスがかかったように徐々にずれていきます。
 
ただキャリブレーションによる値のジャンプがより滑らかで、この他のセンサー値との合算を考えるケースではこのセンサー値を使う方が一般的には役に立ちます。但し、工場出荷補正と温度補正は適用されます。
 
加速度センサーはAndroid Studioのemulatorを使ってemulateできましたが、Gyroscopeは使えないようです(20170115, Nexus6P等のemulator)。Sensor 一覧を取得するでemulatorでサポートされているセンサーにGyroscopeはありません。

 

TYPE_GYROSCOPE

 
実装を簡単に説明すると

  • SensorEventListener の設定
  • SensorManager のインスタンス生成
  • registerListener の登録
  • onSensorChanged でセンサー値の受け取り

となります。実際ににやって見ましょう。
 
MainActivity.java

 

activity_main.xml

 
また、スクリーンが回転すると面倒なので固定しておきます。
AndroidManifest.xml

 
Nexus 5X での結果です。机の上に置いたままでは角速度が変化しないのでY軸方向に回転させてみたものです。
 

 

 

TYPE_GYROSCOPE_UNCALIBRATED

 
実装はTYPE_GYROSCOPEと同様です。
センサー出力にestimated driftがそれぞれx, y, z軸についてリポートされますが、その関係性はこのようになります。
 
calibrated_x ~= uncalibrated_x – bias_estimate_x
 
MainActivity.java

 
レイアウトはTYPE_GYROSCOPEと同じです。
 

 

 
Reference:
Sensor
SensorEvent
SensorManager
Motion Sensors