加速度センサーのAndroid補正

スマートフォンの加速度センサーから値を得るとき、OS がAndroid の場合、値が逆になって出力されます。

今回、その逆出力を補正するプログラムを作りました。

 

 

スマートフォンの座標系

Fig.1 は、スマートフォンの座標系です。

Fig.1 スマートフォン座標系

 

加速度センサーの値

Fig.2 前傾したスマートフォン

 

Fig.2 は、スマートフォンを前傾させた図です。

  • スマートフォンを「静かに」前傾させています

そのため、重力(G)以外の加速度が発生していない状態です。

 

iOS の場合

Fig.2 の状況で、加速度センサーからの出力値A は、以下となります(注1)。

Fig.2 から、正しく出力されていることが分かります。
(注1)実際には、上記値を中心に、値が細かく振動しています。

 

Android の場合

加速度センサーからの出力値A は、以下となります(注2)。

(注2)実際には、上記値を中心に、値が細かく振動しています。

 

これは、Fig.2 から、間違って出力されていることが分かります。

  • プラス(+)とマイナス(-)が逆に出力されている

 

Android 補正

スマートフォンのOSがAndroid の場合、以下の補正が必要です。

  • 加速度センサーからの出力値A の各成分に値(-1)を乗ずる

 

 

プログラム

プログラム1

 

プログラムの解説

グローバル変数

プログラム1 の8 行目、osCorrect は、OS による補正値を保存する変数です。

 

window.onload 関数

OS がAndroid か否かを判定し、以下の処理を実行

  • Android ならば  : osCorrect に値(-1)を代入
  • Android でなければ: osCorrect に値(+1)を代入

 

OS がAndroid か否かの判断方法についての詳細は、記事「iOS とAndroid の判別」をご参照ください。

 

devicemotion イベント

加速度センサーからの出力に、補正値osCorrect を乗算しています。

 

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。