C++ ライブラリまたはライブラリの組み合わせを探しています。
アイデアは、ロボットが動き回り、最も近い 3 つの間の距離しか知ることができないということです。問題は、すべてのノードの相対的な (x、y) 位置を見つけることです。
私の解決策は、距離から三角形を構築し(そのためのライブラリはありますか)、それらの三角形からマップを作成することです(ライブラリ?)
C++ ライブラリまたはライブラリの組み合わせを探しています。
アイデアは、ロボットが動き回り、最も近い 3 つの間の距離しか知ることができないということです。問題は、すべてのノードの相対的な (x、y) 位置を見つけることです。
私の解決策は、距離から三角形を構築し(そのためのライブラリはありますか)、それらの三角形からマップを作成することです(ライブラリ?)
これが実際のアプリケーションである場合、グラフは一貫したものにはなりません。つまり、一方の端から三角形の構築を開始すると、ループを閉じるときに一致しなくなります。「ループを閉じる」は、ロボット工学における注目の研究テーマです。あなたの問題は一般的なケースよりもいくらか単純ですが、運が良ければ、非線形最小二乗法ソルバーで距離を投げるだけです。このceres-solverを返した正確なグーグル。
汎用の非線形最小二乗法ソルバーでは、解ベクトルと目的関数を定義する必要があります。あなたの場合、100 個のノードがあるとしましょう。つまり、200 個の値を探しているということです。各ノードの x 値と y 値。この 200 要素の長いベクトルが解ベクトルです。目的関数は、割り当て内の既知のペアの距離が利用可能なデータと可能な限り一致するように、それらの 200 百の要素の割り当てです。100 個のノード、それぞれ 3 つの既知の距離の場合、誤差を最小化する 300 個の方程式があります。個人的な経験がないため、このソリューションを問題に適用するには、ceres API を理解する必要があると思います。
補足として、ノイズのないソリューションから、ノイズを含むソリューションと一貫性を保つためにデータに依存することは、基本的にゼロから始めることになります...