pointpointsroboticssegmentsegments

How to find segments in (circular) point map?


I am currently working on a project that involves measuring distances all around a robot with a laser module, the robot then has to move based on the points that he gets.

I currently have access to 360 points that represent the distance from the center for each of the corresponding angles. (a distance for 0°, a distance for 1°, etc)

Here's an example of what the points look like when displayed on a 2D surface: Circular representation of the points

What I'd like to be able to do is, rather than feeding the robot all 360 points, to feed it segments containing multiple points. For instance, the bottom part of the image would be a single segment even though the points are not completely aligned.

My question to you is, is there an existing algorithm that would help me achieve what I am trying to do?

(I'm working in python but that shouldn't really be a factor)

Thanks a lot.


Solution

  • Assuming your points are ordered:

    For each point, look ahead by two points, if the middle point is less than some distance away from the segment between the two points, then push your endpoint 1 pt further, and check that now both of the middle points are still within some distance of your line segment. Proceed to do this until false, at which point roll back one pt and generate a segment, then set the end of that segment as the start of your next segment. Also, you could consider angles instead of just distances as there are some cases where that would be favorable. Also, if no segment can be made from a certain start point for several attempts, push the start point forward one (as not everything is going to simplify into segments)

    Alternately, you could convert to Cartesian points and use the hough voting algorithm to detect lines from the resulting point-cloud.