fc2ブログ

MPU-6050を使った慣性航法 (4)

バイアスを補正した加速度から、機体の位置を計算するプログラムを作ります。ローパスフィルタをかけるすでに見たように、MPU-6050から取得した生の加速度や角速度のデータにはノイズらしきものが乗っているので、ローパスフィルタをかけることにします。ここでは簡単な方法として、ローパスフィルタには10点の移動平均を使いました。要するに、加速度データや角速度データとして、過去10個ぶんのデータの平均値を使う、というこ...

MPU-6050を使った慣性航法 (3)

次に、加速度センサのバイアスを計算します。加速度の補正式今回の前提として、加速度を次の式で補正することにします。\(\begin{array}{l}{{a'}_x} = {A_x}({a_x} - {B_x})\\{{a'}_y} = {A_y}({a_y} - {B_y})\\{{a'}_z} = {A_z}({a_z} - {B_z})\end{array}\)バイアスの計算式この式の\({A_x},{A_y},{A_z}\)と\({B_x},{B_y},{B_z}\)を求める方法として、以下の手順を考えました。X軸を真上に向けた状態で加速度センサの値を測定し...

MPU-6050を使った慣性航法 (2)

生のデータを見る限り、角速度センサの処理のほうが簡単そうです。そこで、角速度センサのバイアス補正と、角度の計算からはじめることにします。座標系ここで計算に使う座標系を定義しておきます。位置の時間微分が速度、速度の時間微分が加速度なので、加速度センサの値を2回積分すれば位置が求まります。同様に、角度の時間微分が角速度なので、角速度を積分すれば角度が求まります。原理は単純ですが、ここで考えなければいけ...

MPU-6050を使った慣性航法 (1)

Arduino Nano互換機とMPU-6050を使って、ロボットの位置や姿勢を計算する、推測航法を試してみます。といっても、卓上を5分程度動くロボットの制御が目的であり、太平洋を横断したり、宇宙ロケットを作りたいわけではないので、地球は丸いとか、自転や公転とか、カルマンフィルタとか、そういう要素を考慮しない、シンプルな推測航法です。計算は、Arduino Nano互換機で行なうことにします。MPU-6050の制御には、Jeff Rowberg氏の...

MPU-6050用ライブラリを使う

以上のプログラムをArduino IDEでコンパイルすると、最大30,720バイトのフラッシュメモリのうち、スケッチが19,812バイト(64%)を使っています。最大2,048バイトのRAMのうち、グローバル変数が670バイト(32%)を使っていて、ローカル変数で1,378バイト使うことができます。となります。この段階でフラッシュメモリの64%を使っているので、Arduino Nanoにセンサ値の取得以外の処理をさせるのは大変そうです。実行時のシリアルモニ...

MPU-6050用ライブラリのプログラム

Jeff Rowberg氏のMPU-6050用ライブラリをインストールできたので、「MPU6050」ライブラリの「Examples」→「MPU6050_DMP6」フォルダ内にある、サンプルスケッチ「MPU6050_DMP6.ino」の処理をもとに、「MPU6050」ライブラリの基本的な使い方を紹介します。「MPU6050」クラスのドキュメントhttp://www.i2cdevlib.com/docs/html/class_m_p_u6050.htmlただし、DMP関連のメソッドについては、ライブラリの「MPU6050_6Axis_MotionApps20.h...

MPU-6050用ライブラリのインストール

MPU-6050は「DMP」(Digital Motion Processor)を搭載しており、チップ上でセンサ値を使った計算ができます。この機能を使うことで、Arduino側で計算する負荷が軽減されます。DMP用のファームウェアを自前で用意するのは難しいですが、幸いなことに、「Arduino Playground - MPU-6050」で、Jeff Rowberg氏のライブラリが紹介されているので、これを使ってみます。(このライブラリはMITライセンスで公開されています)MPU-6050用ラ...