問題は病気に形成されたように見えます十分なデータがある。だから、あなたのGPSは、位置を収集しています、これらは基本的に座標の束です。そして、あなたは「彼らが正しい」と「それをもっと正確にする」ことを求めています。明らかに、これを行うにはさらに多くのデータが必要です。
ロボットの場合、典型的な「別のデータ」は、他のセンサー(IMU - 慣性計測ユニット、実質的に加速度計など)やオドメトリー(モーターへのコマンド)などのデータです。これらの両方から、ロボットはそれが「まっすぐ」であることを知っており、左右にある任意のオフシューズを修正することができる。あるいは、コンピュータ視覚アルゴリズムを使用して「ランドマーク」(木やコーナーなど)を追跡し、ロボットの動きに関する良い情報も提供します。あなたはそれらのどれも持っていません。
あなたが持っているものは、車の物理モデルです。あなたは60 MPHで、車は90度回転することはできないことを知っています(なぜ車がどのように動くべきかをあなたが自然に知っているので、問題はあなたにはあまり適していないようです)。この制約は、センサ情報が追加されるほど良好ではありませんが、そうする必要があります。非線形最小2乗またはカルマンフィルタを同様に使用できます。
私はカルマンフィルタの大ファンではありませんので、その実装方法は教えません。
NLSを使用すると、車の位置がグラフとして表示されます(プロットと混同しないでください)。車の各位置は頂点です。隣接する2つの頂点(「前の位置と現在の位置」に対応)はすべて、「車の動きの法則」の制約(エッジ)によってリンクされています。各頂点にはGPS位置制約もあり、これは単項エッジです。
この種のグラフは、疎なマトリックスで表されます。これはヤコビ行列(またはヘッセ行列)であり、値は与えられたシステム状態(すべての頂点の位置)での制約に関する頂点の導出に対応する。各ステップで、次の位置が追加されるため、マトリックスサイズが大きくなります。ソリューションの複雑さを低く抑えるために、最後のNステップだけを保持して古いポジションを削除することができます。各ステップで、物理的制約(回転速度と回転速度を計算し、それが妥当かどうかを調べる)とヤコビアン/ヘッセ行列と誤差ベクトル(GPS修正からの現在のベクトル位置の差のベクトル/物理的に拘束されたものモーション)。次に、このシステム(dx = Jacobians/errors)を解くと、頂点の位置の違いであるベクトルdxが得られます。頂点に追加するだけで、そこにいます。それは本質的にGauss-Newtonアルゴリズムです。
これは簡単に実装できません。 SLAM++,iSAM,またはg2oのような、この種のグラフ問題を効率的に解決するライブラリがあります。問題は、物理的な妥当性制約がそこに実装されていない(GPS制約もないが、それは単なる減算である)ので、これらのどれもすぐに使えることではない。独自の頂点/エッジタイプを実装する必要があります。
もっと簡単な方法をお勧めします。 GPSがあなたに伝えていることの違いを取って、ウィンドウ中央値を計算し、最後の測定値が中央値から離れすぎているかどうかを確認してください。それがあまりにも遠すぎる場合(あなたは実験をしてどの閾値が働くかを見なければならないでしょう)、スピード/コースの計算にその測定値を使用しないでください(しかし、中央値の計算にはそれを保ちます)。それはかなり正確で、あなたの目的のために大丈夫でしょう。
測定データを、あなたがブロックを走らせている緯度/経度/タイムスタンプのテキストファイルとしてアップロードすると、そのコードを処理することができます。
"ベスト"とは何ですか?あなたは良い精度/小さなノイズ、小さなバイアスまたはエイリアシング、高速応答が必要ですか?そして、それはどれほど費用がかかりますか? – leftaroundabout
私の入力と希望する出力に関して最も適切です。 – Jason
私はそれが計算上高価であることを望んでいません。精度は、私が言うのは難しいです。それはあまり正確である必要はありません。つまり、スピードはカップルmphまで正確でなければならず、コースは1度に正確です。それ以外は、私は本当に知らない。これは私にとって明らかに未知の領域です。 – Jason