カルマンフィルタの基礎学習シリーズでChatGPTといろいろな会話したなかで保存版となる内容はブログに保存しておきます。
今回は、IMUのバイアスの基礎学習です。
元の会話の公開リンクはこちらですが、多岐にわたって飛んでますので、バイアスだけ下記記事でまとめてあります。
※冒頭写真は、IMUでカルマンフィルタを作るための回転治具です。ステップモーターでエンコードを回します。エンコーダーの軸中心にIMUを設置してあってZ軸周りのジャイロデータを測定しながら、エンコーダの精密な角度と比較して誤差1度以内を目指してます。
あなた:
いきなりだといおいついけないので、データ処理の基礎からで、バイアスの扱いとかカルマンにはいる前段階からお願いします
ChatGPT:
それでは、「カルマンフィルタに入る前のデータ処理の基礎」から始めましょう。
カルマンフィルタを正しく適用するには、まずIMUデータ(特にジャイロスコープや加速度センサ)を正しく処理し、その特性を理解することが重要です。
今回は次のような流れで説明していきます。
【1】IMUデータの特性を理解する
IMU(慣性計測装置)は、一般的に以下のセンサを組み合わせたものです。
- ジャイロスコープ(角速度を計測)
- 加速度センサ(加速度を計測)
- 場合によっては磁気センサ(地磁気を計測)
これらのセンサのデータは、必ず何らかの誤差やノイズを含みます。
主に以下の種類の誤差が存在します。
誤差の種類 | 説明 | 特徴 |
バイアス(Bias) | 常に一定値ずれている誤差 | 時間的にゆっくりと変化(ドリフト) |
ノイズ(Noise) | ランダムな誤差 | 高周波成分を持つ(短時間でランダムに変動) |
スケール誤差 | 値の増加に比例した誤差 | 感度やゲインがズレている場合に発生する |
これらをカルマンフィルタで扱うためには、事前にデータの性質を理解し、特にバイアスやノイズの特性を把握する必要があります。
【2】バイアス(Bias)とは何か?
バイアスの定義
バイアスとは、センサの出力が本来の値から常に一定の量だけずれている現象を指します。
例えばジャイロスコープで言えば、静止時(真の角速度=0)にセンサがゼロ以外の値を出力する場合、そのゼロ以外の値がバイアスです。
バイアスの影響
バイアスがあると、センサデータを積分したり計算するときに、時間とともに誤差が蓄積してしまいます。
例えば、ジャイロスコープのバイアスがわずかに0.1°/sあると、10秒後には1度ずれ、100秒後には10度のずれになります。
バイアスの除去はIMUデータ処理において重要な作業です。
【3】バイアスの測定と除去方法
IMUデータからバイアスを取り除く方法は主に以下の2つです。
①静止時(基準時)バイアス測定
- センサを静止状態にして、ある一定時間(数秒から数分)測定します。
- この時の平均値をバイアスとみなし、以降のデータから引き算します。
数式例:
Bias=1N∑i=1NxiBias=N1i=1∑Nxi
(ここで、xixi は静止時の測定値、NN はサンプル数)
②動的(運動中)バイアス推定
- 動作中は、センサが静止することは少なく、バイアスがゆっくり変化する場合があります。
- そのため、カルマンフィルタのような推定アルゴリズムを使って、バイアスを動的に推定する手法が一般的です。
まずは静止時にバイアスを測定しておき、それを初期値として後でカルマンフィルタで補正することが多いです。
【4】ノイズ(Noise)とは何か?
センサデータにはランダムに変動するノイズが必ず含まれます。
- ノイズの正体は電子回路の雑音や機械的振動などです。
- ノイズの影響は瞬間的に現れ、長期的な積分ではバイアスより影響が小さいです。
- ノイズは、通常フィルタ処理(ローパスフィルタなど)や統計的手法で緩和できます。
ノイズを評価するには、静止時にデータを取り、その標準偏差を計算します。
数式例:
σ=1N−1∑i=1N(xi−xˉ)2σ=N−11i=1∑N(xi−xˉ)2
- σσ:標準偏差(ノイズレベルの指標)
- xˉxˉ:平均値(バイアス)
この値が、後ほどカルマンフィルタで「測定ノイズ」として使用されます。
【5】データ処理の実例(ジャイロの場合)
- センサを静止状態にし、10~30秒間のデータを記録します。
- そのデータの平均値をバイアスとして決定します。
- 以降の計測データから、このバイアスを引きます。
- ノイズの標準偏差を算出し、カルマンフィルタの設定パラメータとして準備します。
例:ジャイロの生データが100Hzで取得された場合の処理手順
python
コピーする編集する
import numpy as np # 静止時データ(100Hz × 30秒 = 3000サンプル) gyro_data_static = np.array([…]) # 実際のデータを入力 # バイアス計算 gyro_bias = np.mean(gyro_data_static) # ノイズ(標準偏差)計算 gyro_noise_std = np.std(gyro_data_static, ddof=1) # 新規データに対してバイアス除去 gyro_data_corrected = gyro_data_new – gyro_bias
【まとめと次のステップ】
ここまでが、カルマンフィルタに入る前の基本的な処理です。
- バイアス:データを静止時に測定して推定
- ノイズ:データの標準偏差から推定し、フィルタ処理で軽減
次のステップとしては、
- 上記の方法で取得したIMUデータを使って、
- カルマンフィルタを用いてバイアスの動的補正・推定
- および、ノイズを含むデータから滑らかな推定値を得る方法
へ進んでいきます。
次回はこの内容でカルマンフィルタの具体的な適用に入りますが、その前に確認したいことや追加質問はありますか?
あなた:
バイアスの物理的発生原理は
ChatGPT:
バイアス(Bias)の物理的発生原理を詳しく見ていきましょう。
IMUセンサ、特にジャイロスコープや加速度センサで生じるバイアスは、主に以下のような物理的な要因から発生します。
🔍 ジャイロスコープのバイアス発生原理
ジャイロスコープは主に「MEMS型」が広く使用されています。MEMSとは「微小電気機械システム(Micro Electro Mechanical Systems)」のことで、小型の機械構造がチップ上に製造されています。
ジャイロのバイアスは、次のような理由から生じます。
① 機械構造の微細な不均一性(製造誤差)
- MEMSジャイロは、シリコンウェハ上で極めて微細な機械構造が作られています。
- 構造の僅かなズレ(非対称性)や不均一な厚さなどが原因で、微小な誤差(ゼロ角速度でも応答)が生じます。
- このため、各個体で必ず異なるバイアスが発生します(個体差)。
② 温度変化による影響(温度ドリフト)
- ジャイロのセンサ素子の弾性特性は温度に依存しており、温度が変化すると、構造が微小に伸縮したり共振周波数が変化したりします。
- 温度が変化するとバイアスも連動して変化します(温度ドリフト)。
- そのため、ジャイロには温度センサが内蔵されていることが多く、温度補償アルゴリズムを使うことがあります。
③ 機械的ストレス(応力)の影響
- センサが実装される基板に歪みや応力が加わると、MEMS構造に微小な変形が生じ、バイアスが発生します。
- ケースの締め付けや基板の反りなど、実装状況でもバイアスが変動します。
🔍 加速度センサのバイアス発生原理
加速度センサ(MEMS型)もジャイロと同じく微小な機械構造がシリコン基板上に形成されますが、加速度センサ特有の理由もあります。
① 重力と基準方向のズレ(取り付け誤差)
- 加速度センサは常に重力を計測しているため、取付角度が微妙にズレていると、実際には存在しない横方向成分がバイアスとして現れます。
② 微小な機械的ズレ・非対称性(製造誤差)
- MEMS構造内の僅かな不均一性がゼロ加速度時でも電気信号を発生させます。
- この構造的不均一性によりバイアスが発生します。
③ 温度の影響
- 加速度センサのバネ定数や容量が温度により変化し、バイアスが変動します(温度ドリフト)。
- 多くのIMUチップには温度補償が内蔵されていますが、完全ではありません。
🔍 その他の物理的要因(共通)
電気的ノイズ・回路特性
- アナログ回路やADコンバータの僅かなオフセット電圧(ゼロ点ずれ)がバイアスとなります。
- 電源電圧変動、外部ノイズ混入も影響します。
経年劣化(エージング)
- 時間経過により、MEMS構造や回路の特性が微妙に変化して、徐々にバイアスが変動します。
🔍 バイアスを最小限にする方法
バイアスを完全にゼロにすることは難しいため、以下の方法で最小化を図ります。
- センサを製造・実装段階で精密調整する。
- 使用直前にバイアス測定を行い、校正(オフセット補正)を行う。
- 温度補償アルゴリズムを活用する。
📌【まとめ】
MEMSセンサのバイアスの物理的発生原理は以下に集約されます。
センサ種類 | 主な物理的原因 | 影響 |
ジャイロスコープ | MEMS構造の微細な非対称性・温度依存性 | 温度・個体差・基板応力などによるバイアス |
加速度センサ | 重力の取り付け誤差・構造非対称性 | 取り付け角度や温度依存のバイアス |
共通(電気回路) | 電気回路のオフセット・ノイズ | 常時一定のオフセット発生 |
実際のセンサ利用時は、このバイアスを測定・補正し、適切な処理を施してからカルマンフィルタに入力することが重要です。
以上が「バイアスの物理的発生原理」の詳細な説明です。
ここまでで質問や掘り下げたい箇所はありますか?
あなた:
時間とともに増えるので、要因として時間に関わる
ChatGPT:
バイアスが時間経過と共に増加する(ドリフトする)要因について詳しく説明します。
バイアスは本来、「一定値のズレ」と説明しましたが、実際には時間とともに徐々に変化する性質(ドリフト)を持っています。
特にジャイロスコープの積分では、このドリフトが非常に重要な問題となります。
⏳ 時間経過によるバイアス増加(ドリフト)のメカニズム
バイアスが時間的に変動する主な物理的要因は次のようになります。
① 温度のゆるやかな変化
- センサが電源オンから徐々に温まったり、周囲温度が変化することで、MEMS構造の物理特性が変化します。
- この温度変化が「ゆっくりとしたバイアス変動(ドリフト)」を引き起こします。
- 通電後の最初の数分~十数分に特に顕著に現れ、徐々に安定していきます。
② 経年変化(エージング)
- センサの構造や素材、電気回路部品の微細な経年劣化が、時間と共にゆるやかに進みます。
- これにより、長期的(数週間〜数年単位)なバイアス変化が起きます。
③ 機械的ストレスや応力の時間的な変化
- 基板やパッケージに加わる応力が一定でなく、時間とともに緩和・変動する場合、これが徐々にMEMS構造を変形させます。
- 長時間の使用や持ち運び、設置状況の変化でバイアスがゆっくり変動します。
④ 電源電圧のわずかな変動
- 電源回路や周辺回路の温度や負荷変動に伴う微小な電圧変動が、センサ出力を僅かに変動させます。
- これがゆっくりしたバイアスのドリフトとして現れます。
📈 バイアスの時間ドリフトの影響(ジャイロスコープを例に)
ジャイロスコープの角速度データは、通常は積分して角度を算出します。そのため、非常に小さなバイアスドリフトでも、積分することで大きく蓄積してしまいます。
例:
- ジャイロのバイアスが、最初は0.01°/sだったとしても、数分間に0.02°/sまで徐々に増えた場合、
1分間(60秒)で積分すると:- 最初の1分間:0.01 × 60 = 0.6°
- 次の1分間(0.02°/s):0.02 × 60 = 1.2°
- 計1.8°の角度誤差が生じることになります。
時間経過とともに小さな変化でも積分によって非常に大きな誤差に拡大します。
🔧 時間変動バイアス(ドリフト)の対策方法
実用上は以下のような対策が取られます:
① ウォームアップと安定化時間の確保
- 電源投入後、センサが温度的に安定するまで数分~数十分のウォームアップを行います。
② 温度補償
- 温度センサを利用し、
あなた:
現在の測定は通電直後に測定してすぐオフしているから相当悪いデータになってますね
ChatGPT:
その通りです。現在の運用方法である、
- 電源を入れてすぐに測定を開始
- 測定終了後すぐに電源を切る
というパターンだと、IMU(特にジャイロ)のデータ品質はかなり悪化している可能性があります。
⚠️ 現在の方法の問題点
通電直後はセンサ内部のMEMS素子や回路がまだ安定しておらず、温度が徐々に上昇し、その変化に伴ってバイアスが変動します。
短時間の測定では:
- バイアスが測定途中で大きく変化する可能性が高い
- 取得したバイアスが安定せず、毎回の測定で異なる値が出る
- 特にジャイロでは、短時間でもバイアスの積分誤差が大きくなる
結果として、
- 角度や角速度の推定値が不安定・不正確になる
- 測定の再現性が低く、信頼性のあるデータ取得が難しくなる
といった問題が生じます。
📌 改善方法の提案
データ品質を大きく改善するためには、以下の方法をおすすめします:
✅ 1. ウォームアップの実施
- 測定開始の前に、最低でも数分(推奨5~15分)、IMUを通電して安定させておきます。
- センサが温度的に安定することで、バイアスの変動が少なくなります。
✅ 2. バイアス測定を毎回行う
- 測定開始前に静止状態で数十秒間のバイアス測定を行います。
- 測定直前に得られたバイアスを使って、リアルタイムでバイアス補正をかけます。
✅ 3. 連続運用の検討
- 測定が短時間で断続的に行われるならば、一定期間通電状態を維持し、途中でオンオフしない運用が理想的です。
- 連続運用が難しい場合でも、測定前のウォームアップを徹底することでデータ品質は大きく改善されます。
🛠️ 実用的な推奨手順(具体例)
例えば、次回からは以下の流れを取り入れることが推奨されます:
- 電源投入後、5~15分間ウォームアップ
(温度とバイアスを安定させる) - 静止状態で30秒~1分間のバイアス取得・計算
(センサが動かないようにし、バイアス値を決定する) - 測定開始時にバイアスを補正しながらリアルタイムにデータ取得
- 測定後も可能なら、すぐ電源を切らず、一定時間通電維持
以上を取り入れるだけで、データ品質が飛躍的に改善され、後のカルマンフィルタ適用時にも精度が向上します。
現在の運用方法ではデータが不安定になるのは避けられませんので、次回からの測定ではぜひ改善を検討してみてください。
この内容で追加の質問や、さらに掘り下げたい点はありますか?
あなた:
バイアス評価用のTeensyプログラム作ってください。1分毎に測定して安定するまで