The software implementation order was began with an easy to use robot to terminal communication system, followed by the development of concurrent design drivers for the sensors and robot actuators, GUI components, designing a manual control method for the robot and finally, an intelligent AI that would include features such as autonomous patrolling and mapping.
Originally, the team was provided with a primitive driver software that was used as a starting point. However, after several iterations of code development, both the driver software and the original modular AI was phased out with a more abstracted approach,
During the
first semester, the modular AI comprised of several modules running
concurrently that would usurp control of the robot on interrupt.
However, it was difficult to write high level logic at such an
abstract level, so this semester, the logic was re-abstracted in
tiers relating its low level functionality rather than abstracting
its high level module based functionality.
Notable
development milestones include the modular GUI design in late March,
the higher level abstraction of the motor hardware, the object
oriented approach of the hardware drivers achieved in early April,
and the completion of a better, more responsive autonomous robot
intelligence and mapping capability developed in late November.
The most challenging software problems we encountered were those concerning network and inter-method communication via the marshalling, parsing, and encoding of information in byte arrays. Serialization techniques were used to overcome this issue; objects that extend the message class are sent and received to relay information. To facilitate this multithreaded message handling, a universal method capable of accepting any object that extended the message class and eliminate all thread blocking problems was written. On the receiving end of the networking code, one byte of information from the parent class Message, encased in a case statement and processed in another method.
In terms of
software development, object oriented methods were presented and
implemented in two locations. Namely, the networking code and the
I2C driver code depended on a method of serializing objects to send
information and deserializing objects to receive information. As a
result, any object that would extend the developed Message class
could be serialized and then be sent over the network, and then
easily processed with a switch statement. The total amount of code
to write to send a new type of message would be the constructor and
member variables of a new class, and an extra line to a switch
statement passing the message to a new method. The I2C software made
writing drivers for additionally I2C devices easy by having all the
necessary boilerplate software in a parent class, and all the
important functionality of a particular device in the child class.
Gantt Chart
|
Review |
Date Completed/Scheduled |
|
Requirements Document |
10/11/08 |
|
Detailed Design and
Implementation Plan |
10/11/08 |
|
Business Plan |
12/10/08 |
|
Test Plan and Test Results |
12/9/08 |
|
Users Guide and other User
Documentation |
12/9/08 |
Documentation Milestones
A
comprehensive JAVADOC coding standard was maintained as
documentation of the robot and client API.