実際に数学的によく理解していなくても、EKF を実装する必要があります。(素晴らしい... 違います...) これまでのところ、私はうまくやっていますが、予測ステップを実装しようとしてから、うまくいきませんでした。
- EKF (赤) を使用するエージェントは、ランダムな方向に発射します
- 最終的に一部の変数 (ポーズ、シグマ、S、K) が NaN になり、シミュレーションが失敗する
コードは、Thrun の「Probabilistic Robotics」ページのコードに基づいています。204. これは、物事を台無しにしているように見えるコードの一部です。
% Get variables
[x,y,th] = getPose(mu_bar);
numoffeatures = size(map,2);
for f = 1:numoffeatures
j = c(f);
[fx,fy] = getFeatures(map,f);
q = (fx-x).^2 + (fy-y).^2;
z_hat = [sqrt(q);
atan2(fy-y,fx-x)-th;
j];
H = [(-fx-x)/sqrt(q) (-fy-y)/sqrt(q) 0;
(fy-y)/q (-fx-x)/q -1;
0 0 0];
S = H*Sigma_bar*H'+Q;
K = Sigma_bar*H'/inv(S);
mu_bar = mu_bar+K*(z(:,j)-z_hat);
Sigma_bar = (eye(3)-K*H)*Sigma_bar;
end
私はまったく無知です...アイデアやヒントをいただければ幸いです。ありがとうございました。
アップデート
エージェントが発砲する理由は、2 つの角度の差を計算するときの「エラー」です。これらは atan2 を使用して計算されます。問題が何であるかはわかっていますが、まだそれを修正する方法がわかりません。
2 つのオブジェクトの atan2 を計算した後、a = 135 と b = 45 という値が得られたとします。90 度と 270 度の両方の可能性についてそれらの差を計算しましたが、エージェントはまだ想定どおりに動作しません。 . 私はこれまでatan2に実際に遭遇したことはありません。atan2 値の差の計算に関する私の理解は間違っていますか? これが私の理解の実例です: