The Strategy

The score for the course was based on the time taken to complete the course and the golf ball pickup. The strategy then consisted of two parts.

Speed

In order to complete the course faster, we opted not to use any of the Bug algorithms, choosing instead to use the more advanced A* Algorithm. This, combined with using LADAR to map the course, allowed us to use much higher speeds. Once we knew where all of the obstacles were, we were able to build a map and speed through the course instead of attempting to navigate slowly using local information alone.

The LADAR presented a few problems with course mapping. The first was related to the turn speed. When the robot was turning quickly, the readings were far less reliable than when it was driving a straight line. We chose to eliminate readings when the turn was above a certain threshold. Next, we were able to detect distances, but this alone did not determine obstacle position. We relied on the fact that the obstacle's center must lie in the direction opposite the robot with respect to the center of the obstacle's wall. We also used a threshold for the number of times the robot must see an obstacle before mapping around it. These guaranteed reliable obstacle detection.

Golf Ball Pickup

To collect the golf balls, we attempted to create a mechanism that did not require extra steering to aim the robot to one side of the golf ball. To do this, we settled on a V-shaped collector with 2 doors. The plan was to let an orange ball roll down the blue door and then closing the door to the orange compartment, and vice versa. In practice, this was ineffective. When considering obstacles and course walls, the robot could not go fast enough to encourage the ball to roll back into the proper compartment. In the end, we settled on a small amount of steering to center the ball in the proper opening.

With the mechanism settled, the next problem became ball finding. The camera suffered from significant distortion. The vision data was not nearly as reliable as the LADAR data. To overcome this, we took many readings across the field of view. We were able to use these to construct a fairly accurate approximation of the ball distance based on the centroid of the object in the image. With a decent first approximation, we could place the object in the path. As we drove toward the object, we directed the camera to only look for the current ball's color. This corrected our initial approximation until the ball was collected.

Proper placement of the golf balls along the path was another technique that enabled our robot to complete the course in minimal time. With knowledge of the order of the definite stops, we added balls one by one to the path to minimize the overall length. We had to add a small correction for the width of the robot. When navigating the course in the ideal order, the robot could knock a ball out of position while passing it on the way to a different stop, deciding to collect it later. We took the distance from the ball to each stop along the path and compared it to the width of the robot. If the ball was inside the width, we overrode the most efficient path to collect it immediately, preventing the "kicking" of the golf ball into a difficult spot-near walls or obstacles.