ジャイロバイアス(角速度のオフセット)

Contents

ジャイロバイアスとは

ジャイロバイアスとは、入力角速度がゼロのときに出力される角速度です。単位は °/s や °/h で、白色ノイズを十分に平均した後に残る「ゼロ点のずれ」と言い換えられます。

MEMSジャイロでは、このずれの大部分が「構造が理想からわずかにずれていること」から生まれます。仕組みを理解すると、温度や実装でバイアスが動く理由も見えてきます。

ほぼすべてのMEMSジャイロはコリオリ力を使う振動型です。

  1. 駆動モード:静電アクチュエータで質量 m を共振周波数(数kHz〜数十kHz)で一定振幅に振動させる。
  2. 検出モード:角速度 Ω が加わると、駆動速度 v に直交する向きにコリオリ力が働き、質量が横に揺れる。
  3. 同期検波:検出側の容量変化を、駆動速度と同相の参照信号で復調して Ω を取り出す。

駆動フレームと検出用の質量を別々のバネで分離した、z軸ジャイロの模式図です。実製品は音叉型(2質量の逆相駆動)が多く、加速度の同相成分を打ち消してg感度を下げています。検出バネの軸がわずかに傾くと、駆動のx変位がy方向に漏れて直交誤差になります。

𝐅c=−2m𝛀×𝐯,xd(t)=Xsin⁡(ωdt)⇒Fc(t)∝ΩXωdcos⁡(ωdt)\mathbf{F}_c = -2m\,\boldsymbol{\Omega}\times\mathbf{v}, \qquad x_d(t) = X\sin(\omega_d t) \;\Rightarrow\; F_c(t) \propto \Omega\,X\omega_d\cos(\omega_d t)

コリオリ力は駆動の「速度」に比例するので、駆動の「変位」とは90°位相がずれています。この位相の違いが、バイアスを理解する鍵になります。

直交誤差(クアドラチャ)と位相誤差

加工のばらつきでバネの軸がわずかに傾くと、駆動の変位がそのまま検出方向へ漏れます(剛性結合)。これが直交誤差で、駆動変位と同相、つまりコリオリ信号とは90°ずれたQ軸に現れます。

直交誤差は角速度換算でコリオリ信号より桁違いに大きいことが多く、同期検波で分離しています。しかし参照信号の位相が φ だけずれると、次の量がレート出力に漏れ込みます。

Ωbias=Qsin⁡φ≈Qφ(φ≪1)\Omega_{\mathrm{bias}} = Q\,\sin\varphi \;\approx\; Q\,\varphi \qquad (\varphi \ll 1)

φ は検出モードの共振位相や電子回路の遅延で決まり、どちらも温度で動きます。大きなQに小さな φ の変化が掛かるので、これがMEMSジャイロの温度ドリフトの主因の一つです。多くの製品は、直交補償電極や電気的な打ち消しでQそのものを小さくしています。

まとめると、MEMSのバイアスは「理想からのズレ(剛性・減衰・質量の非対称)」×「それを分離する仕組みの不完全さ(位相誤差・クロストーク)」で生まれます。どちらも温度と応力で動くため、次の節で分類する各成分が生まれます。

ジャイロバイアスの分類

「バイアス」は一つの値ではなく、時間スケールと原因の違う成分の合計です。どの成分をどこで取るかを決めることが、設計の出発点になります。

成分内容
ターンオン・バイアス(固定オフセット)電源投入ごとにほぼ一定の値。起動のたびに値が変わる(run-to-run 再現性)
バイアス不安定性(in-run bias instability)1/f ノイズ由来のゆっくりした揺らぎ。Allan偏差の最小値で表す
温度依存温度係数 (°/s)/℃。加熱時と冷却時でずれるヒステリシスもある
g感度線形加速度に比例して出るバイアス (°/s)/g
レートランダムウォークバイアス自体がランダムウォークする成分

角度ランダムウォーク(ARW)はバイアスではなく白色ノイズです。ただしバイアス推定の精度を決めるので、以降では一緒に扱います。

誤差モデル

実装で使う出発点は「測定値 = 真値 + バイアス + ノイズ」です。スケールファクタとミスアライメント、g感度まで含めると次の形になります。

𝝎~=(𝐈+𝐒+𝐌)𝝎+𝐛+𝐆𝐚+𝐧ω\tilde{\boldsymbol{\omega}} = (\mathbf{I} + \mathbf{S} + \mathbf{M})\,\boldsymbol{\omega} + \mathbf{b} + \mathbf{G}\,\mathbf{a} + \mathbf{n}_\omega

