タグ付けされた質問 「kalman-filter」

5
カルマンフィルターが必要な理由
数種類のセンサーを含む無人航空機を設計しています。 3軸加速度計 3軸ジャイロスコープ 3軸磁力計 地平線センサー GPS 下向きの超音波。 友人から、このセンサーデータをすべてカルマンフィルターに通す必要があると言われましたが、その理由はわかりません。マイクロコントローラーにこれをそのまま入れられないのはなぜですか。カルマンフィルターは、センサーデータについてどのように役立ちますか?

2
センサーからの線形データと角度データを融合する方法
私のチームと私は、エンコーダー、商用グレードのIMU、GPSセンサーを備えた屋外ロボットをセットアップしています。ロボットは基本的なタンク駆動を備えているため、エンコーダーは左右の車輪から十分にティックを供給します。IMUは、ロール、ピッチ、ヨー、およびx、y、zの線形加速度を与えます。後で冗長性を与える他のIMUを追加できますが、ロール、ピッチ、ヨーの角速度も追加で提供できます。GPSは、グローバルなx、y、およびz座標を公開します。 ロボットのxy位置と方向を知ることは、ロボットがその環境をローカライズおよびマップしてナビゲートするのに役立ちます。ロボットの速度は、スムーズな動きの決定にも役立ちます。地上のロボットなので、z軸についてはあまり気にしません。ロボットにはLIDARセンサーとカメラもあります。したがって、ロールとピッチはLIDARとカメラのデータを変換して向きを変えるのに役立ちます。 すべてのセンサーの精度を最適に活用する方法で、これらすべての数値を融合する方法を見つけようとしています。現在、カルマンフィルターを使用[x, x-vel, x-accel, y, y-vel, y-accel]して、単純な遷移行列の推定値を生成しています。 [[1, dt, .5*dt*dt, 0, 0, 0], [0, 1, dt, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, dt, .5*dt*dt], [0, 0, 0, 0, 1, dt], [0, 0, 0, 0, 0, 1]] フィルタは、IMUによって提供される加速度にのみ基づいて状態を推定します。(IMUは最高の品質ではありません。約30秒以内に、ロボットが(静止状態で)初期位置から20メートルほどドリフトするのが表示されます。)ロール、ピッチ、ヨーの使用方法を知りたいIMU、および潜在的にロール、ピッチ、およびヨーレート、車輪からのエンコーダデータ、および状態推定を改善するためのGPSデータ。 少しの数学を使用して、2つのエンコーダーを使用して、ロボットのx、y、およびヘッディング情報、および線速度と角速度を生成できます。エンコーダーは非常に正確ですが、屋外のフィールドで滑りやすくなります。 ここには、融合するのが難しい2つの別個のデータセットがあるように思えます。 x、x-vel、x-accel、y、y-vel、y-accelの推定 ロール、ピッチ、ヨーの推定値、およびロール、ピッチ、ヨーの速度 これら2つのセットの間にはクロスオーバーがありますが、それらをどのように組み合わせるかについて推論するのに苦労しています。たとえば、ロボットが一定の速度で移動している場合、x-velおよびy-velによって決定されるロボットの方向は、ヨーと同じになります。ただし、ロボットが停止している場合、ヨーはxおよびyの速度によって正確に決定できません。また、角速度に変換されたエンコーダーによって提供されるデータは、ヨーレートの更新になる可能性があります... ...


2
EKF-SLAM更新ステップ、カルマンゲインが特異になる
SLAMにEKFを使用していますが、更新手順に問題があります。Kが特異であり、とrcond評価されるという警告が表示されnear eps or NaNます。問題の原因はZの反転にあると思います。最後の項を反転せずにカルマンゲインを計算する方法はありますか? 私はこれが問題の原因であるという100%の肯定的ではないので、コード全体をここに入れました。メインエントリポイントはslam2dです。 function [ x, P ] = expectation( x, P, lmk_idx, observation) % expectation r_idx = [1;2;3]; rl = [r_idx; lmk_idx]; [e, E_r, E_l] = project(x(r), x(lmk_idx)); E_rl = [E_r E_l]; E = E_rl * P(rl,rl) * E_rl'; % innovation z = observation - e; Z ...

