読者です 読者をやめる 読者になる 読者になる

wide_snow’s blog

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

スポンサードリンク

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

ここまでに、1軸を使用して傾きを計算する方法と

2軸を使用して傾きを計算する方法を紹介しました。

wide-snow.hatenablog.com

 

今回は、3軸全てを使って傾きを計算します。

3軸を使うことで球体を表現することが出来るようになります。

 

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

まずは実践ということで、プログラム(mpu-6050_5.py)の作成です。

-------

------

今回3軸測定用に、関数

calc_slope_for_accel_3axis_deg()

を追加しました。

 

この関数は

  • θ = 水平線とX軸との角度
  • Ψ = 水平線とy軸との角度
  • Φ = 重力ベクトルとz軸との角度

を3軸(x,y,z)から計算することで、完全な球体(θΨΦ)を測定することが出来ます。

動かしてみる

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

で実行させると

f:id:wide_snow:20151015001927p:plain

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

  • x: y: z: は1軸使用時の傾き
  • xy: は2軸使用時の傾き
  • θΨΦは3軸使用時の傾き

です。

なお、上記の図はZ軸にほぼ平行な状態で放置したときのものです。

 

・・・概ね期待通りの値となっていますが、放置しているのに

バラバラと安定していない状態になっていることが分かります。

 

これは、センサには測定誤差(オフセット誤差や感度誤差)があるので

センサの値が安定しなくなり、計算後の値も安定しないからです。

 

この誤差を出来る限り小さなものにすることが出来れば

精度の高い傾きの数値を得ることが出来るだろう・・・と想像できますね。

実際、誤差を減らすために「フィルタリング」や「キャリブレーション」の

技術を活用している製品は多いんじゃないかなあと思われます。

(じゃないと、スマホのゲームとか誤差がひどくて遊べないですね)

 

ただ、誤差を減らすための方法を考えたり実験したりすることは

結構手間になりそうなので、今は気にしないことにします。

(実際にアプリケーションを作り、誤差が気になるようであれば

フィルターのソフトウェアを入れてみますが・・・面倒です・・・。)

 

次回以降、球体を動かすようなアプリケーションを作成して

センサの値がどのように表現されるのか確認してみようと思います。