1 2 3 4 5 Next>>
Edge Based Technique
The first technique that exploits these differences uses an edge detector like Canny to produce an edge only
version of the previous image. Using this module we get an image that looks like:
You can see that the obstacles are somewhat outlined by the edge detection routine. This helps to identify the objects
but still does not give us a correct bearing on what direction to go in order to avoid the obstacles.
The next step is to understand which obstacles would be hit first if the robot moved forward. To start this
process we use the Side_Fill module to fill in the empty space at the bottom
of the image as long as an edge is not encountered. This works by starting at the bottom of the image
and proceeding vertically pixel by pixel filling each empty black pixel until a non-black pixel is seen.
The filling then stops that vertical column and proceeds with the next.
You will quickly notice the single width vertical lines that appear in the image. These are caused by holes where the edge
detection routine failed. As they specify potential paths that are too thin for most any robot we want to remove them as
possible candidates for available robot paths. We do this by using the Erode module
and just eroding or shrinking the current image horizontally by an amount large enough such that the resulting white
areas would be large enough for the robot to pass without hitting any obstacle. We chose a horizontal value of
Now that we have all potential paths we smooth the entire structure to ensure that any point picked as the goal direction is in the
middle of a potential path. This is based on the assumption that it is easier to understand the highest part or peak of a mountain as
compared to a flat plateau. Using the Smooth Hull module we can round out flat plateaus to
give us better peaks.
Once this is done we now need to identify the highest point in this structure which represents the most distant
goal that the robot could head towards without hitting an obstacle. Based on the X location of this point with respect
to the center of the screen you would then decide if your robot should move left, straight, or right to reach that goal
point. To identify that location we use the Point Location module and request
the Highest point which is identified by a red square.
Finally just for viewing purposes we merge the current point back into the original image to help us gauge if that location
appears to be a reasonable result.
Given this point's X location at 193 and the middle of the image at 160 (the camera is set to 320x240) we will probably
move the robot straight. If the X value were > 220 or < 100 we would probably steer the robot to the right or left instead.
Some other results using this technique.
This works reasonable well as long as the floor is a single color. But this is not
the only way to recognize the floor plane ...
1 2 3 4 5 Next>>