P_20150521_191416_HDR

車輪ロボットのナビゲーション用にジャイロの利用を検討していますが、価格の安いMPU-6050を使ってみました。MPU-6050にはDMP(Digital Motion Processor)が搭載されていて、ユーザーが複雑な処理をすることなしに姿勢データが得られてしまうということです。Rowberg氏が書いたArduino用のライブラリがありますので、どんなデータが得られるのか調べてみました。主に関心があるのはYAW軸の回転角度なので、これをプロットしたのがしたのグラフです。横軸は1秒10目盛りくらい、縦軸は角度(度)です。

mpu6050-1

最初の20秒程度はセンサーを動かしていません。ですので角度出力値が落ち着くまでに15秒ぐらいかかっています。さらにイニシャル角度が何度になるのかは毎回異なります。この時は65度程度でした。その後、センサーを90度の範囲で振りました。少なくとも60秒とかのオーダーでは値がだんだんずれてくるようなことはありませんでした。最初の立ち上がり期間が許容範囲なら精度としては問題なさそうです。

比較のためにジャイロのRAWデータを積分して角度を算出してみた結果も載せておきます。

mpu6050-2

自作の単純なプログラムでフィルタリングなどは行なっていません。全く問題外というほどではありませんが、1分で2度ぐらいはずれてきてしまいます。
積分している部分のコードです。

float gyro_z = (float)(accel_t_gyro.value.z_gyro) / 131;
  //why 131? see data sheet P12
  if(!Active){
    myCounter++;
    gyroZSum += gyro_z;
    if(myCounter > 199){
      gyroBias = gyroZSum / 200;
      prevGyroZ = gyroBias;
      Active = true;  
    }
  }else{
    heading += (float)(gyro_z + prevGyroZ - 2*gyroBias) * 0.02 * 0.5;
    prevGyroZ = gyro_z;
    Serial.println(heading);
  }