3. Our Solution
Top Row, Left to Right: Brad Jones, Mustafa Mukadam, Nathan Habtetzion
Bottom Row: Buddy the Robut
The goal of this project is to program our robot (“Buddy”) to navigate to five different (x, y) points in their numbered order. Along the way to these five points collect at least two of the five golf balls dispersed in the course and avoid the obstacles in your robot’s path. Once all five points have been reached, if needed continue collecting the remaining golf balls and then deposit the orange golf balls at their deposit circle (chute) and the blue golf balls at their deposit circle (chute). As the robot proceeds through the course, a visual interface on the computer will need to keep track of the current location of the robot and golf balls collected, display information about the course layout, and send control information to the robot.
The main goals for Buddy’s collector were to have an elegant looking mechanism that was simple, functional and robust. Shown below is the CAD design for the mechanism. The mechanism was designed such that it would fit the servo motors in the slots, which would actuate the flaps to collect the golf balls. The holes on either side are there to support the side of the flap that is not attached to a servo. These ends were assembled with #8-32 machine screws acting as slip bearings. The holes on the gates were clearance fit holes to allow for rotation and minimal translation of the flap during actuation. The servo rack would sit atop a custom PVC sheet base, which was designed for maximum collection space.
The way the course is laid out (in a grid form with obstacles perfectly aligned in the grid), we realized that a motion planning algorithm like A* would be the best strategy to use to solve the maze and reach all the checkpoints in an optimal manner. The robot would then use it’s sensors to do a 2D instantaneous mapping of the arena and keep recalculating the optimal path to the next checkpoint as and when it discovered more obstacles. While doing this the state machine would handle cases where priority would be given to a golf ball discovered in a bounded radius from the robot, to go and collect it, and then continue on towards the checkpoint it was going to before. After all the checkpoints are reached it would then go to one of the golf ball deposit locations collecting any more golf balls found along the way and once all the golf balls were deposited in their respective chutes the program would end execution.
For the A* algorithm to work we need to have information about the maze. We use the onboard LADAR sensor to map out the course dynamically and whenever the robot need to go to a new location or it sees a new obstacle it will calculate a path using A*. The grid for A* was overlaid on top of the global co-ordinate system such that each absolute global co-ordinate was a cell in the A* grid. We implemented the A* on the DSP OMAPL138 in Embedded C for which we implemented our own priority queue, doubly linked list and a search tree. We also maintained a stack of the checkpoints the robot needed to go to and would step through that list as the robot got from one checkpoint to the next.
To keep track of the robot’s position and orientation, sensor fusion from the dead reckoned values (using optical encoders in the wheels) and values from a motion capture system (optitrack) was applied using Kalman filtering.
Here is a video of Buddy the Robut completing the task:
Here is a picture of the final Matlab interface:
The source code of the project can be found on Github.
University of Illinois at Urbana-Champaign | GE423 Mechatronics
© All Rights Reserved