• 締切済み

ジャイロセンサのオフセット誤差補正

現在ジャイロセンサを用いて自転車の傾斜角を導出しようとしています。ジャイロの出力を積分して傾斜角を導出しています。しかし、そのセンサの誤差によるオフセット誤差が影響で10秒程度しか正確な傾斜角情報が得られない状況です。そのオフセットの補正方法で工夫する必要があると思うのですが、どのように補正を工夫していったらいいでしょうか。 同様の質問で、地磁気センサで補正というのがあるのですが、傾斜角を求めたいので地磁気センサでの補正は無理だと思い、質問します。

  • 科学
  • 回答数1
  • ありがとう数2

みんなの回答

  • JO_O
  • ベストアンサー率34% (13/38)
回答No.1

毎度JOです。 >ジャイロの出力を積分して傾斜角を導出しています アナログ回路による積分でしょうか? それともADコンバーターでサンプリング後プログラムによる積分でしょうか?? >そのセンサの誤差によるオフセット誤差が影響で10秒程度しか正確な傾斜角情報が得られない この症状は、ジャイロセンサのオフセット(繰り返し精度の悪さ)が原因か、或は積分する段階での誤差かわかりませんが、 アナログ回路による積分回路であれば、この回路に問題がありそうですね またADコンバーターでサンプリング後プログラムによる積分であれば プログラム上のもんだいかもしれません。 それ以前に、ジャイロの繰り返し制度(ある位置から傾いて、元に戻した時の精度)は出ていますか??

guchho
質問者

お礼

回答ありがとうございます。 ジャイロの出力をADコンバータでサンプリング後のプログラムによる積分です。 ジャイロの繰り返し制度は出ていないです。元の角度に戻すと、出力の積分値がずれてしまうことが多いです。 ジャイロセンサの出力を積分しただけで角度を導出しようとすると、どうしてもその誤差が影響してしまい、正確な角度を出すことはできないらしいです。ジャイロセンサの仕様書を見ると、角度を導出するには何らかの工夫が必要とのことですが、その工夫をどうしたらいいのかと悩んでいます。

