IMU noise model

生のIMU計測値は構造化された形で誤差を含む。(Woodmanの入門解説に従う)完全な誤差モデルには、バイアス、スケールファクタ誤差、軸間ミスアライメント、センサーごとの白色雑音が含まれる:

a~=a+ba+Saa+Maa+ηa,ω~=ω+bg+Sgω+Mgω+ηg\tilde{\mathbf{a}} = \mathbf{a} + \mathbf{b}^a + \mathbf{S}^a\mathbf{a} + \mathbf{M}^a\mathbf{a} + \boldsymbol{\eta}^a, \qquad \tilde{\boldsymbol{\omega}} = \boldsymbol{\omega} + \mathbf{b}^g + \mathbf{S}^g\boldsymbol{\omega} + \mathbf{M}^g\boldsymbol{\omega} + \boldsymbol{\eta}^g

ここで S\mathbf{S} は(対角の)スケールファクタ誤差、M\mathbf{M} は軸間感度である。VIO推定器は S\mathbf{S}M\mathbf{M} が工場またはオフラインのキャリブレーションで処理済みであると仮定し、オンラインの2項 — 加算的な白色雑音とゆっくり変化するバイアスのみを保持する:

ω~=ω+bg+ηga~=a+ba+ηa\tilde{\boldsymbol{\omega}} = \boldsymbol{\omega} + \mathbf{b}^g + \boldsymbol{\eta}^g \qquad \tilde{\mathbf{a}} = \mathbf{a} + \mathbf{b}^a + \boldsymbol{\eta}^a

ここで η\boldsymbol{\eta} は平均ゼロの白色ガウス雑音であり、各バイアスはランダムウォークとしてモデル化される: b˙=ηb\dot{\mathbf{b}} = \boldsymbol{\eta}^b、これは独自の白色駆動雑音を持つ。

この2項がなぜそれほど重要なのか

4つのパラメータとその単位

VIOの構成には(多くの場合軸ごとに、通常は共通の)4つの数値が必要である:

パラメータ記号典型的な連続時間の単位
ジャイロ雑音密度(角度ランダムウォーク)σηg\sigma_{\eta^g}rad/s/Hz\mathrm{rad/s/\sqrt{Hz}}
加速度計雑音密度(速度ランダムウォーク)σηa\sigma_{\eta^a}m/s2/Hz\mathrm{m/s^2/\sqrt{Hz}}
ジャイロバイアスランダムウォークσbg\sigma_{b^g}rad/s2/Hz\mathrm{rad/s^2/\sqrt{Hz}}
加速度計バイアスランダムウォークσba\sigma_{b^a}m/s3/Hz\mathrm{m/s^3/\sqrt{Hz}}

これらは連続時間の密度である。離散サンプリング間隔 Δt\Delta t で用いるには、計測雑音に対して ση,d=ση/Δt\sigma_{\eta,d} = \sigma_\eta / \sqrt{\Delta t}、バイアス増分に対して σb,d=σbΔt\sigma_{b,d} = \sigma_b \sqrt{\Delta t} という標準的な変換を行う — これは実装上の慢性的なバグの原因である(落とし穴の項を参照)。これら4つの数値は、EKFの共分散伝播やプレインテグレーションされたIMU因子の共分散へ直接投入される。つまり、推定器がカメラに対してIMUをどの程度信頼するかを決定する。

Allan分散: パラメータの同定

Allan分散は、これらの雑音パラメータを長時間(数時間、温度安定)の静止ログから同定するための標準的な手法である。Allan偏差 σ(τ)\sigma(\tau) を平均化時間 τ\tau に対して両対数スケールでプロットすると、傾きによって雑音源を分離できる:

傾き雑音源パラメータ
1/2-1/2白色雑音(角度/速度ランダムウォーク)ση\sigma_{\eta}(雑音密度、τ=1s\tau = 1\,\mathrm{s} で読み取る)
00(平坦な最小値)バイアス不安定性
+1/2+1/2バイアスランダムウォークσb\sigma_{b}(ランダムウォーク密度)

このプロットから読み取れる4つの数値は、VINS-Mono、OpenVINS、Kimera-VIO、その他すべてのVIOシステムの設定ファイルが要求するパラメータそのものである。例えばKalibr形式のimu.yamlでは:

# continuous-time noise densities (example structure — measure your own values)
gyroscope_noise_density:     ...   # [rad/s/sqrt(Hz)]
gyroscope_random_walk:       ...   # [rad/s^2/sqrt(Hz)]
accelerometer_noise_density: ...   # [m/s^2/sqrt(Hz)]
accelerometer_random_walk:   ...   # [m/s^3/sqrt(Hz)]
update_rate: 200.0                 # [Hz]

kalibr_allanallan_variance_rosといったツールが、ログ取得とフィッティングの手順を自動化する。実際には、振動、温度変化、スケールファクタの残差といったモデル化されていない影響を吸収するために、Allan分散から導かれた値よりもいくらか(しばしば数倍)大きな値が用いられることが多い。

よくある落とし穴

SLAMにおける意義

雑音モデルは、あなたのハードウェアと推定器の間の契約である: それはIMU因子の重みを視覚因子に対して相対的に決定する。楽観的すぎるパラメータはフィルタをIMUに過信させる(振動下での発散); 悲観的すぎるとIMUの運動情報を捨ててしまう。Allan分散プロットを実行し読み取れることは、実際のハードウェアでVIOをデプロイする誰にとっても基本的な実践スキルである。

関連ノート