2017-02-14 8 views
1

Je travaille actuellement sur un projet qui consiste à mesurer des distances tout autour d'un robot avec un module laser, le robot doit alors se déplacer en fonction des points qu'il obtient.Comment trouver des segments dans une carte de points (circulaire)?

J'ai actuellement accès à 360 points qui représentent la distance du centre pour chacun des angles correspondants. (Une distance de 0 °, une distance de 1 °, etc.)

Voici un exemple de ce que les belvédères comme lors de l'affichage sur une surface 2D: Circular representation of the points

Ce que je voudrais pouvoir faire, plutôt que de nourrir le robot tous les 360 points, pour nourrir les segments contenant plusieurs points. Par exemple, la partie inférieure de l'image serait un seul segment même si les points ne sont pas complètement alignés.

Ma question est la suivante: existe-t-il un algorithme qui pourrait m'aider à réaliser ce que j'essaie de faire?

(je travaille en python, mais cela ne devrait pas vraiment être un facteur)

Merci beaucoup.

Répondre

0

En supposant que vos points sont commandés:

Pour chaque point, regarder vers l'avenir par deux points, si le point médian est inférieur à une certaine distance du segment entre les deux points, puis poussez votre point final 1 pt De plus, et vérifiez que les deux points intermédiaires sont toujours à une certaine distance de votre segment de ligne. Procédez comme suit jusqu'à ce que false, à quel point retranchez un pt et générez un segment, puis définissez la fin de ce segment comme le début de votre segment suivant. En outre, vous pourriez considérer des angles au lieu de simplement des distances car il y a des cas où cela serait favorable. De plus, si aucun segment ne peut être créé à partir d'un certain point de départ pour plusieurs tentatives, poussez le point de départ vers l'avant (car tout ne se simplifiera pas en segments)

Alternativement, vous pourriez convertir en points cartésiens et utiliser le hough. algorithme de vote pour détecter les lignes du nuage de points résultant.