非ユークリッド構成空間の最近傍データ構造


15

RRTモーションプランナーで使用するための最近傍構造を実装しようとしています。線形ブルートフォース最近傍検索よりも良い結果を得るために、kdツリーのようなものを実装したいと思います。ただし、kdツリーの従来の実装では、空間の各次元を「左」と「右」に分割できると想定しています。この概念は、たとえばSO(2)のような非ユークリッド空間には当てはまらないようです。

私は、完全に回転可能なリンクを備えたシリアルマニピュレーターアームを使用しています。つまり、ロボットの構成空間の各次元はSO(2)であり、したがってユークリッドではありません。この種の部分空間を処理するためにkdツリーアルゴリズムを変更できますか?そうでない場合、これらの非ユークリッド部分空間を処理し、更新とクエリを簡単に行える別の最近傍構造がありますか?FLANNも調べましたが、それらのドキュメントから非ユークリッド部分空間を処理できるかどうかは明確ではありませんでした。


ちなみに、おおよその最近傍も問題ありません(高速化がかなりの場合はさらに望ましい)
-giogadi

1
優れた回答を受け入れましたが、通常は数日待ってから回答を受け入れて、他の選択肢を提供する可能性のあるさらなる回答を妨げないようにすることをお勧めします。
マークブース

マークのおかげで、私は実際に答えを受け入れるまでどのくらい待つかについて不確かでした。
ジョガーディ

回答:


6

kdツリーは通常、小さなユークリッド距離空間でのみ機能することは正しいです。ただし、メトリック空間での一般的な最近傍アプリケーション(距離関数を本質的に定義できる任意の場所)には多くの作業があります。

古典的な仕事はボール木であり、それはメートル法の木に一般化されました。

カバーツリーと呼ばれる新しい作業があり、GPLコードもあります。2年以上にわたって、これらのツリーとkdツリーの間のパフォーマンス特性を調べたいと思っていました。

願わくば、それがあなたのアプリケーションに合うことを願っています。


受け入れられず申し訳ありません。別のコメンターのアドバイスに従って、この質問にさらに数日間「スチューイング」を与える。しかし、あなたの答えは本当に役に立ちました!
ジョガーディ

ブー 冗談だ。これがあなたの役に立つことを嬉しく思います。
クリスマンスレー

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