Robosub

The RoboSub project has the goal of developing an autonomous underwater vehicle (AUV) for the AUVSI Foundation and ONR's International RoboSub Competition.

Design Task
The RoboSub must be capable of autonomously accomplishing a series of tasks including:
 * Going through a starting gate
 * Navigating with the use of vision and hydrophones
 * Dropping markers at specified locations
 * Picking up and dropping specified objects
 * Accurately deploying torpedos at targets
 * Including many other challenging tasks

Design Goals and Deliverables
1. Statically and dynamically stable in the water.


 * A layout that positions denser components toward the bottom of the sub to keep the center of mass below the center of buoyancy
 * A system that allows for weights to be added at appropriate locations to help balance the sub

2. Positively buoyant by 0.5% of total mass


 * A complete sub that displaces the appropriate amount of water to make it buoyant by 0.5% of its mass
 * A system that allows for adjustments to buoyancy using high or low density additions, e.g. metal weights or foam

3. Parts that can be replaced in a matter of minutes
 * Standard and reusable fasteners instead of adhesives, welds, or other permanent solutions
 * Component layouts that do not block access to important parts

4. Modular sub-systems and components
 * Quick releases, latches, and easy-to-use connectors and mounts between systems and components

5. Easy to transport and store
 * Handles or something similar that is easy to grasp
 * A stand that has been specifically designed to support the sub
 * A container that is built to safely store the sub during transport

6. Safe to operate and work on
 * Thrusters and other electronics that are designed to operate below 30 VDC
 * Shrouds and guards the shield the thruster props
 * Kill switches that are easily operated and highly visible

7. Watertight hull and other housings
 * Accurately manufactured housing components and appropriate use of o-rings and waterproofing techniques

8. Electronics that remain adequately cool
 * A heat mitigation system using liquid and/or air cooling if needed
 * Heat sinks on crucial components

9. Outside dimensions that meet competition requirements
 * Compact construction and packaging of components
 * Accurate measurements of components and overall dimensions of sub

10. Overall weight that is 84 lb or less
 * Lightweight materials for frame, hull, and other components when possible

11. Torpedo launchers that can launch a torpedo into a 12 in target
 * Neutrally buoyant torpedoes that can possibly be adjusted with weights
 * A retention system that prevents torpedoes from launching prematurely
 * Fins or other solution for stabilization
 * Proper barrel porting and size to increase accuracy

12.Marker droppers that can drop a marker within a 6 in radius
 * A retention system that prevents the markers from being dropped prematurely
 * Negatively buoyant markers that readily sink
 * Fins to stabilize markers if needed

13. Complete control over linear movement and yaw
 * Position six thrusters for needed control

14. Minor corrective control over pitch and roll
 * Diving planes, fins, position of thrusters, or inherently stable

15. Corrosion resistant.
 * Corrosion-resistant materials such as stainless steel and plastics

16. Allow the sub to respond to keyboard input
 * Include program that will accept keyboard and act on keyboard input

17. Thrusters will respond to input from the sub
 * Program will activate the thrusters to execute a task

Control System
All sensor and motor functions within the sub are managed by PIC32 microcontrollers, with the exception of the visual and audio sensors which are fed directly to the PC. The PIC32 polls each sensor in series at times based on timer interrupts, packages the data with an identifying header and sends it to the PC through an I2C connection. The PC processes the data and the AI software identifies which motor commands are required. The command packet is sent to the PIC32s over in I2C bus. The packet contains a header specifying the target devices so that the microcontroller will know where to send it. The sub displayed here uses the microcontroller code from the previous year (written in C), but the code will be rewritten over the next semester for the updated sub model.

Movement Module Prototype
The movement module prototype is required to do the following to be useful to the system that was previously described:
 * Gather key events from a keyboard, including single key events, or a polling event in the case of a continuously held key.


 * Regulate the amount of events processed and data broadcasted as to not overload the socket communication module with too many requests. This feature is required to share the broadcaster and socket communication with the other parallel executing modules.


 * Evaluate the appropriate movement logic to execute a maneuver effectively.


 * Produce the required data to be broadcasted back to the micro-controller which will control the thrusters by providing a values to activate each thruster and the its power level.

User Input Movement Module: Tested
The user input movement module has been rewritten to integrate with the other python modules and the updated architecture.
 * Movement is now handled as X,Y,Z values over three fields: location, orientation, and velocity


 * The updated architecture has removed the broadcaster and now relies on inter-module communication handled by 0MQ and

a message process called the "grapevine" which communicates messages to the new logging module and others.


 * The new X,Y,Z values are contained within Python dictionaries with the intent of being more friendly to future implementation of automated movement and AI integration.