2
EKFの共分散行列?
私は共分散行列の概念に苦労しています。 これで、、、および\ sigma _ {\ theta \ theta}は、不確実性を表します。たとえば、\ sigma_ {xx}の場合、xの値の不確実性を表します。さて、残りのシグマについての私の質問、それらは何を表していますか?ゼロの場合、どういう意味ですか?\ sigma_ {xx}がゼロの場合、xの値について不確実性がないことを意味すると解釈できます。 σ X X σ Y Y σ θ θ σ X X σ X XΣ = ⎡⎣⎢σx xσyバツσθ Xσx yσyyσθ YσX θσyθσθ θ⎤⎦⎥Σ=[σバツバツσバツyσバツθσyバツσyyσyθσθバツσθyσθθ] \Sigma = \begin{bmatrix} \sigma_{xx} & \sigma_{xy} & \sigma_{x \theta} \\ \sigma_{yx} & \sigma_{yy} & \sigma_{y ...

3
オドメトリ運動モデルを使用した拡張カルマンフィルター
EKFローカリゼーションの予測ステップでは、線形化を実行し、(確率的ロボティクス[THRUN、BURGARD、FOX]ページ206で述べたように)速度運動モデルを使用するときのヤコビ行列を定義する必要があります。 ⎡⎣⎢xyθ⎤⎦⎥′=⎡⎣⎢xyθ⎤⎦⎥+⎡⎣⎢⎢⎢v^tω^t(−sinθ+sin(θ+ω^tΔt))v^tω^t(cosθ−cos(θ+ω^tΔt))ω^tΔt⎤⎦⎥⎥⎥[xyθ]′=[xyθ]+[v^tω^t(−sinθ+sin(θ+ω^tΔt))v^tω^t(cosθ−cos(θ+ω^tΔt))ω^tΔt]\begin{bmatrix} x \\ y \\ \theta \end{bmatrix}' = \begin{bmatrix} x \\ y \\ \theta \end{bmatrix} + \begin{bmatrix} \frac{\hat{v}_t}{\hat{\omega}_t}(-\text{sin}\theta + \text{sin}(\theta + \hat{\omega}_t{\Delta}t)) \\ \frac{\hat{v}_t}{\hat{\omega}_t}(\text{cos}\theta - \text{cos}(\theta + \hat{\omega}_t{\Delta}t)) \\ \hat{\omega}_t{\Delta}t \end{bmatrix} として計算されます GT=⎡⎣⎢⎢100010υtωt(−cosμt−1,θ+cos(μt−1,θ+ωtΔt))υtωt(−sinμt−1,θ+sin(μt−1,θ+ωtΔt))1⎤⎦⎥⎥GT=[10υtωt(−cosμt−1,θ+cos(μt−1,θ+ωtΔt))01υtωt(−sinμt−1,θ+sin(μt−1,θ+ωtΔt))001]G_{T}= \begin{bmatrix} 1 & 0 & \frac{υ_{t}}{ω_{t}}(-cos {μ_{t-1,θ}} + cos(μ_{t-1,θ}+ω_{t}Δ{t})) \\ 0 & 1 & \frac{υ_{t}}{ω_{t}}(-sin {μ_{t-1,θ}} ...

1
エラー状態(間接)カルマンフィルターのあいまいな定義
「間接カルマンフィルター」または「エラー状態カルマンフィルター」という用語の正確な意味がわかりません。 私が見つけた最ももっともらしい定義はメイベックの本[1]にあります: 名前が示すように、合計状態空間(直接)の定式化では、車両の位置や速度などの合計状態はフィルターの状態変数の1つであり、測定値はINS加速度計の出力と外部ソース信号です。エラー状態空間(間接)の定式化では、INSで示された位置と速度のエラーは推定変数の1つであり、フィルターに提示される各測定値はINSと外部ソースデータの差です。 20年後、Roumeliotisら。[2]に書く: 代わりにジャイロモデリングを選択することで、特定の車両の扱いにくいモデリングと動的環境との相互作用を回避できます。ジャイロ信号はシステムの(測定ではなく)方程式に現れるため、問題の定式化には間接(エラー状態)カルマンフィルターアプローチが必要です。 太字の部分は理解できません。[3]でもっと早く書いてください: 自律型宇宙船の場合、モデルの代替として慣性基準ユニットを使用すると、これらの問題を回避できます。 次に、メイベックの定義によれば、カルマンフィルターが直接直接作用するジャイロモデリングを使用したEKFのさまざまなバリアントを示します。状態は、姿勢の四元数とジャイロバイアスのみで構成され、エラー状態ではありません。実際、エラー状態のカルマンフィルターで推定するエラーを持つ別のINSはありません。 だから私の質問は: 知らない間接(エラー状態)カルマンフィルターの別の、おそらく新しい定義はありますか? 一方では適切な動的モデルを使用するのではなく、他方ではジャイロモデリングと、直接または間接のカルマンフィルターを使用するかどうかの決定はどのように関連していますか?私はどちらも独立した決定であるという印象を受けました。 [1]メイベック、ピーターS.確率モデル、推定、および制御。巻。1.学術出版局、1979年。 [2] Roumeliotis、Stergios I.、Gaurav S. Sukhatme、およびGeorge A. Bekey。「動的モデリングの回避:移動ロボットの位置特定に適用されるエラー状態カルマンフィルターの評価。」ロボット工学と自動化、1999年。1999 IEEE International Conference on。巻。2. IEEE、1999年。 [3] Lefferts、Ern J.、F。Landis Markley、およびMalcolm D. Shuster。「宇宙船の姿勢推定のためのカルマンフィルタリング」。Journal of Guidance、Control、and Dynamics 5.5(1982):417-429。

3
共分散を回転させる方法は?
私はEKFに取り組んでおり、共分散行列の座標フレーム変換について質問があります。レッツは、私はいくつかの測定を得ると言う対応する6×6共分散行列C。この測定値とCは、座標フレームG 1で示されます。測定値を別の座標フレームG 2に変換する必要があります(x 、y、z、R O LのL 、P 、I 、T 、C 、H 、Ya w )(x,y,z,roll,pitch,yaw)(x, y, z, roll, pitch, yaw)CCCCCCG1G1G_1G2G2G_2。測定自体の変換は簡単ですが、その共分散も変換する必要がありますよね?とG 2の間の平行移動は関係ないはずですが、それでも回転させる必要があります。私が正しい場合、どうすればいいですか?x、y、zの間の共分散について、最初に考えたのは3D回転行列を単に適用することでしたが、これは完全な6x6共分散行列内の3x3サブ行列に対してのみ機能します。4つのブロックすべてに同じ回転を適用する必要がありますか?G1G1G_1G2G2G_2バツxxyyyzzz

1
なぜUKFの代わりにEKFを使用する必要があるのですか?
アンセンテッドカルマンフィルターは、拡張カルマンフィルターの変形であり、一次テイラー級数展開ではなく、「シグマポイント」のセットの変換に依存する異なる線形化を使用します。 UKFはヤコビアンの計算を必要とせず、不連続変換で使用でき、最も重要なことには、非常に非線形な変換のEKFよりも正確です。 私が見つけた唯一の欠点は、「EKFはしばしばUKFよりもわずかに速い」(確率論的ロボティクス)ことです。これは私には無視できるようであり、それらの漸近的な複雑さは同じようです。 それで、なぜ誰もがまだUKFよりもEKFを好むように見えるのですか?UKFの大きな欠点を見逃しましたか?

2
レーザースキャン+既知のマップを備えた拡張カルマンフィルター
私は現在、レーザースキャナーを備えたポイントロボットに拡張カルマンフィルターを実装する必要がある学校のプロジェクトに取り組んでいます。ロボットは、回転半径0度で回転し、前進することができます。すべての動作は区分的に線形です(駆動、回転、駆動)。 私たちが使用しているシミュレーターは、加速をサポートしていません。すべての動きは瞬時です。 また、ローカライズする必要のある既知のマップ(PNG画像)もあります。レーザースキャンをシミュレートするために、画像のレイトレースを行うことができます。 私のパートナーと私は、使用する必要があるモーションモデルとセンサーモデルについて少し混乱しています。 これまでのところ、状態をベクトルとしてモデル化しています。(x,y,θ)(x,y,θ)(x,y,\theta) 次のように更新式を使用しています void kalman::predict(const nav_msgs::Odometry msg){ this->X[0] += linear * dt * cos( X[2] ); //x this->X[1] += linear * dt * sin( X[2] ); //y this->X[2] += angular * dt; //theta this->F(0,2) = -linear * dt * sin( X[2] ); //t+1 ? this->F(1,2) = linear ...

2
カルマンフィルターで予測できないノイズをモデル化する方法は?
バックグラウンド: ロボットの進行方向を推定する単純なカルマンフィルターを実装しています。ロボットにはコンパスとジャイロスコープが搭載されています。 私の理解: 私は、2次元ベクトルとしての私の状態を表す考えていますところ、xは現在の進行方向であると ˙ Xジャイロスコープによって報告された回転速度です。(x,x˙)(x,x˙)(x, \dot{x})xxxx˙x˙\dot{x} 質問: 私の理解が正しければ、私のフィルターには制御項はありません。本当ですか?状態を1Dベクトル(x )とするとどうなりますか?その後、私が行う˙ xは制御項となり、U?これら2つの方法で異なる結果が得られますか?uuu(x)(x)(x)x˙x˙\dot{x}uuu ご存知のように、主なノイズ源はコンパスが歪んだ磁場内にあるときにコンパスから発生します。ここでは、ガウスノイズはそれほど重要ではないと思います。しかし、磁気歪みは完全に予測不可能です。カルマンフィルターでどのようにモデル化しますか? カルマンフィルターでは、「すべてのノイズが白い」という仮定が必要ですか?たとえば、実際のノイズ分布がラプラシアン分布である場合でも、カルマンフィルターを使用できますか?または、拡張カルマンフィルターなどの別のフィルターに切り替える必要がありますか?

1
カルマンフィルターのチェーン
私のチームは、屋外環境で自律的に移動するロボットを構築しています。最近、統合された新しいIMU / GPSセンサーを入手しました。このセンサーは、チップ上で拡張カルマンフィルター処理を実行しているようです。ピッチ、ロール、ヨー、北、東、下の速度、緯度と経度が表示されます。 ただし、ホイールにはいくつかのエンコーダーが取り付けられており、線形および角速度を提供します。この新しいIMU / GPSセンサーを入手する前に、独自のEKFを作成して、エンコーダーやその他の低コストセンサーを使用して状態を推定しました。この新しいセンサーのオンチップフィルターを使用するだけでなく、エンコーダーをミックスに組み込みます。 フィルターのチェーンに問題はありますか?つまり、エンコーダから読み取ったデータをEKFの更新として使用するのと同じように、IMU / GPSセンサーのオンチップEKFの出力を独自のEKFの更新として使用します。それは私には理にかなっているように見えますが、この場合通常何が行われるべきか疑問に思っていました。

2
クワッドローターをターゲットに向けて導く
クワッドローターに取り組んでいます。-私はその位置を知っている私が行ってみたい、 -目標位置、及びそのI計算Aベクターから -私の目標に私を取る単位ベクトルを:b caaabbbccc c = b - a c = normalize(c) クワッドローターは回転せずにどの方向にも移動できるため、私がやろうとしたのは ロボットのヨー角でを回転させるccc コンポーネントに分割するx 、yバツ、yx, y それらをロール角とピッチ角としてロボットに渡します。 問題は、ヨーが0°±5の場合、これは機能しますが、ヨーが+90または-90に近い場合、失敗し、誤った方向に進みます。私の質問は、ここに明らかな何かが足りないのですか?
9 quadcopter  uav  navigation  slam  kinect  computer-vision  algorithm  c++  ransac  mobile-robot  arduino  microcontroller  machine-learning  simulator  rcservo  arduino  software  wifi  c  software  simulator  children  multi-agent  ros  roomba  irobot-create  slam  kalman-filter  control  wiring  routing  motion  kinect  motor  electronics  power  mobile-robot  design  nxt  programming-languages  mindstorms  algorithm  not-exactly-c  nxt  programming-languages  mindstorms  not-exactly-c  raspberry-pi  operating-systems  mobile-robot  robotic-arm  sensors  kinect  nxt  programming-languages  mindstorms  sensors  circuit  motion-planning  algorithm  rrt  theory  design  electronics  accelerometer  calibration  arduino  sensors  accelerometer 

1
複数の位置推定の融合
ロボットの位置を推定するために2つのサブシステムがあるシステムがあります。最初のサブシステムは、ロボットが保持しているマーカーを検出するために使用され、ロボットの位置と向きの3つの推定値を出力する3つのカメラで構成されています。2番目のサブシステムは、ロボットに配置され、ロボットの2点の速度を測定するシステムです。これら2つを数値的に統合することで、ロボットの位置と向きの推定値を取得できます(2つの点を同時に追跡しているため)。 最初のシステムは精度が低くなりますが、2番目のシステムはドリフトします。最初のシステムは約1秒に1回の出力を提供しますが、2番目のシステムはより頻繁に出力します(1秒あたり100〜200回)。 最初のシステムの推定値で位置をリセットするだけではなく(100%正確ではないため)、2番目のセンサーシステムからの累積位置を使用し、それを最初のシステム。また、最初のシステムの3つの推定値をどのように融合するかという質問がありますか?2つの推定値がまったく同じで、3番目の推定値が完全に異なる(たぶんもっと間違っているという意味)ので、純粋な平均よりも良い方法があるはずです。 そのようなシステムでの使用を推奨する融合アルゴリズムはありますか?カルマンフィルターについては知っていますが、2つのシステムが異なる周波数でデータを出力するため、フィルターの使用方法を理解するのに苦労しています。 質問が十分に明確であることを願っています。見積もりをより正確で正確な見積もりに融合するための最良のアプローチは何ですか? ありがとう

1
いくつかの再帰的ベイジアンフィルターでIMU、LIDAR、およびエンコーダー情報からの測定値を融合する最良の方法は何ですか?
私は、SLAMを4輪(2輪駆動)差動駆動ロボットで通路を運転しています。廊下はどこでも平らではありません。そして、ロボットは所定の位置で回転し、その結果の方向に移動します。SLAMアルゴリズムはオンラインで実行する必要はありません。 ロボットは、ストラップダウンIMU /ジャイロ測定から測定値を取得します(ax,ay,az,wx,wy,wz)。ここでax、x方向の加速度を参照しwx、x軸周りの角加速度を測定します。LIDARは270度の弧で廊下をスキャンし、範囲と角度を測定します。しかし、私が知る限り、廊下には、角を曲がるとき以外は識別できる機能はありません。 エンコーダーによって測定された提案されたアクションをIMUおよびLIDARデータと融合する最良の方法を見つける必要があります。IMUからのヨーをエンコーダーデータと融合して方位をよりよく理解できるのは理にかなっていますが、LIDARデータをどのように組み込む必要がありますか? 本質的に、適切な測定モデルとは何ですか、またどのようにノイズをモーションモデルに組み込む必要がありますか 横にちょうどいくつかのいくつかのガウス雑音を追加しますか(0,σ)? 補遺 これは質問と多少直交しますが、混乱を招きます。現在、SLAMを実行するために粒子フィルターを使用していますが、粒子自体の角加速度の不確実性を表すかどうかについて少し混乱しています。2つのオプションが表示されます。 EKF(または実際には何でも)を使用して「最適な」角加速度行列のベクトルを最初に見つけ、次にこの行列を粒子フィルターの絶対的な真実として使用する別のナビゲーションフィルター。そのため、粒子のドリフトは、角加速度の不確実性によるものではありません。 パーティクルドリフト自体に不確実性を組み込みます。このオプションの方が賢明に見えますが、これを行うための原則的な方法が何かはわかりません。

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