Robot Motion Planning—Home Work 6

 

 

Q) For a two-dimensional configuration space, implement the Voronoi diagram using incremental methods.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                                                             

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

My Implementation is as follows:

 

· I have considered a robot with 60 range sensors of infinite sensor range. Each sensor gives the intersection point with the configuration space obstacle and workspace boundary, the distance to the intersection point and index of the obstacle that it intersects. In the above figures, the black dot represents the robot and the yellow lines are its sensor lines.

 

· The first step in the implementation is to get onto the Voronoi. The robot first moves in the perpendicularly away from the nearest obstacle (this is given by the minimum distance in the sensor data) until it reaches a point that is equidistant from two or more obstacles.  After it reaches such a point, it starts tracing the Voronoi.

 

· The second step in the implementation is to trace the Voronoi with two-way equidistant points. At points where the robot is equidistant from two obstacles,  it moves in a direction perpendicular to the line joining the equidistant points on the obstacles and/or towards the midpoint of the line joining the equidistant points, so that it maintains its equidistance.  Sometimes, when it drifts away from the Voronoi, it corrects its motion by calculating the error and moving back on to the voronoi.

 

· The third step is to determine the nodes of the Voronoi (green circles in the figures). At points where the robot is equidistant from three obstacles,  the robot announces the existence of a node and adds the node to a list which contains the coordinates of the node and three directions towards the midpoints of the three edges connecting the equidistant points on the obstacles. My implementation picks one of these three directions at random and moves along that. It also updates the index corresponding to the direction to know that the direction has already been traveled. So the next time it reaches the same node, it takes a direction that has not already been traveled. Once it moves out of the node, it starts tracing the Voronoi again(step 2). The implementation repeats until all the directions of the nodes available have been traveled.