コンパスラグ(レート依存ヒステリシス)を処理する方法は何ですか?


12

距離を追跡するための低精度のホイールエンコーダと、方位を決定するための電子コンパスを備えたトレッド駆動のロボットを手に入れました。コンパスは、たとえばウェイポイントに到達した後など、ロボットが素早く旋回するときに大きな(1秒を超える)ラグがあります。

遅延に対処する方法は何ですか?多くの測定を行い、コンパス応答をモデル化できると思います。ただし、これはレートに依存し、瞬時のレートがわからないため、問題があるようです。

単純だが遅いアプローチとして、ロボットを非常に大まかに正しい方向に向けるまで回転させ、その後、正しい方向に向けるまで短時間の測定休止で非常に小さな増分回転を行います。これに対処する他の方法はありますか?

回答:


12

コンパスの遅れは、高周波ノイズを抑制するローパスフィルターが原因です。

  • ノイズが少なく、したがって遅延が少ない、より高価な磁力計が存在します。
  • ジャイロスコープを使用して精度を向上させることもできます。実際、これが慣性測定ユニット(IMU)の機能です。これは、カルマンフィルターを使用して実現できます。精度を上げると、遅延を減らすことができます。精度を上げると、ノイズを抑えるためのローパスフィルターへの依存が減るからです。カルマンフィルターは、磁力計からのデータとジャイロスコープ(方位の変化率を測定する)を融合します。

現在のコンパスにこだわる場合、2つの解決策があります(警告、これはますます高度になりますが、オプション1はほとんどの人があまり手間をかけずにアクセスできるはずです)。

  1. フィルターをキャンセルすることができます。これにより遅延を除去できますが、高周波ノイズも増加します。これを行った後、ヘディングの新しい推定に基づいてロボットを制御しようとすることができます。これを行うには、ローパスフィルターのパラメーターを試してみる必要があります。たとえば、離散時間では、次のことがわかります。

    θtは時間における推測方位(コンパス出力)であり、Tθは、時間tにおける実際の方向(グランドトゥルース)です。

    θ^(t)=a0θ(t)+a1θ(t1)++akθ(tk)
    θ^(t)tθt

    他の外部手段を使用してグラウンドトゥルースを測定する実験を行うことにより、パラメーター見つけることができます。所与のn + K + 1つのサンプルは、この式を有する [ θK θK + N ] = [ θ K θ K - 1 θ 0 ain+k+1

    [θ^(k)θ^(k+n)]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)][a0a1ak]

    そして、あなたは発見することによって解決することができます:

    [a0a1ak]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)]+[θ^(k)θ^(k+n)]
    M+Mk、あなたはおそらく推測するでしょう。ボーナスポイントの場合、これはノイズが白色で独立していることを前提としていますが、最初にノイズを白色化してバイアスを除去することができるため、パラメーターの推定を改善できます。

    これを伝達関数(離散時間領域でZ変換とも呼ばれます)に変換できます。

    Θ^(z)Θ(z)=a0+a1z1+...+akzk

    θ¯(t)

    Θ¯(z)Θ^(z)=1a0+a1z1++akzk

    時間領域に戻す:

    a0θ¯(t)+a1θ¯(t1)++akθ¯(tk)=θ^(t)

    θ¯(t)=θ^(t)a1θ¯(t1)akθ¯(tk)a0

    θ¯

    θ¯

  2. 上記の解決策はまだ最善の方法ではありません。ノイズの多い推定値はあまり有用ではありません。これを状態空間方程式に入れると、カルマンフィルター、およびLQR(線形2次レギュレータ)を使用したフルステートフィードバックコントローラーを設計できます。カルマンフィルターとLQRコントローラーの組み合わせは、LQGコントローラー(線形2次ガウス)とも呼ばれ、ループ転送回復を使用して適切なコントローラーを取得します。

    これを行うには、(離散時間)状態空間方程式を考えます。

    x(t)=Ax(t1)+Bu(t1)y(t)=Cx(t)

    x(t)=[θ(t)θ(t1)θ(tk)]=[A1A200010000010000010000010]x(t1)+[B0B1000]u(t1)

    y(t)=[θ^(t)]=[a0a1ak]x(t)

    u(t1)A0A1B0B1BA

    QoRo

    その後、LQRコントローラーを設計できます。今回は、 QcRcQc=[100000000000]Rc=[1]J=(xTQx+uTRu)

    次に、離散時間代数のリカッチ方程式を使用します。

    P=Q+AT(PPB(R+BTPB)1BTP)A

    P

    したがって、制御法は次のように指定できます。

    u(t)=K(x(t)xref(t))

    K=(R+BTPB)1(BTPA)

    θ¯

    これを修正するには、カルマンフィルターを調整し、代わりに新しい選択するループ転送回復手法を使用します。Qo=Q0+q2BVBTQ0QVV=IqqQo マトリックスのチューニングが解除されるため、最適性が低下します。

    qRcQc

この投稿の概念はかなり高度になりますが、Riccati方程式のようなものを解く必要がある場合は、MATLABまたは他のソフトウェアを使用してこれを行うことができます。カルマンフィルターを既に実装しているライブラリもあります(もう一度、MATLABもこれを行うと思います)。

組み込みアプリケーションの場合、カルマンフィルターを自分で実装する必要がありますが、おそらくCの実装があります。


優れた詳細な回答をありがとう。私はあなたの最初の解決策の要点に従い、私はそれを解決できると確信しています。2番目の方法は、あなたが言うように、より挑戦的であり、私はそれをすべてフォローできるかどうかを確認するために努力する必要があります。
ViennaMike

4

ジャイロは簡単な答えです。ジャイロは短い測定値、コンパスは長い間聞いていました。そして、現実的には、ほとんどの場合、1杯のカルマンフィルターです。6DOFジャイロ/ ACCボードの価格は、最近では20ドル未満で、使用しないにはあまりにも安いです。

かつて、私は他の誰かのカルマンフィルターを使用していました。そしてそれを機能させた。カルマンフィルターは実際には厳密な実装ではなくアプローチに近いものであり、ジャイロの場合、最終結果は行列演算を使用する必要はありません。これにより、コードがはるかに単純になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.