S はスケールファクタ誤差、M はミスアライメント、G はg感度行列、n_ω は白色ノイズ(ARW)です。バイアス b はさらに成分に分けて考えます。

𝐛(t)=𝐛0+𝐛T(T(t))+𝐛d(t)\mathbf{b}(t) = \mathbf{b}_0 + \mathbf{b}_T\big(T(t)\big) + \mathbf{b}_d(t)

b_0 は起動ごとの定数、b_T は温度の関数、b_d はゆっくり動く確率的な成分です。フィルタで推定するのは主に b_d(と、取り切れなかった b_0)です。

確率過程としてのモデル

b_d には次の2つのモデルがよく使われます。

  1. ランダムウォーク:実装が簡単で、長時間の挙動に強い。
  2. 1次ガウス・マルコフ:相関時間 τ_c を持ち、分散が発散しない。バイアス不安定性の近似に向く。
b˙=wb⇒bk+1=bk+wk,Var(wk)=K2Δt\dot{b} = w_b \quad\Rightarrow\quad b_{k+1} = b_k + w_k,\;\; \mathrm{Var}(w_k) = K^2\,\Delta t
b˙=−bτc+w⇒bk+1=e−Δt/τcbk+wk,Var(wk)=σb2(1−e−2Δt/τc)\dot{b} = -\frac{b}{\tau_c} + w \quad\Rightarrow\quad b_{k+1} = e^{-\Delta t/\tau_c}\,b_k + w_k,\;\; \mathrm{Var}(w_k) = \sigma_b^2\left(1 – e^{-2\Delta t/\tau_c}\right)

K はレートランダムウォーク係数、σ_b は定常標準偏差です。ガウス・マルコフの σ_b と τ_c は、Allan偏差の最小値とその τ から決めるのが実務上の定番の近似です(厳密な対応ではありません)。

Allan分散による評価

ジャイロを静止させて長時間記録し、Allan偏差を描けば、ノイズとバイアスの各成分を傾きで分けて読めます。データシートを鵜呑みにせず、手元の個体・実装状態で一度は測るべき量です。

σ2(τ)≈N2τ+(0.664B)2+K2τ3\sigma^2(\tau) \approx \frac{N^2}{\tau} + \left(0.664\,B\right)^2 + \frac{K^2\,\tau}{3}

測定手順

  1. 防振した台に固定し、最終の実装状態(基板・ケース込み)で測る。
  2. ウォームアップを待ち、室温が安定した状態で数時間〜十数時間記録する。見たい最大の τ の少なくとも数倍〜10倍の長さが目安。
  3. 実運用と同じ ODR・フルスケール・内蔵LPF設定にし、温度も同時にログする。
  4. 重なりあり(overlapping)Allan偏差を計算する。Python なら allantools の oadev が使いやすい。

傾きの読み取り

成分読み取り方
角度ランダムウォークτ = 1 s での値。°/h で読んだら 60 で割ると °/√h
小さいほど良い。短時間の角度のばらつきと、静止平均の収束の速さを決める
バイアス不安定性最小値 ÷ 0.664 = B。最小値そのものを仕様にする流儀もある
小さいほど良い。起動時平均やオンライン推定で到達できる精度の下限
レートランダムウォーク+1/2 直線を τ = 3 s まで延長(外挿)した点の値。σ = K√(τ/3) なので、τ = 3 s でちょうど σ = K になる
小さいほど良い。長時間でバイアスがどれだけ動くかを表し、フィルタの過程ノイズになる

縦軸の値はどれも誤差の大きさなので、すべて「小さいほど良い」です。横軸だけは逆で、底(最小値)になる τ は長いほど良いセンサです。平坦な底が右へ長く続くほど、長く平均してもバイアスが動かず、推定が効きます。

オフラインキャリブレーション

運用前に取れる成分は、できるだけ先に取っておきます。目標は「オンライン推定が追う残差を小さくすること」です。

静止平均(ターンオン・バイアス)

最も基本的な方法は、静止中の出力を平均してバイアスとすることです。平均時間 T での推定誤差は、Allan偏差の σ(T) がそのまま目安になります。

