wide_snow’s blog

30代の組込みエンジニア(ファーマー)による技術メモの記録

スポンサードリンク

Raspberry Pi 2でI2C (MPU-6050の制御) Python編-4 (傾き計算-2)

以前の記事でX軸、Y軸、Z軸のいずれか1つを使って

傾きを計算する方法を紹介しました。

wide-snow.hatenablog.com

 

1軸の傾き計算のデメリット

この方法は単純な計算で実現出来るので実装が非常に容易ですが、

以前書いたとおり測定対象となる1軸以外の傾き成分があると

その軸の加速度の大きさが減少してしまうので傾き角度の計算に誤差が発生します。

また、1軸で傾きを計算する場合、さらに2つの制約があります。

  1. 有効な傾き角の範囲を大きくするためには高分解能が必要になる。
  2. 360°の測定が出来ない。

1つ目は、例えば

±60°を計測範囲にし、1°の分解能にしたい場合は

 1/120=0.008333333g/LSB -> 8.3mg/LSB

±90°を計測範囲にし、1°の分解能にしたい場合は

 1/180=0.005555556g/LSB -> 5.5mg/LSB

±90°を計測範囲にし、0.25°の分解能にしたい場合は

 0.25/180=0.001388889g/LSB -> 1.4mg/LSB

 でセンサ値を取得する必要があるため、この分解能を満たすための

ADCまたはデジタル出力が必要になります。

2つ目はN°の傾きと180°-N°の傾きの加速度が同一になるためです。

(45°と135°は同じ加速度値になります)

2軸の傾き計算

1軸の傾き計算では上記のデメリットがあるので、

アプリケーションによっては物足りないことがあります。

そこで、デメリットを解決するために、2軸を使用して傾きを計算する方法を紹介します。

2つの軸を使用して傾き角度を求める場合、3つの大きなメリットが増えます。

  1. 第1の軸と第2の軸が直行性を持っているので片方の傾き感度が弱い時は、もう片方の傾き感度が増大する。そのため、一定の感度が得られる。
  2. 第3の軸に傾きが存在しても正確な値を測定できる。
  3. 360°の傾斜が検出できる。

難しい言葉が並んでいますが、細かい説明はあとにして

まずは実現方法を書いていきたいと思います。細かい説明はいずれ書こうと思います。

2軸を使用した傾き計算プログラム

今回は、下記のようなプログラム(mpu-6050_4.py)を作成しました。

------

------

 

関数

def calc_slope_for_accel_2axis_deg(x, y, z): # degree

を追加しました。

本関数はX軸とY軸の加速度から傾き角度を計算するものです。

角度は第1象限〜第4象限まであるので、各々の象限に対応した

補正値を加減しています。

なお、math.atan2(x, y)を使えば勝手に補正値を入れてくれますが

今回は自分で計算するプログラムを採用しています。

動かしてみる

pi@raspberrypi ~ $ python mpu-6050_4.py

で実行させると

f:id:wide_snow:20151004230313p:plain

のように表示されるようになりました。

・・・これだけだと良くわかりませんが、理論的には正常に動作しているはずです。

次回は、3軸全てを使用して傾きを計算する方法について紹介します。

3軸を使用するとセンサの向きを完全な球体で判定することが出来るので

アプリケーションの表現が広がると思っています。

MPU-6050を使って球体判定がやりたかったので、

ようやく準備が整いました。

 

参考記事)MPU-6050の接続方法やマニュアルの場所等はこちら。

wide-snow.hatenablog.com

使っているデバイスはこちら。