For our main computer, we chose the Diamond Systems Hercules PC/104 with a 550MHz Via Eden processor, 256MB of RAM, and a 20GB 2.5 inch harddisk. This particular model has onboard data acquisition circuitry (DAQ) that provides 32 analog I/O and 40 digital I/O lines (4 of which are PWM channels), thus eliminating the need for an additional card. A Parvus FG104 framegrabber board is used to capture images from our camera.
It was quickly realized that a dedicated processor would be required
to process acoustic data from our hydrophone array. For this, we
chose to build our own system from scratch based on the Texas Instruments
TMS320VC5502 DSP. We use a 64Mbit SDRAM chip for storing sample
buffers and for algorithm scratch space. For sampling data from
the hydrophones, we tried several ADCs before settling on the AD7655
from Analog Devices. This particular ADC has 4 input channels and
samples two channels simultaneously. It is capable of a per-channel
throughput of 250kSPS. The signal chain begins with a 3-stage instrumentation
amplifier circuit composed of AD743 op-amps. The first two stages
each provide a gain of 20, and the last stage is a summing amplifier
which uses the AD780 precision 2.5V reference source to center
the signals at 2.5V before they are sent to the ADC.
Aucoustics nav board
We used Spectrum Digital’s C5510DSK development kit to prototype our algorithms
and analog front end hardware and then migrated our design over to a custom
4-layer PCB. This PCB contains the DSP, SDRAM, ADC, op-amps, a power supply,
an RS232 level shifter, and a header for a JTAG emulator.
A BasicATOM microcontroller was used to translate messages received over RS232 from the PC/104 to the thruster’s I2C bus. Each message is formatted with a start-byte, three bytes representing the speed of each thruster and a checksum. The start-byte guarantees that the BasicATOM will not misinterpret messages and the checksum guarantees that the BasicATOM will not execute corrupted data. If the BasicATOM does not receive a signal from the PC/104 for a certain length of time, it automatically shuts down the thrusters.
The main computer runs Slackware 10 Linux with a 2.6 kernel. Diamond Systems Universal Driver 5.8, Boost uBLAS, XSens Motiontracker, and OpenCV are external libraries we used for collecting sensor data, calculating control solutions and image processing. Seawolf I’s software is written in C++ and is organized into three tiers along with a common hardware API. Each tier adds a layer of abstraction from the hardware.
Seawolf I needs several interfaces to communicate to all of
its devices. For instance, the DVL and IMU use RS232, but the
altimeter uses an analog input
to the onboard DAQ. The thruster servos rely on PWM signals from the DAQ.
A central API was developed that encompasses all of these requirements,
providing
a streamlined interface to the computer’s hardware and a unified error handling
scheme. This API allows for future updates to underlying hardware drivers
without modification of upper level components.
The API wraps functionality provided by Diamond System’s Universal
Driver, which allows access to I/O on the DAQ. The API also provides
functions for RS232 serial
communication. Several functions using the Video4Linux library were added that
allow the image processing routines to capture video frames or change properties
of the framegrabber.



