Madgwickフィルタでクォータニオンを推定する

Madgwickフィルタでクォータニオンを推定する

Madgwickフィルタでクォータニオンを推定します。 加速度とジャイロを使ったMadgwickフィルタと,地磁気を考慮したMadgwickフィルタの2つを考えます。

An efficient orientation filter for inertial and inertial/magnetic sensor arraysを参考にしています。

MadgwickフィルタはKalmanフィルタに比べて高速,同程度以上の高精度の推定が可能なフィルタです。また,低周波での動作も可能です。

1. 加速度とジャイロを用いる場合

1.1 クォータニオン

クォータニオンの表記には以下を用います。 ABˆq=[q1q2q3q4]=[cosθrxsinθrysinθrzsinθ]

共役クォータニオンは ABˆq=[q1q2q3q4]

と表され,Avの空間回転は Bv=ABˆqAvABˆq となります。

1.2 角速度からクォータニオンの算出

角速度ベクトルを Sω=[0ωxωyωz]

とするとクォータニオンの時間変化はテンソル積を用いて

SE˙q=12SEˆqSω

と表されます。Madgwickフィルタでは1時刻前のクォータニオンと角速度のテンソル積をとります。

SE˙qω,t=12SEˆqest,t1Sωt

角速度を用いてクォータニオンを求める場合は積分をします。

SEqω,t=SEˆqest,t1+SE˙qω,tΔt

1.3 加速度からクォータニオンの算出

地球座標系(E)での重力加速度は既知であり,この重力加速度のベクトルにクォータニオンによる回転を施せばセンサ座標系での重力加速度ベクトルSEˆqEˆgSEˆqが求まります。

ですが,センサ座標系(S)で計測される重力加速度Sˆaの間には誤差fgが生まれます。Madgwickフィルタではこの誤差を最小化するような最適化問題を考えます。 min  fg(SEˆq,Sˆa)

fg(SEˆq,Sˆa)=SEˆqEˆgSEˆqSˆa=[2(q2q4q1q3)ax2(q1q2+q3q4)ay2(12q22q23)az]

Eˆg=[0001],Eˆa=[0axayaz]

この最適化問題の解法として勾配降下法を用いています。

SEqk+1=SEˆqkμtfg||fg||

fg=JTg(SEˆqest,t1)fg(SEˆqest,t1,Sˆat)

Jg(SEˆq)=[2q32q42q12q22q22q12q42q304q24q30]

SEq,t=SEˆqest,t1μtfg||fg||

最適なμtについては以下の通りです。 このμtSEq,tの収束率をSE˙qω,tの大きさで制限することによって,勾配降下法におけるオーバーシュートを避けることができます。 αは加速度や地磁気に含まれるノイズの大きさによって変えるようです。 μt=α||SE˙qω,t||Δt,α>1

1.4 フィルタフュージョン

相補フィルタのような形で勾配降下法から得られたクォータニオンと角速度から得られたクォータニオンを合わせます。それぞれのフィルタの時定数が角速度から求まるクォータニオンの時間微分の大きさによって変化するイメージです。パラメータβについては明確な最適値があります。βが大きいとジャイロドリフトを抑えられるが,小さいと勾配降下法の大きなステップによるノイズを抑えられるというトレードオフの関係もあります。 SEˆqest,t=γt SEˆq,t+(1γt)SEqω,t

γt=βμtΔt+β=βα||SE˙qω,t||+β

γtについて微小な部分を無視すると

SEˆqest,tβΔtμtSEˆq,t+(10)SEqω,t=SEˆqest,t1+(SE˙qω,tβfg||fg||)Δt

となります。

ブロック図は以下のようになります。

2. 地磁気も考慮する場合

2.1 加速度と地磁気からクォータニオンを算出

地磁気から得られる値を考慮した上で最小化問題に加え,同様に勾配降下法を解きます。

Sˆm=[0mxmymz]

Sˆht=[0hxhyhz]=SEˆqest,t1SˆmtSEˆqest,t1

Eˆbt=[0bx0bz]=[0h2x+h2y0hz]

fb(SEˆq,Eˆb,Sˆm)=[2bx(12q23q24)+2bz(q2q4q1q3)mx2bx(q2q3q1q4)+2bz(q1q2+q3q4)my2bx(q1q3+q2q4)+2bz(12q22q23)mz] Jb(SEˆq,Eˆb)=[2bzq32bzq44bxq32bzq14bxq4+2bzq22bxq4+2bzq22bxq3+2bzq12bxq2+2bzq42bxq1+2q32bxq32bxq44bzq22bxq14bzq32bxq2] fg,b(SEˆq,Sˆa,Eˆb,Sˆm)=[fg(SEˆq,Sˆa)fb(SEˆq,Eˆb,Sˆm)] Jg,b(SEˆq,Eˆb)=[JTg(SEˆq)JTb(SEˆq,Eˆb)]

SEqk+1=SEˆqkμtfg,b||fg,b||

fg,b=JTg,b(SEˆqest,t1,Eˆbt)fg,b(SEˆqest,t1,Sˆat,Eˆbt,Sˆmt)

2.2 角速度のオフセット補償

1時刻前の共役クォータニオンと勾配に直交するベクトルとのテンソル積をとって積分し,適当なパラメータζをかけてその時刻でのオフセットとします。 Sωϵ,t=2SEˆqest,t1fg,b||fg,b||

Sωb,t=ζtSωϵ,tΔt

Sωc,t=SωtSωb,t

SE˙qω,t=12SEˆqest,t1Sωc,t

SEqω,t=SEˆqest,t1+SE˙qω,tΔt

2.4 フィルタフュージョン

加速度とジャイロを用いた場合と同様に考えます。 SEˆqest,tSEˆqest,t1+(SE˙qω,tβfg,b||fg,b||)Δt

ブロック図は以下のようになります。

3. 実践する

プロペラを用いた倒立振子の製作の姿勢推定に用いました。