J'essaie d'implémenter une structure de voisin le plus proche à utiliser dans un planificateur de mouvement RRT. Afin de faire mieux qu'une recherche linéaire du plus proche voisin par force brute, j'aimerais implémenter quelque chose comme un arbre kd. Cependant, il semble que l'implémentation classique de l'arbre kd suppose que chaque dimension de l'espace puisse être divisée en "gauche" et "droite". Cette notion ne semble pas s'appliquer aux espaces non euclidiens comme SO (2), par exemple.
Je travaille avec un bras manipulateur série avec des liens entièrement en rotation, ce qui signifie que chaque dimension de l'espace de configuration du robot est SO (2), et donc non euclidienne. L'algorithme kd-tree peut-il être modifié pour gérer ces types de sous-espaces? Sinon, existe-t-il une autre structure de voisin le plus proche qui peut gérer ces sous-espaces non euclidiens tout en étant facile à mettre à jour et à interroger? J'ai également jeté un coup d'œil à FLANN , mais il n'était pas clair pour moi d'après leur documentation s'ils pouvaient gérer des sous-espaces non euclidiens.
la source
Réponses:
Vous avez raison de dire que les arbres kd ne fonctionnent généralement que dans de petits espaces métriques euclidiens. Mais, il y a beaucoup de travail pour les applications générales du plus proche voisin dans les espaces métriques (partout où vous pouvez définir une fonction de distance essentiellement).
Le travail classique porte sur les arbres à boules , qui ont ensuite été généralisés aux arbres métriques .
Il existe des travaux plus récents appelés arbres de couverture qui ont même du code sous GPL. Cela fait plus de deux ans que je souhaite étudier les caractéristiques de performance entre ces arbres et les arbres kd.
J'espère que cela correspond à votre application.
la source
ompl::NearestNeighborsSqrtApprox< _T >
la source