関連するQ&A

  • センサのドリフト・オフセット補正

    姿勢角計測のため、 レートジャイロから計測した角速度を積分回路に通し、 方位角を推定したいと考えております。 その際、センサのドリフトによるオフセットの影響によって、 積分値(姿勢角)に相当な誤差が含まれてしまいます。 調べたところ、地磁気センサを用いて補正を行うのが良いらしいのですが、 具体的にどうやって行うのかが分かりません。 よろしければご教授お願いいたします。

  • ジャイロセンサの誤差

    加速度・地磁気・ジャイロなどのセンサ情報とGPSからの情報と組み合わせてカーナビなどは動いていると思いますが、 実際ジャイロセンサの誤差ってだいたいどのくらいですか?

  • ジャイロセンサーについて教えてください。

    3軸ジャイロセンサーを使おうと思っていますが、色々と疑問出てきましたので、お教えください。 (ジャイロセンサーを使うのは今回が初めてです。) ジャイロセンサーは角速度を検出しているので、傾いた状態で静止しているときは、 何も検出しないと理解しています。 1.電源を入れる時点で既に傾いていた場合、その初期の傾きは検出できないと思います。   初期の傾きはどのように補整または検出するのでしょうか? 2.今度は動作中についてですが、傾いた状態がしばらく続いた後、傾き角度が変わっても、   正確に検出しますでしょうか? ※この場合の傾きは、地面に対しての傾きです。 的外れな質問かも知れませんが、お教えください。 よろしくお願い致します。

  • ジャイロセンサーの繰り返し誤差の補正について

    マイコン初心者です。 SH7144のA/Dコンバーターにジャイロセンサーを接続し、ジャイロの出力を積分して、角度を求めようとしました。下記のコードで、積分値は出せたのですが、ジャイロを一度傾けて元に戻しても初期値に戻らず、オフセットが残ってしまいます。積分前の出力を見ると、CW側にジャイロを回すと、CW側に値が振れた後にCCW側へ少し値が振れているようなので、角速度のデータから来る誤差じゃないかと自分では仮説を立ててみたものの、その補正のところでつまづいてしまいました。 質問はCだけの問題ではないかもしれませんが、組み込みでジャイロセンサーを扱った経験のある方がいましたら、ご教授をお願いいたします。 ジャイロセンサーは村田製作所製圧電振動ジャイロ、ジャイロスターを使用し、カタログに載っているハイパスフィルタとローパスフィルタを通して、SH7144のA/Dコンバーターへ接続しています。 ・ジャイロスターのカタログ ttp://www.murata.co.jp/catalog/s42.pdf 角速度はコンペアマッチタイマを使用し、ノイズ対策のためにCMT0で角速度の平均値を計算しています。CMT0は0.8msecごとにで割り込みが発生するように設定し、main()ではタイマのカウンタを開始するコードのみを書いています。下記にCMT0割り込みのコードを示します。 void int_cmi0(void) { unsigned static int t_ave = 0; static short int adc0_buffer[3] = {0, 0, 0}; unsigned short int i; unsigned static short int count0 = 1; adc0_buffer[0] = adc0_buffer[0] + AD0.ADDR0.BYTE; adc0_buffer[1] = adc0_buffer[1] + AD0.ADDR1.BYTE; adc0_buffer[2] = adc0_buffer[2] + AD0.ADDR2.BYTE; t_ave++; if( t_ave > 100) //AD0のADDR0~2の100回平均を求めています { for(i = 0; i < 3; i ++) { data_adc0[i] = (adc0_buffer[i] / t_ave) - 109; //"109"は静止時の出力電圧を示しています if(-3 <= data_adc0[i] && data_adc0[i] <= 3) //平均しても振れてしまう値の分をカットしています { data_adc0[i] = 0; } adc0_buffer[i] = 0; if(count0 > 89) //電源投入時にdata_adc0[]の値が安定しないため、最初の10個のデータを捨てています。 { count0 = 100; } else { count0++; data_adc0[i] = 0; } } t_ave = 0; } CMT0.CMCSR.BIT.CMF = 0; //コンペアマッチフラグをクリア } 角度は、CMT1を使用し、8msecの間隔で割り込みを発生させ計算しています。最終的な計算結果は、SH7144のSCIを使用して、PCのハイパーターミナルに表示しています。 void int_cmi1(void) { static short int adc0_buffer_s[3] = {0, 0, 0}; //角速度の初期値を入れるバッファです  unsigned static short int count1 = 1;  short int i; for(i = 0; i < 3; i ++) { data_adc0i[i] =data_adc0i[i] + ((adc0_buffer_s[i] + data_adc0[i]) / 2); //積分を行う部分です。最終的に制御用のゲインにしようと考えているので、時間項8msecは明記していないです。 adc0_buffer_s[i] = data_adc0[i]; if(count1 > 89) //角速度と同様最初の10個のデータは0にしています { count1 = 100; } else { count1++; data_adc0i[i] = 0; } } CMT1.CMCSR.BIT.CMF = 0; //コンペアマッチフラグをクリア } main()では、各機能のイニシャライズと各CMTのカウンタ動作を開始するコードのみを書いています。ハイパーターミナルで動作が見れているので、各機能は動作していると思います。 void main(void) { initIO(); //各機能のイニシャライズです。 initINT(); initSCI(); initADC(); initCMT(); CMT.CMSTR.BIT.STR0 = 1; //CMT0カウント開始 CMT.CMSTR.BIT.STR1 = 1; //CMT1カウント開始 while(1); }

  • センサ・積分の誤差について

    ・加速度センサからの速度/移動量検出 ・角速度センサからの角度検出 積分によってこれらは求まりますが、積分操作によってセンサ誤差や積分誤差が蓄積してしまいます。 検出精度を上げるためにはいったいどのような工夫をすれば良いのでしょうか。

  • 航空機ジャイロセンサーの逐次補正の方法は?

    ふと思ったのですが、航空機にはジャイロセンサーがありますよね? でもあれって飛んでる間に誤差が出てきますよね? そう言う誤差を、空にいながらどうやって補正しているんでしょうか? フト疑問に思いましたので、お暇なときにでもご回答いただければ幸いです。

  • ジャイロセンサー加速度センサー地磁気センサーの違い

    ジャイロセンサー 加速度センサー 地磁気センサーの仕組み・特徴・違いを教えてください。また、それぞれをわかりやすく教えてくれるサイトはないでしょうか?

  • ジャイロセンサは加速度の影響を受ける?

    ジャイロセンサで傾斜角を測ろうとしています。 使用しているのはSTMicro製のLPR5150ALを載せたSparkfun製の ブレイクアウトで、ブレッドボード上でマイコン(Arduino nano) に接続してシリアル経由で値を読んでいます。 ジャイロを使うと加速度の影響を受けずに角速度を得られると思って いたのですが、例えば平らな机の上に置いたブレッドボードを 「すーっ」と平行に移動した場合、ジャイロからしっかりと出力が 得られてしまいます。 これは「ジャイロは加速度に影響されない」という理解が間違って いるのでしょうか?それともMEMSジャイロ固有の問題なのでしょうか?

  • Androidのセンサはなぜ多い?

    質問させてください。 Androidって、iPhoneと比べると妙に使えるセンサが多い気がします。 iPhone 3GSで使えるのは、加速度・方位・ジャイロ・輝度・近接センサくらいですが、Androidでは地磁気や重力なんてものまで(OSでは)サポートしています。 重力や地磁気なんて日常生活ではめったに対応しないと思うのですが、どうしてAndroidはこういう機能まで積極的につけようとするのでしょうか? 何か戦略めいたものを感じてしまいます。 どなたかご存知でしたらお教えください。 推測でもかまいません。 よろしくおねがいします。

  • ジャイロセンサを用いた角度の算出について

    現在二足歩行ロボットを製作しているのですが、ボディ剛性が低いのとモーターを増やしすぎた(RC用のサーボを26個使用しています)ためか、直立状態でも姿勢が安定しないことから、姿勢の安定化のためのフィードバック用にジャイロセンサを利用しようとしたのですが、多々の問題から上手く角度が算出できずに困っています。ジャイロセンサを扱った経験のある方がいらっしゃいましたら御指導願います。 マナーが悪くて恐縮なのですが、同様の質問を下記のURLでしています。 http://oshiete1.goo.ne.jp/qa4561017.html 上記のURLでいただいたアドバイスを元に、現在はサーボ1個をジャイロを動かすために使用し、マイコンのA/Dで値を取得してexcelで計算という作業を繰り返しています。 開発環境は下記の様になります。 ・ジャイロセンサ →村田製作所製圧電振動ジャイロENC-03R(秋月電子製圧電振動ジャイロキットをそのまま使用し、オペアンプの出力をマイコンのA/Dに直結) 印加電圧:3.38V(マイコンに印加している電圧をそのままセンサに分岐) 静止時出力:約1.41V(たまたまかもしれませんが手元にある2個のジャイロキットは大体これ位出力しています) ・マイコン →SH7144F(秋月電子製SH7144Fマイコンボード(12.5MHz)) クロック設定PΦ=25MHzシングルチップモード ・コンパイラ →GCC ・現在行っていること (1)SH7144のA/Dを10bit、PΦ/8で連続スキャンモードにし、CMTを8msec(センサの応答20msecの2.5倍でサンプリング)で割り込みさせてA/Dの結果をUARTでPCに出力。 (2)UART割り込みでサーボを90°回転。このときサーボ回転開始時と停止時に"S"と"E"をPCに出力し、サーボの回転時間を計算できるようにしておく。 (3)SH7144からのUART出力をPCのハイパーターミナルでテキストキャプチャして結果をexcelに入力。 (4)excelにてA/Dの結果→電圧→角速度→角度を計算。同時にサーボの回転時間と角度から平均角速度を算出して比較。 現在抱えている問題 (1)角速度計算結果について 今回使用しているジャイロキットの場合、角速度を求める式は下記の式であっているでしょうか?キットの回路は村田製作所から出ている増幅回路例と同じです。 ENC-03Rのカタログ http://​www.murata.co.jp/catalog/s42.pdf​ 角速度=(A/D出力-静止時出力)*(3.38/1024)/(感度*ローパスフィルタの増幅度) ※静止時出力=静止時のA/D出力をあらかじめメモして代入  感度=0.00067[V/deg/sec]  ローパスフィルタの増幅度=10[倍](カタログの回路図より直流増幅度) 参考URL http://okwave.jp/qa3523603.html?ans_count_asc=0 http://www.hokutodenshi.co.jp/PUPPYSupportPage/soft/status/status.html (2)センサーからの出力について ・他の人のホームページを見た感じのセンサの出力                          /\               /    \ ↑センサ出力    /       \ 静止電圧___/           \                          \/ ̄ ̄ ̄     →時間 参考URL http://tkstechnology.web.fc2.com/robot/system/enc_03.html ・私の持っているジャイロキットの出力                          /\               /    \ ↑センサ出力    /       \ 静止電圧___/           \                          \       / ̄ ̄ ̄                            \    /                             \  /                              \/     →時間 上記のような出力のせいか、積分の式が間違っているのか、または別の問題か積算していくうちに角度の計算結果が0付近に戻ってしまいます 。 (3)積分について 数値積分の表記は下記のようであっているでしょうか。 C風表記 kakudo = kakudo + (kakusokudo_s + kakusokudo) * (t / 2); kakusokudo_s = kakusokudo; (上記をタイマで繰り返す) ※kakudo:角度(初期値0)[deg]  kakusokudo_s:一回前のサンプリング時の角速度(初期値0)[deg/sec]  kakusokudo:サンプリングした角速度(初期値0)[deg/sec]  t:サンプリングタイム[sec] excel風表記 角度 = 1セル前の角度 + (1セル前の角速度 + 角速度) * (サンプリングタイム / 2) (2)の問題で、時間がたつにつれて計算結果が0付近になってしまうのも問題なのですが、サンプリングタイムに0.008[sec]を代入しても、角度の値が出てこなくて困っています。