b^=1n∑k=1nω~k,std(b^)≈σAllan(T),T=nΔt\hat{b} = \frac{1}{n}\sum_{k=1}^{n}\tilde{\omega}_k, \qquad \mathrm{std}\big(\hat{b}\big) \approx \sigma_{\mathrm{Allan}}(T), \quad T = n\,\Delta t

上の合成モデルなら、10秒平均で約 6.4 °/h、100秒で約 3.5 °/h、300秒で底の約 3.3 °/h です。それより長く平均しても良くならないので、起動時の待ち時間は Allan図の底を上限に決めます。

地球自転に注意

地球自転角速度は約 15.04 °/h です。東京(北緯約35.7°)では鉛直成分が約 8.8 °/h、水平成分が約 12.2 °/h になります。

Ωie≈15.04∘/h,Ωv=Ωiesin⁡35.7∘≈8.8∘/h,Ωh=Ωiecos⁡35.7∘≈12.2∘/h\Omega_{ie} \approx 15.04\,^\circ/\mathrm{h}, \qquad \Omega_{\mathrm{v}} = \Omega_{ie}\sin 35.7^\circ \approx 8.8\,^\circ/\mathrm{h}, \qquad \Omega_{\mathrm{h}} = \Omega_{ie}\cos 35.7^\circ \approx 12.2\,^\circ/\mathrm{h}

バイアス不安定性が数 °/h のセンサでは、静止平均に地球自転が乗って見えます。コンシューマ級では無視されがちですが、この等級では「バイアス」と区別して扱います。ナビゲーション座標系で地球自転を補償しているなら、静止平均からも差し引くのが一貫した扱いです。

温度キャリブレーション

温度依存は起動ごとにほぼ再現するので、事前に取る価値が高い成分です。

  1. 恒温槽、なければ冷凍庫から出して自然昇温させ、静止状態で温度とジャイロを同時に記録する。
  2. 各軸ごとに、下の式のような2次程度の多項式でフィットする。
  3. 加熱時と冷却時の両方で取り、ヒステリシスの大きさを確認する。
  4. c0 は起動ごとに変わるので、保存するのは c1, c2(温度に対する形)だけにし、オフセットは起動時の静止平均で取る。
b(T)=c0+c1(T−T0)+c2(T−T0)2b(T) = c_0 + c_1\,(T – T_0) + c_2\,(T – T_0)^2

温度はセンサ内蔵の温度計を使います。基板上の別の温度計はセンサのダイ温度と遅れがずれます。

g感度

6面静置(各軸を±重力方向に向ける)で、姿勢ごとのバイアスの差から g感度を推定できます。ここでも地球自転の成分が姿勢ごとに変わる点に注意します。振動環境で使う機体では、防振マウントの有無で結果が変わるので最終形態で測ります。

オンライン推定

運用中に動く成分(バイアス不安定性や、取り切れなかった温度依存)は、姿勢フィルタの中で推定し続けます。代表的な方法は次の3つで、詳細は別記事に譲ります。

  • ゼロ角速度更新(ZARU):静止中は「真の角速度はゼロ」とみなし、出力そのものをバイアスの観測として使う。
  • 相補フィルタの積分項(Mahony型):加速度・磁気から求めた姿勢誤差を積分し、その値をバイアス推定とする。
  • EKFの状態拡張:バイアスを状態に加え、過程ノイズを Allan図の K から決める。

どの方法でも、重力だけではヨー軸のバイアスは観測できません。方位の外部参照(磁気・GNSS)や姿勢変化を伴う機動が必要になる点だけは、設計の初期に押さえておきます。

実測例:ADIS16470

手元のADIS16470を2時間静止させたログでは、X・Y軸のバイアス不安定性は 3.8–4.8 °/h とデータシートの 8 °/h(typ)より良い値でした。一方Z軸は起動後のドリフトで τ ≈ 18 s から上昇に転じ、長時間側では他の軸の7倍ほどになりました。

測定条件は次のとおりです。

  • 温度:電源投入時 22.0 °C → 約20分で 28.7 °C に上昇し、以降は 28.4–28.8 °C
  • 解析:重なりありAllan偏差。N は τ = 0.2–2 s の −1/2 区間から τ = 1 s の値を求めた
軸平均バイアス (°/s)ARW (°/√h)Allan最小値 (°/h)
X+0.0070.273.8
Y+0.1310,214.8
Z−0.104
(0 → −0.133 に変化)
0.287.6
データシート(typ)—0.348(in-run stability)

Contents