Papanet.Products

Products > 7IMUduino > 技術情報

Products/7IMUduino/技術情報 の変更点

追加された行はこの色になります。

削除された行はこの色になります。

 * ジャイロの基礎
 MPU-6050は3軸ジャイロと3軸加速度センサーを搭載しています。ジャイロは傾きがわかります。傾き表現を以下のように定義します。
 
 &image(axes.jpg)
 
-- Z軸に関連付けられた回転をYaw, 
-- Y軸に関連付けられた回転をPitch, 
+- Z軸に関連付けられた回転をYaw 
+- Y軸に関連付けられた回転をPitch 
 - X軸に関連付けられた回転をRoll
 
 ”理想的なジャイロセンサー”は誤差が全くなく、静止していたら一切数値が変化しないものですが、残念ながらMPU-6050のジャイロセンサーはそのような理想には程遠く、静止状態でも誤差によって少しずつずれていきます。このずれをドリフトと呼びます。
 
 一方で、MPU-6050には加速度センサーも搭載されています。加速度センサーは、物体の加速度を知ることができます。物体が完全に静止している状態でも、地球上のあらゆる物体では「重力」という加速度成分でひっぱられているので、加速度センサーは重力センサーでもあります。
 
 MPU-6050のDMPは、前述のジャイロセンサーと加速度センサーの情報をフュージョンし、ジャイロのドリフトを重力加速度で補正してくれます。
 
 静止状態ではRoll,Pitchは重力方向の成分によって補正が可能です。一方で、Yawに関しては重力成分では補正できません。このため、Yawの補正は時系列によるしかなく、MPU-6050を初期化してからも1分くらいはじわじわとYawの値が変化します。しかも変化量は毎回まちまちです。30度くらいで終わる場合もあるし、140度ほど回ってしまうこともあります。これは センサーの原理上 *絶対に避けることはできない挙動=仕様* です。
 
 * センサーキャリブレーション
 そもそもズレの原因は、各センサーの生の測定値(raw data)の誤差ですから、各サンプルごとの測定値に対して誤差分のオフセットを与えれば、早く収束させることができそうです。一般的に使われているArduino用MPU6050ライブラリ(https://github.com/jrowberg/i2cdevlib )には、set[XYZ]GyroOffset(), set[XYZ]AccelOffset()という設定メソッドによってセンサーのオフセットを指定することで、早く収束させることができるようになります。
 
 このオフセット値を求めることを、一般にキャリブレーション作業と呼びます。キャリブレーションは、実行環境での試行錯誤が必要なことは言うまでもありません。オフセット値はチップの個体差によって異なりますし、測定場所の緯度や高度でも違います。MPU-6050のキャリブレーションについてはURLをご参照ください(http://www.i2cdevlib.com/forums/topic/96-arduino-sketch-to-automatically-calculate-mpu6050-offsets/)。
 
 * 【余談】IoT開発について
 一見、MPU-6050は「使えない」センサーに見えるかもしれません。実際、大学の実験用途や、台数が少ない&高価でも良い、ということであれば、もっと高いハードウェア(地磁気センサー内蔵や光学式ジャイロ)を使えば良いだけです。
 
 しかしIoTの分野では、センサーそのものではなくアプリケーションやシステム側で、測定値の校正やドリフト補正する場面が多々あります。1000台,1万台と配布するシステムであれば、高価で正確なハードウェアを使うことはできないかもしれません。組込開発・IoT分野というのは、ハードウェアの持つ制限・制約をアイデアで回避しつつ、如何に面白いアプリケーションを作れるか、に尽きると私は思います。