Introduction

The Remote Sensory Vehicle (RSV) is a solution used to gather various types of data about an area into which it might be dangerous or impossible for a human to go. The RSV is completely wireless and is complete with an onboard power supply for autonomous operation. It requires no cable that could restrict its movements or cause it to become stuck, making it perfect for exploration nearly anywhere.

 

The Remote Sensory Vehicle comes with many features, including streaming video, physical collision avoidance and terrain information. The vehicle can be used by a remote user or rely on a set of preprogrammed autonomous control algorithms for movement.  The vehicle can operate up to 50 feet from the base station with no line of sight contact necessary.  It is controlled through a keyboard attached to the base station and outputs its data to a computer monitor via its VGA out port.

 

Our system is meant to be a proof of concept vehicle. For this vehicle we use a radio-controlled tank.  Our main objective is to get a working platform up and running. The platform will have basic functionality and a sample set of sensors, many of which will be used to enhance the abilities of the device. A full version of the vehicle would have increased range and the ability to add a custom set of sensors to the platform for various tasks.


Requirements

High-level Requirements

The RSV needs to be able to acquire and send data from its sensors at a rate of twice a second to a remote station via a wireless link.  It also needs to be able to move and provide a wireless video feed anywhere within a radius of 10’ from the base station at minimum.  In addition, the RSV must be able to avoid walls or other obstacles regardless of what mode it is in (user or autonomous mode).

 

The system will be split into two major components, the base station and the platform. Each of these pieces will have to meet specific requirements and handle specific situations. We will look at the requirements for the base station first.

 

The base station will need to receive the following inputs:

Keyboard input – This will serve as the main user input device for the system. All user controls will come from this device. The FPGA will need to be able to handle a range of possible keystrokes, most important among these are the arrow keys and some alphabet keys that will act as switches.

Video input – The XSV300 board will need to receive and process the video input signal. This input will need to be converted to a format that will be compatible with the monitor and be processed in such a way that it can provide full motion video.

Telemetry data – The XSV board will need to pull in telemetry data and process it in such a way that it will be displayable on the monitor. It will need to be able to receive this data on a port that will be used for occasional control signal traffic going to the board as well.

 

The base station will also need to handle the following outputs:

VGA out to monitor – The base will need to put together the signal that will go to the VGA monitor.  This will require that the base station decodes the inputs and places the information in a usable format onto the screen.

Special control signals out to platform – The control signals that will allow us to switch modes and modify the incoming data stream (if possible) will be sent over the same bus through which the telemetry data is coming.

Control signals out to platform – The XSV board will need to be able to send basic RF control signals to the platform.

 

The main job of the base station will be in processing the incoming data and putting out results to the platform and monitor. The XSV board will need to process this incoming data at or near real time.

 

Now we will take a look at the requirements for the platform. The platform will take the following inputs:

Forward and Aft Sonar Array – The platform will be receiving data from both the forward and aft sonar range finding arrays. Each sonar in each array will fire at the rate of two times a second. This data will need to be collected and formatted into a digital signal that can be sent to both the base station and the onboard autonomous controller.  The data from the sonar needs to be accurate to within six inches.

Accelerometer – The accelerometer will output data that will need to be digitized and processed to get angle of tilt. The data from the accelerometer must be accurate to within four degrees.  This information will then need to be sent to the base station and to the on-board autonomous controller.   

Incoming Special Control Signals – The platform will need to receive and process incoming special commands (such as change state to user mode) in a timely manner with out significant loss of telemetry data.

Basic control signals – The platform will need to receive basic control signals on the 27 MHz channel. These signals may be partially ignored if the vehicle is in autonomous mode. The vehicle will always need to recognize the control signals that will turn the turret and elevate the camera unless the platform moves out of range.

 

The platform will also have the following outputs:

Telemetry data via the serial port – The platform will need to be able to send basic telemetry data over the serial port connection provided by the Virtual Wireless board. This telemetry data will consist of the output from the range finders and the accelerometer. The telemetry data will be no larger than 20 bytes of data per transmission with transmissions happening approximate twice per second.

In addition to these inputs and outputs, the platform will need to be able to determine when it has lost contact with the base station. It will need to be able to react to this situation autonomously. The platform will also need to determine if it is near an object and stop if it comes to close, regardless of the mode that it is in.

 

Low-level Requirements

Requirement

Minimum

Maximum

Vehicle Speed

 

4 feet/second

Vehicle Angle of Incline

 

30 degrees

Rangefinder Distance Reading

1.4 feet

30 feet

Guaranteed stopping distance

 

3 feet

Number of bytes transmitted in one second

 

52

Required baud rate for sensor RF link

416 bits/second

 

Atmel Voltage

4.5 Volts

6.6 Volts

Atmel Current

6.5 mA

25 mA

Atmel Oscillator

 

32 MHz

Atmel Machine Cycles

 

2.67 MHz

Accelerometer Voltage

3 Volts

5.25 Volts

Accelerometer Current

0.6 mA

1.0 mA

Accelerometer Acceleration

 

1000 g

Accelerometer Measurement

± 1.5 g

± 2 g

Accelerometer Noise at 10 Hz

 

2.3 mg

Rangefinder Voltage

4.5 Volts

6.8 Volts

Rangefinder Current

100 mA

2000 mA

Rangefinder Resolution

0.25 inch

~ 6 inches

Rangefinder Return Time

 

0.1 seconds

Range of RC controller

 

50 feet

Range of RF video link

 

50 feet

RF video link frequency

2.4 GHz

2.484 GHz

Range of Virtual Wireless Development Kit

3 meters

60 meters

Virtual Wireless Development Kit Voltage

4.5 Volts

4.5 Volts

Virtual Wireless Development Kit Baud Rate

 

19200 baud

VGA output frequency

15 Hz

60 Hz

Transistor Collector-Emitter Voltage

 

40 Volts

Transistor Collector-Base Voltage

 

40 Volts

Transistor Emitter-Base Voltage

 

5.0 Volts

Transistor Collector Current

 

200 mA

 

 


Design

In this section we will discuss how our particular system works. The first part of this section will give a general overview of our major components. Following the general conceptual overview, we will discuss each of the main systems and their subsystems.  Later on, we will cover how these two systems communicate with each other.

 

In order to design this complex project, we divided it into two main systems, each of which we divided further into several subsystems. Figure 1 provides a graphical overview of the interaction between all these systems. 

Figure 1 - Block diagram of RSV project components

 

As shown in the diagram above, the two main systems in our design are the Base Station and the Vehicle.  In our design, the base station is built around an XSV300 board from XESS. The vehicle platform is an RC tank bought from a local model shop. These two systems, and their components are discussed in detail below.   The base station is further divided into the video system, user interface and collision avoidance support (which is part of the onboard control system). The vehicle is composed of the following major subsystems: sensors, on-board control and movement control. In the following subsections, we will first address the subsystems built on the platform. Following this we will discuss each of the major subsystems of the base station.  Lastly, we will discuss the RF communication links between the two systems.  This includes the video RF link, the Virtual Wire Development Kit, and the RF controller.

 

Vehicle System

The vehicle system is composed of several main parts.  These include on-board control, sensors, and movement control.   The job of the vehicle system is to gather data by utilizing its various sensors and to process the data into a format readable by the Base Station.  In addition, the vehicle is in charge of enforcing movement controls, and will not allow the tank to crash into a wall, even when under user control.


On-board Control

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 

 

 

 

 


Figure 2 - 8051 cluster interface on vehicle

 

A cluster of five Atmel AT89C55 microcontrollers controls the RSV.  Two control an array of three rangefinders each.  One controls the accelerometer.  One provides autonomous control.  The final 8051 creates a communication link between the other four and the base station via the virtual wireless development kit.  The communication controller acts as a master and signals the other microcontrollers to begin the data transmission process.

 

Since we already used all three external interrupts on the rangefinder controllers, we created a protocol that did not require any interrupts on the part of the device controllers.  We configured the device controllers to take readings twice per second.  The communication controller (CCON) collects these readings and sends them to the autonomous controller (ACCON) directly and to the virtual wireless development kit (VWDK) via RS-232.

 

The data collection process begins with the communication controller toggling its interface control signal.  This clears the first rangefinder controller (RCON1) to send its data.  If RCON1 is not ready to send, the communication controller waits until RCON1 is ready.  Conversely, if the RCON1 is ready to send before the signal toggles, it waits for the interface control signal to change.  Once RCON1 is ready and cleared to send, it sets its bus ports to output and writes the first two bytes of data to it.  A minimum of three cycles after writing the data to its ports, it sets the data clock high (see Figure 3.)  After 10 cycles have passed, RCON1 sets the data clock low and writes a new value to the bus after it has been low for 3 cycles.  RCON1 sets the data clock high 7 cycles later.  CCON then records this value.  Since the order in which the device controllers send is fixed, CCON knows how many 16 bit values it will receive.  This sets up an effective transfer rate of 16 bits every 20 cycles.  Once RCON1 is finished sending, it toggles its interface control signal, transferring control to RCON2.  RCON2 and the accelerometer controller (ACON) will proceed in the same fashion as RCON1, each tristating the bus after it has finished sending, thus avoiding bus contention issues.

 

Figure 3 - Communications Protocol

 

We chose a data clock period of twenty cycles because of the asynchronous interface between the microcontrollers.  All the 8051s use a 32 MHz clock, but will not be perfectly in phase or have the exact same period.  Thus, in order to ensure a signal is seen, we must hold it for longer than 1 cycle.  We chose the number 20 because it is sufficiently large to ensure data capture and, as we are dealing with a relatively low bitrate stream (8 total readings, each 16 bits, yields 16 bytes, plus one status byte and three bytes of overhead for the RF link, yielding 20 bytes every half second,) speed is not our primary concern.

 

Once ACON has finished, all readings have been recorded into CCON and are ready to be transmitted.  As long as the RS-232 RxD line is not busy, CCON will send its 20 byte packet immediately.  This packet goes to the base station via the VWDK.  ACCON is notified of rangefinder readings closer than 3 feet by a direct connection.  Since the base station communicates with the RSV, some packet collision and loss is inevitable.  However, since they communicate at different frequencies, twice per second for the device readings and 2.86 times per second for the base station packets, collisions can only occur less than once every seven seconds.  This amount of loss is tolerable, since it is guaranteed by our protocol that there is no loss on the next transmission.  Also, the only information sent from the base station is autonomous or interactive control.  Since it will be sent again 0.35 seconds later, 0.7 seconds is the maximum amount of time the vehicle would take to switch modes.  Conversely, the device reading are sent every 0.5 seconds, so the maximum delay in between device readings is 1 second.  The sensor data transmitted to the base station is displayed only for the user’s benefit, so a one-second delay is tolerable.

Sensors

We start by describing three of the four sensors that are mounted on the actual platform; the two rangefinder arrays and the accelerometer. All of these sensors interact directly with the onboard controllers, as opposed to the fourth, which does not.

 

Rangefinder

The sonar rangefinders are an integral part of creating a vehicle with collision avoidance.  When the RSV is put into autonomous control mode, it must never collide with any obstacle and the rangefinders are a reliable solution for this problem.

 

We constructed two arrays of three rangefinders on the RSV’s platform, one fore and one aft, to cover all the directions the vehicle can move at any one time.   The individual rangefinders on the array are positioned in three directions.  One rangefinder points towards the front, while the other two rangefinders in the array are positioned at a 45° angle to this rangefinder.  If you consider the front of the vehicle to be 0°, the rangefinders for the vehicle will be pointed at 0°, 45°, 135°, 180°, 225°, and 315°.  This is shown in Figure 4. 

 Figure 4  – Rangefinder Configuration On Tank

 

We use a separate Atmel AT89C55 to control each array of rangefinders.  The base station receives the information from the rangefinders via a link provided by the virtual wireless development kit.  The onboard autonomous controller also receives this information so it can provide collision avoidance.

 

The rangefinders are set up with a 4.7kW pull-up resistor on pin 7 (ECHO) as shown in Figure 5.  We connected pins one, two, and eight to ground, and pin nine to 5V.    Pin four (INIT) provides the control for the rangefinder.

Figure 5 - Rangefinder Pin Layout

 

Pin P1_5 on the Atmel AT89C55 drives pin four (INIT) on the rangefinder as shown in Figure 6.  We connected a 1.0kW pull-up resistor to P1_5.   When the 8051 raises P1_5, it drives INIT high, which causes the rangefinder to fire.  At the same time, a 16-bit counter on the 8051 is started.  We use the negated ECHO output of the rangefinder to drive P1_2 (T2EX) on the 8051.  When the rangefinder receives a return, it sets ECHO high causing T2EX to go low.  This triggers the timer two external interrupt, at which time we get an accurate distance reading by examining the 16-bit counter that started when the 8051 raised INIT.  The system fires each individual rangefinder twice per second.

 

Figure 6 - Diagram Of Rangefinder Interface To 8051

 

We connect the inverted ECHO output of the second and third rangefinders in the array to the 8051 pins INT0 and INT1 respectively.  Pins P1_6 and P1_7 of the Atmel drive the INIT pin on the rangefinders. 

 

The rangefinders are fired at different intervals to reduce the chance of an erroneous return from the other rangefinders.  After the first rangefinder fires, we wait for 100-125 ms before we fire the next rangefinder.  This is shown in Figure 7 on the next page.  Likewise, we wait for 100-125 ms in between the second and third rangefinders firing.  Due to our constraint that each individual rangefinder fires twice a second, we wait 250-300 ms in between firing the third and the first rangefinder.  We do not care if the front and back rangefinders fire at the same time because they are pointed in the opposite direction and will not interfere with each other.

Figure 7 - Rangefinder Firing Delay Diagram

 

 

The data message from each rangefinder consists of two bytes, one byte for a measurement in feet, the other in inches.  This is shown in Figure 8 on the next page.  Each individual byte is divided into four bit pieces.  The upper four bits corresponds with the tens digit, while the lower four bits corresponds with the ones digit.  This applies for both the feet byte and the inches byte.  For example, 12 feet, 6 inches is represented by the binary value 0001 0010 0000 0110.  The first four-bit value corresponds with the tens place in feet, and the second four-bit value gives us a value of two.  Hence, we get the result of twelve feet.  Likewise, the third four-bit value is zero, and the fourth four-bit value is six, giving us a result of six inches.  The reasons for this data format are discussed later in the analysis section.

Figure 8 - Data Format For Rangefinders

 

The rangefinders will be mounted at approximately 15° to the vertical.  This is to prevent any returns from the ground up to a distance of 20 feet away, while still allowing us to detect objects low to the ground.

 

We chose to use the sonar rangefinders over the laser rangefinders for two reasons.  The first is area coverage.  The sonar rangefinders provide information within a conical volume with the emitter at the tip as shown in Figure 9.  We value this more than the single line the laser rangefinder would provide.  The other advantage to using the sonar rangefinder is availability.  The hardware lab already has many in stock whereas we would have to purchase laser rangefinders.

Figure 9 - Typical Beam Pattern Of Rangefinder At 50 kHz

Accelerometer

By attaching an accelerometer to the RSV we can derive the tilt of the vehicle.  The accelerometer interfaces with an Atmel AT89C55 and transmits its data via the virtual wireless development kit to the XSV board.  Our base controller interprets and changes the information from the accelerometer to an angle for display on the monitor.  This provides the user with a sense of the vehicle’s orientation.

 

The output from the accelerometer presents information about acceleration on two separate axes.  We align one axis along the centerline of the vehicle with the other axis perpendicular to it forming a plane parallel to the ground. The base controller uses information from both of these axes to compute the pitch and the roll of the vehicle.  To provide as accurate information as possible, we mount the accelerometer on the chassis of the vehicle, preferably as close to the center as possible.

 

The accelerometer provides data in terms of a duty cycle on a single pin for each axis.  We configure the cycle length (T2) through two capacitors and a resistor to its slowest setting, 100 readings per second.  The evaluation board provided with the accelerometer is already configured to this setting using a 1.25 MW resistor and two 0.23 mF capacitors.  The attached 8051 uses a 16-bit counter to record the amount of time the accelerometer outputs high (T1) and stores the information to transport it to the communication controller later.  By knowing the cycle time, we can measure the duty cycle of the accelerometer and thus derive the tilt of the vehicle along that axis.

 

The data message from the accelerometer information consists of two bytes.  These bytes are divided up into four-bit pieces.  The upper four bits of the first byte determine the sign of the angle.  If the four bits are all 1’s, the angle is negative.  If the four bits are all 0’s, the angle is positive.  The lower four bits of the first byte tell us the hundreds place.  In our current design, these four bits will be set to zero because we have no way to determine angles less than –90° or greater than 90°.  However, we left these bits in our data format to allow for future expandability.   The upper four bits of the lower byte determines the tens place of the angle, while the lower four bits determine the ones place.  This data format is shown below in Figure 10.

Figure 10 - Data Format for Accelerometer

 

Movement

We designed the platform to have two modes of control, interactive and autonomous.  In interactive mode, the user directly controls the movement of the platform and the orientation of the camera.  In autonomous mode, the user only controls the orientation of the camera. 

 

The tank uses two servos for movement, one servo for each tread to provide the tank with forward and reverse motion and the ability to turn within its own length.  Another pair of servos controls the camera.  One servo rotates the camera parallel to the ground, and the other servo adjusts the camera’s vertical angle.  In this manner, the user has complete control over the camera view independent from the orientation of the vehicle. All of these servos are included with the original tank. In our design we rearrange them to suit our needs.

 

To provide the interactive interface, the RC transmitter interfaces with the XSV board through one of the expansion headers.  This provides us with direct interaction with pins on the FPGA.  The transmitter consists of a simple collection of switches.  We control the transmitter through a transistor network that we built to open and close the switches on the transmitter. This allows us to control the movement of the tank via the XSV board, which in turn receives instructions from the keyboard.  In this way, we retain the functionality of the controller while actually controlling the vehicle with the keyboard. The transistor network that controls the transmitter will be covered in greater detail in our discussion of the base station.

 

While in autonomous mode, the RSV searches the area while avoiding obstacles by using data from its rangefinders.  The autonomous controller is located on the vehicle.  If the RSV travels out of range of the base station, the vehicle reverses direction in an attempt to regain RF communication.  Requiring two-way communication via the virtual wireless development kit allows the vehicle to recognize when it travels out of the range of the base station because the vehicle will no longer receive information from the base station.  Outlined below is the state diagram for the autonomous controller.  The signals OOR and OBS represent out of range and obstacle in path, respectively.

 

Figure 11: State Diagram for Autonomous Controller

 

The algorithm of the autonomous controller is simple.  It moves forward as long as it encounters no obstacle and does not go out of range.  If it goes out of range, the vehicle reverses direction until it comes in range or finds an obstacle.  If it finds an obstacle, it will stop until it is reset.  Toggling to user mode and back to autonomous mode again resets the autonomous mode.  If we come back in range while reversing, we turn a random amount and begin searching again.

 

While the vehicle is in range, if it discovers and obstacle in its path, it will turn until it is clear of it, and then continue on forward.  If the RSV continues to stay in the Turn 1 state for a period of 1.5 seconds, it will move to the stop state, because it is unable to move away from its current location and will just spin.  Also, the Reverse state will have a 1.5 second timer before automatically going to the Stop state because if the RF link was still operational, the vehicle would have received another transmission by that time.

 

The autonomous controller controls the servos of the tank with 4 relays.  In order to control the movement of the tank, the base station disallows signals to those servos from the RC controller.  The autonomous controller then creates shorts across transistors on the vehicle’s control board simulating the effect of the RC controller providing the signal.  In this fashion, the autonomous controller can directly control the tread servos by running current through the coil on the relay.  As long as no signal comes from the RC controller, this gives the autonomous controller the ability to change between the three states of each servo: forward, reverse, and stop.

 

As given in the requirements section, the maximum speed of the vehicle is 4 feet per second and the minimum time between rangefinder updates is .5 seconds, since we don’t need to worry about loss over RF.  This means the vehicle can stop in 2 feet.  We use 3 feet as our stopping distance because the rangefinder provides unreliable data under 1 foot.

 

Base Station

There are three main components of the base station: video, user interface and support for collision avoidance.  The overall job of the base station is to process the data it receives from the vehicle system and display it in a manner that is easy to understand.

Video

We chose to use an analog signal for our video feed.  For this, we used an off the shelf digital video camera from Trendmasters.  The camera takes a digital picture, translates it into NTSC format and transmits it via a 2.4 GHz radio link to a receiver equipped with RCA jacks. For this project, the RCA jacks will be plugged directly into a standard TV to give us our video image.  We chose this solution due to time constraints and complexity of integrating the video decoder with the FPGA.  Outlined below is our fully defined extension to integrate the video feed with the VGA system.

 

In order to implement the extension, we plug the RCA jack into the XSV board where the built in the Philips Semiconductor SAA7113 decoder microchip digitizes the signal into ITU 656 YUV 4:2:2 format.  We then send the digitized video into the FPGA where we change it into an RGB signal to send to the monitor as seen in Figure 12.

 

 

 

 

 

 

 

 

 

 

 


Figure 12 - Video RF interface through XSV board to monitor

 

The YUV format has a resolution of 720 x 525 pixels and stores the information in terms of luminance and red and blue color.  The 4:2:2 ratio indicates that every pixel has its luminance stored, but the red and blue color are only recorded every other pixel.  This turns out to be advantageous.  Since we do not plan to display a full screen image, we can simply ignore every other luminance value without losing much information about the picture as a whole.  This reduces the number of columns to 360.  In order to display a non-distorted image, we drop every other row, giving us 263 rows.  The decoder provides horizontal and vertical synchronization signals and a line locked clock that provides us with our exact location in the image.

 

Lastly, we must convert the current format into a format compatible with a VGA monitor.  The RAMDAC does not accept YUV signals, but will accept RGB, thus we need to convert from YUV to RGB.  We use the following transformation to perform this conversion:

where Y, Cr (U), and Cb (V) are 8 bit values.  This yields 8 bit values for R, G, and B.  Since this transformation will be done on an FPGA, we will approximate the multiplication by using 16 bit variables and truncating all extra bits.  In this manner we now have a 360 x 263 RGB image that we send to the RAMDAC and display on the monitor.

 

There are several reasons why we use this approach over the option of leaving the signal in digital format.  The main reason is parts availability. We found it nearly impossible to find a transmitter that could handle the bandwidth that a digital signal requires. Uncompressed video data from a CIF (352x288) camera requires a 37.5 Mbps link to display at 30 frames per second.  This is an unreasonable amount to transmit over any existing radio frequency link designed to transmit digital data.  One option we investigated involved encoding and decoding the video stream around the RF link.  Several algorithms are available for this, such as MPEG-4 and H.263.  These codecs reduce the needed bandwidth to a reasonable, though still large, amount.  MPEG-4 requires a 1Mbps link to display video at 15 frames per second.  Unfortunately, we found the implementations of these algorithms in integrated circuits difficult to find and costly.  Also, a 1 Mbps RF link, such as Bluetooth, proved to be expensive and unavailable in standard packaging.

 

The NTSC format provides us with a viable alternative.  NTSC is the name of a set of common video formats used to transmit television signals in the US and other countries. Since we know television signals are transmitted reliably via this format and NTSC sender/receiver pairs are readily available in consumer electronics stores, we decided to use this transmission method. We chose the Trendmasters camera because it already integrated digital picture acquisition with an NTSC radio frequency link. The camera proved to be cheaper than a stand-alone NTSC transmitter/receiver pair. Since we no longer have to focus on the video link we can spend more time on processing the video in the Xilinix FPGA.

 

User Interface

The user controls the RSV through a keyboard and receives information from a VGA monitor.  The keyboard allows the user to control the basic movement of the vehicle and camera mounting as well as change the vehicle between interactive and autonomous modes.  The monitor provides the user with telemetry and status information from the vehicle. Both the keyboard and the monitor are plugged directly into the XSV board.  We chose this approach rather than using a PC to control the devices because all members of the team have experience with interfacing the keyboard and monitor with the XSV board.  Also, the XSV board provides every type of port we need, including PS/2, RCA, monitor, serial, and direct interfacing to pins on the FPGA.

 

To design this portion of the system, we again broke it down into subsystems. The two main subsystems of the user interface are the keyboard module and the VGA module. Both of these will be discussed in detail, starting with the keyboard interface.

The Keyboard Interface

The keyboard is the means by which the user interacts with the system. As such, we had to read the input from the keyboard and parse it correctly. The three main parts on the XSV board that handle this are the keyboard module, the parser, and the decider. This section will cover a little background on the way input comes from the keyboard and will then discuss each piece in turn. Afterwards, we will give the implementation for the transistor array that actually controls the transmitter based on the signals that come out of the XSV300 board.

 

The Keyboard

The keyboard communicates with its host device by the use of scan codes. Each key has a particular code associated with it. For most keys, this scan code is a single byte although quite a few have two or more byte codes. When a key is pressed, the scan code for that key is sent to the host device using the two-line PS/2 connection. This code is sent one bit at a time with a clock signal to distinguish the bits. If the key is held down, this procedure will repeat after a short interval and will keep repeating until the key is released. When the key is released, the keyboard sends the scan code again, this time with an 'F0' byte. Where the 'F0' byte appears in the sequence of bytes sent to the host depends on the key pressed. If the key has a one byte scan code, then the 'F0' is sent first. If the key had a two byte scan code, then the 'F0' appears in between the two bytes, and if the scan code had more than two bytes, then every other byte is an 'F0.' The important thing to note here is that the second to the last byte of any sequence sent to the host upon the release of a key is 'F0.' This organization lends itself to a relatively simple state machine that is what we use for our parser. Such a state machine can handle any input from the keyboard and allow us to react to only those keys that we deem important.

 

For our project, there are only two types of keys that we care about; those with one scan code and those with two. The keys that have one scan code that we care about are those on the number pad, the space bar, and the letter keys. Those with two are the arrow keys that will provide the basic control for the vehicle. With each of the number keys, the first byte of their scan code is the same, namely 'E0.' Examples of the byte sequences sent to the host for both of these type of keys can be seen in Figure 13, which shows the example output from the keyboard module.

 

The Keyboard Module

The keyboard module was originally given to us last quarter for work on our projects in 467. The module takes as input the data and clock signals from the keyboard and using a shift register parses out the incoming bytes. It outputs both the incoming byte and a line that indicates that a byte has arrived and will be available. The timing of the two signals in relation to each other is shown below in Figure 12. The key thing to point out is that the new_key signal pulses right before the value on the bus changes. This means that we have to wait a minimum of a clock cycle before we read the data off of the scan_code bus. The second piece of the keyboard interface, the parser, takes this into account.

 

Figure 13: Scan code examples and keyboard module output timing

 

The Parser

The parser, known in our design as the movement block, determines what to do for each given scan code. It uses a state machine to parse the byte stream that comes in from the keyboard module. It outputs a set of control lines that are one-hot encoded. The state machine is shown in Figure 14 and an explanation follows.

 

The parser starts in state 0. In this state, the machine simply waits for the signal that a new byte will be arriving, upon which the machine will switch to state 1. In state 1, the machine first waits for the new byte signal to go low and then it begins to count. It counts so that the scan bus has plenty of time to settle. After the count is done, the machine samples the contents of the bus. If the byte coming through is 'E0', the machine sets a flag and goes back to state 0 to wait for the next byte. If the byte coming through is 'F0', the machine goes to state 3 where it will ignore the next byte that comes through and set all control lines to off before going back to state 0. If the byte is anything else, it will go to state 2. In state 2, the machine examines the byte and activates the appropriate control line. It then goes back to state 0.

 

Some of the outputs of the parser are fed to the decider while others are fed to registers that define certain control functions of the machine. The control functions are covered in the section on autonomous control so the rest of this section will focus only on what the decider does.

Figure 14: Parser State Machine

The Decider

The outputs of the parser block corresponding to movement are next input into the decider. This block is combinational logic that will make sure that the correct control lines for the actual control of the platform, in this case a tank, are asserted or turned off. In our case, the decider takes in eight inputs, four corresponding to the arrow keys on the keyboard and four corresponding to the arrow keys on the number pad. Inside the block, the inputs of the four arrow keys on the keyboard are fed into one piece of combinational logic while the other four are fed into another. The four keyboard arrow keys are used to control the basic servos of the tank. To avoid damage to these servos, the combinational logic only pays attention to one of the four inputs at a time. If two or more are asserted, the combinational logic will shut off all of the control signals. With the four number pad arrow keys, the logic is similar. Only keys in one direction for any given plan of motion will be looked at. The mapping that the decider makes for each key is summarized in the tables below. Only the translations that come from a signal key press are shown.  Multiple keys pressed simultaneously are not supported.

 

Table 1: Servo control mapping for arrow keys

Key Press

Left forward

Left back

Right forward

Right back

Up Arrow

On

Off

On

Off

Down Arrow

Off

On

Off

On

Left Arrow

Off

On

On

Off

Right Arrow

On

Off

Off

On

 

Table 2: Servo control mapping for number pad keys

Key Press

Camera Left

Camera Right

Camera Up/Down

Keypad 8

Don’t care

Don’t care

On

Keypad 2

Don’t care

Don’t care

On

Keypad 4

On

Off

Don’t care

Keypad 6

Off

On

Don’t care

 

 

 

 

 

 

 

The Transistor Array

The signals that come out of the decider are routed out of the expansion bus to an array of transistors. These transistors are configured to open and close the connections on the RC controller that the original switches would have.  We soldered one end of a wire to the positive side of the circuit and ran the other to the collector on a transistor. We tied the other end of the transistor to ground. Since we are using PNP transistors, the signals coming out of the decider are kept high until they are asserted, at which time they complete the circuit in the transistor and make the connection on the transmitter. All told, 7 transistors are used for control. Four of these transistors control the tread servos for the basic motion of the vehicle. The other three control the camera platform. A diagram of this set up is shown below.

 

Figure 15 - Transistor Connections

 

The signals from the XSV300 expansion bus are carried to the array over a ribbon cable with a 50-pin header connection over the expansion bus. Not all of the pins on the expansion header are usable due to the fact that the ribbon cable does not completely cover the full set of pins. Some of the pins in this bus are also used for the communications protocols. These pins and their mappings will be discussed in the section on the virtual wireless link below. Those pins that are used for the transistor array are listed in Table 3 below.

 

Table 3: Pin outs from the XSV board

FPGA Pin

Pin Name

Signal Name

p202

D0

Left Forward

p203

D1

Left Back

p205

D3

Right Forward

p206

D4

Right Back

p207

D5

Turn Camera Left

p208

D6

Turn Camera Right

p209

D7

Camera up/down

  

One thing to note is that the signal D7 controls both the camera’s up and down motion. This is due to the original design of the tank. We are using the motor that was originally used to train the turret. This motor, although on the controller appeared to have two different degrees of motion, only has one (both buttons close the same circuit).

The Video Component

The video component of the user interface is composed of three main parts: the character lookup table, the dual ported RAM and the VGA module. Two of these components are simple Core Generator modules while the third is a system unto itself. In this section we describe the character lookup table, dual-ported RAM and lastly the VGA module and its components.

 

The Character Look-up Table

The character lookup table is a Core Generator RAM with an 8-bit data bus, 10-bit address bus and 752 entries. Each entry corresponds to one row of eight pixels in a character. Each character is composed of 16 rows, and there are a total of 47 characters available including the numbers 0-9, the English alphabet in caps, and a select number of lower case English letters and punctuation marks. We may change the exact number of entries and/or characters if we feel we need to in the future. This may include adding the rest of the lower case alphabet or additional punctuation.

 

To access a character, the user specifies the character's code using the upper six bits of the address line and specifies the row that is wanted by the lower four bits. There is a one-cycle turnaround time between getting the code and row number on the address bus and getting the data for that row. A complete current list of the character codes is shown in Table 4.


 

Table 4: Character codes for look-up table

Char Code

Character

Char Code

Character

Char Code

Character

Char Code

Character

0

0

16

G

32

X

48

blank

1

1

17

H

33

W

49

blank

2

2

18

I

34

Y

50

blank

3

3

19

J

35

Z

51

blank

4

4

20

K

36

°

52

blank

5

5

21

L

37

(

53

blank

6

6

22

M

38

)

54

blank

7

7

23

N

39

.

55

blank

8

8

24

O

40

f

56

blank

9

9

25

P

41

t

57

blank

10

A

26

Q

42

a

58

blank

11

B

27

R

43

n

59

blank

12

C

28

S

44

g

60

blank

13

D

29

T

45

l

61

blank

14

E

30

U

46

e

62

blank

15

F

31

V

47

blank

63

blank

 

The Dual Ported RAM

The dual ported RAM is the primary interface the video system has with the platform. Like the lookup table, the construction is simple. The component is a Core Generator module that is 16-bits wide and has 16 entries. Address 0 is reserved for the status byte, addresses 1-6 correspond to the individual rangefinders, and address 7 is reserved for the information coming from the accelerometer. The other eight entries are reserved for future additions.

 

Each Rangefinder entry is the concatenation of four 4-bit character codes that specify the distance to the nearest object in feet and inches (see Figure 8.)  The high order byte corresponds to feet, while the lower order byte gives the inches.  Similarly, the high order byte of address 7 is two character codes representing the sign and hundreds place for the angle of pitch the vehicle is experiencing while the lower order byte is two character codes representing the tens and ones place for the angle of pitch  (see Figure 10.)

We formatted the status byte differently. Unlike the others, it does not specify a character code. Instead, the lower three bits tell the VGA module which rangefinder is registering the closest object.  The fourth bit is used to determine if the back rangefinder array has located an object within three feet, while the fifth bit determines if the front rangefinder array has located an object within three feet.  

 

The VGA Module

The VGA module is the biggest part of the video system. This module takes in data from the dual ported RAM and the autonomous control unit and displays the information on a VGA monitor. Like the overall system itself, the VGA module has three main components. Two of these components were used last quarter in CSE 467 and are fairly simple devices. These two are the Hsync and Vsync generators. As the Hsync and Vsynch generators are implemented as counters, we won’t go into much detail about them here. The important thing to remember about these two modules is that they convert the 25 MHz clock to a VGA signal and X and Y coordinates with which we can place images on the screen. The coordinate system and our planned layout are shown in Figure 16 below. The last component is the module that decides what to put up on the screen. It is the largest single module on the whole XSV board. The rest of this section will focus on the VGA module and how it works.

 

Figure 16 - VGA Monitor Layout and Coordinates

 

The display conforms to the VGA specification. The display is 640 x 480 pixels and refreshes at a rate of 60 Hz. We have divided the display into 3 sections. The middle section from where Y = 25 to Y = 455 is reserved for video, if we can ever manage to successfully program the video input processor and display the video feed. The other two portions are reserved for displaying status. Their basic layout is shown below in the figure below. The top band shows a summary of the important status information, while the bottom displays the information obtained from each of the range finders individually.

Figure 17 - Basic Layout of Text on Screen

 

A few notes about Figure 17. We used placeholders to indicate values that are not static. "(ID)" refers to the one or two letter id tag of the rangefinder that is registering the value. These values correspond to the rangefinders mounting positions on the vehicle. For instance, "LF" refers to "left forward" with left being defined in relation to a view looking forward from the middle of the tank. If this were a ship, left would equate to "port." Thus if the id listed in the top band were "LF", we would know where in relation to the tank the object is. X is also a placeholder. Under normal operation, the X would be a numeral from 0 to 9. Lastly, the "USER" in the upper corner refers to the status of the vehicle. If the vehicle were switched into autonomous mode, this display would read "AUTO."

 

The total number of characters that can fit in either of the lines is 80. Two of these spaces are used at either end for a border, reducing the total to 78, which is more than adequate to display all the information that we need to. The characters are each 16 pixels high, so the extra 8 pixels in the band are used for border both above and below the text lines.

 

As stated earlier, the VGA module is the main control for what goes up on the screen.  The module pulls in the X and Y coordinates and uses the current position to output an 8-bit number to the RAMDAC. Most of the decisions are based on constants within the module. For instance, if the X and Y are in the video region, the module passes the value coming in from the output bus of the video input processor to the RAMDAC or if the X and Y place the pixel in the board region, then the module outputs a predetermined color value.

 

A lookup on the text lines can be a little more complex. For each position, the module has an if statement to check if the character is in or nearing that position. If it is, it places in the high order six bits of the address bus going to the character lookup table the character code determined in the if statement. In the low order 4 bits, the module places the current low order 4 bits, offset for placement, of the Y coordinate as a row number. The value will then be available on the next cycle for use. When it is available, the position can be indexed by the lower order 3 bits of the X coordinate and we can determine the on or off value of the pixel. The slight delay in getting the value from the ROM is offset by the fact that we check to see if we are nearing (within two pixels) of the position. If we are, we simply input the next byte code. A sample of the verilog code that implements this is shown in below.

 

Figure 18 - Sample Verilog Code

The char code used for any one position can be determined one of three ways. The first is that it is statically defined within the if statement. This is the case with most of the lettering. The second is that it is statically defined in the if statement by use of a conditional flag that will switch the value depending on the flag. This is what is done when switching from user to autonomous mode or back. The last method is to pull the character code off of internal registers that are updated as new information becomes available. This is the case with all the telemetry values from the accelerometers and rangefinders. The example in the figure above shows code to implement the second type of decision-making strategy.

 

Collision Avoidance Support

The collision avoidance system is implemented on the base station through the use of some combinational logic.  When the tank encounters an obstacle, it sends in its next data stream to the controller a signal that tells the base station what controls to disable. The signal is contained in the 4th and 5th bits of the status byte. The signal is interpreted by the module that acts as an interface between the Atmel controlling the serial port and the dual-ported RAM used by the VGA system. If the 4th bit is a 1, the module sends a signal that disables the signal from the down arrow key. If the 5th bit is a 1, then the module sends a signal that disables the control signal from the up arrow key. These signals will be asserted until a status byte comes through that has the particular bit(s) in question set to 0.   In this way, the vehicle will be effectively stopped from being moved in the direction of the obstacle, but the user will retain the ability to move in other directions.

 

RF Links

The RF links are an essential part of the RSV.  They provide a communication link between the vehicle system and the base station.  This allows us to transfer telemetry data such as the distance to the nearest object without having a direct connection from the tank to the base station.  The three RF links are the video RF link, the Virtual Wire Development Kit, and the RF controller.

 

Video RF Link

We decided to use an off the shelf solution for our video needs.  The Trendmasters video camera gives us an RF link that allows us to transfer a color video feed from a video camera mounted on the RSV to the base station.  This video feed is connected directly to a television screen.  No other work is necessary for the video component.

 

Virtual Wire Development Kit Link

There are three components in the Virtual Wire Development Kit Link.  These are the Virtual Wire Kit, the Atmel that provides the RS-232 interface with the Virtual Wire Kit, and the base station interface, which takes the data from the Atmel and uses it to load the RAM.

 

Virtual Wire Kit

The Virtual Wire Development Kit provides us with a wireless link to transport telemetry data from the vehicle.  We will follow the protocol given in the Virtual Wire Development Kit manual.  This protocol is shown below in Figure 19.  The size/status byte will be set to 17 so we can send all of the data from the six rangefinders and accelerometer at once, along with the status byte.   The message portion of the packet is composed of the status byte and the actual rangefinder/accelerometer data.

 

 

Figure 19 - Protocol format for the Virtual Wireless Kit

 

RS-232 Interface

To provide a RS-232 interface with the Virtual Wire Development Kit, we are using an Atmel 89C55.  The Atmel microcontroller has a built-in RS-232 interface, so we can easily receive data from the Virtual Wire Development Kit, which is also in the RS-232 format.   The Atmel will buffer the 17 bytes from the Virtual Wire Kit and pass them on to the base station interface in one-byte pieces.

 

Base Station Interface

The base station interface interprets the data received from the Atmel RS-232 interface.  The pin values for the interface from the Atmel to the FPGA expansion header are listed in the table below.  By checking to see if the fourth or fifth bit is set in the first byte received (the status byte), we can determine if the rear or front rangefinder arrays located an object closer than three feet.  The base station controls the mode line which tells the Atmel the current movement control.  ‘0’ is used for interactive control and ‘1’ is used for autonomous control.  The Atmel then creates a 4 byte packet (1 byte of data) from this line and sends this message periodically via the virtual wireless development kit.


 

Table 5 - Pins used for data lines in the Extension Header

Data Pin

FPGA Pin

DCLK

200

D0

201

D1

215

D2

216

D3

217

D4

218

D5

220

D6

221

D7

222

Mode

223

 

 

After the first byte is processed, the base station interface will append a byte set to zero with the status byte and write this 16-bit value to memory address zero in the RAM.  In addition, the base station starts a counter.  This counter will be used to ensure that we can stop in time, even if we drop a packet.

 

Once this step is completed, the base station interface will buffer one byte so it can compute the whole 16-bit value at one time.  After it receives the next byte, it checks the 16-bit value to determine if the distance is less than five feet.   If the value is less than five feet and the timer exceeds 0.6 seconds, we will know that a packet has dropped.  To handle this case, the controller will set a stop flag corresponding to the current direction and will leave it high until it gets a new packet.   After this, the base station interface will store the 16-bit value in the RAM.  This step is repeated until all the rangefinder and accelerometer data is processed.

 

Pins 193, 194, 195, and 199 are reserved for use in an I2C controller.  The I2C controller is a possible extension to this project, as the I2C controller will allow us to initialize the video decoder on the XSV300 board.

RC Controller

The RC controller is the controller for the RC car.  This came with the tank.  The actual specifics of the RC Controller are covered in the keyboard section.
Parts

 

Hardware

 

Quantity

Manufacturer

Part Number

Description

Comment

1

Horizon Hobbies

 

M1A1 Abrams Tank

This is the Radio Controlled tank on which we build the RSV.  It operates at 27.145 MHz.

1

Trendmasters

 

Digital Video Camera

This module provides our video feed.  It captures digital images, converts them to NTSC (standard TV) format and broadcasts the signal to a nearby base station. It operates in the 2.4 GHz range.

6

Acroname

R14-SONAR1

Polaroid Instrument Grade Sonar Ranging Package

The sonar range finders provide us with the ability to detect a possible collision with a physical object.

1

Analog Devices

ADXL210EB

Dual Axis Accelerometer Evaluation Board

The accelerometer board gives us information about the platform’s movement from which we can derive its velocity and the amount of tilt the vehicle is experiencing.

1

RF Monolithics

DR-1200DK

Virtual Wireless Development Kit

This kit gives us the ability to send digital signals to and from the platform in order to provide control and receive telemetry data. This link is in the 900 MHz range.

1

Xess

XSV300

Virtex Prototyping Board

This FPGA prototyping board provides us with many interfaces and is required for the integration of all the components of the RSV.

6

Atmel

AT98C55-33PC

8051 DIP Microcontroller

The Atmel 8051 is used to control the various sensors on the RSV.

3

Fox Electronics

F1100E-320

32.0 MHz clock

This oscillator is used to drive the Atmel 89C55 microcontroller.

11

Fairchild Semiconductor

2N3906

PNP General Purpose Amplifier

We will use these transistors to control the switching on the RC controller for the tank.

2

Texas Instruments

SN74LS00

Quad 2-input NAND gate

This TTL device will provide inverters for use with rangefinder and RS-232 interfaces to the Atmel AT89C55s.

1

 

 

VGA Monitor

The monitor will display the video output and current status of RSV.

1

 

 

PS/2 Keyboard

The keyboard is used to interface

with the RSV.

20

 

 

47 uF Capacitors

Used for power supply decoupling.

9

 

 

1 kW Resistors

Used as pull-ups for Port 1 on 8051

3

 

 

4.7 kW Resistors

Used as pull-up for ECHO line on rangefinder.

4

ITT

MT2 C93401

5V Relay

Used to control servos of vehicle for autonomous control.

6

 

 

AAA batteries

Power for Virtual Wireless Development Kit

2

 

 

9-volt batteries

Power for video camera and RC controller for tank.

3

 

 

D batteries

We need a 4.5-5V power supply to provide power to the accelerometer, range finders and onboard  8051s.

 

Software

Manufacturer

Program

Description

Kiel

C51 Compiler

Compiles C programs into hex code for the 8051 microcontroller.

Xilinx

Foundation Series

Creates FPGA configurations from schematics and Verilog modules.


Analysis

An analysis of the major portions of our design shows that it meets the design requirements. In this section, we investigate each of the major subsystems and how they do this.

 

Vehicle

Power Consumption

Tank Power

The RC tank came with a rechargeable battery pack.  When fully charged, this battery supplies 15 minutes of continuous operation.  Using this battery pack removes our need to find a mobile compatible high current energy source.  The RC controller runs off a 9-Volt battery, as specified in the provided tank documentation.

 

Video Power

The video camera and its corresponding link also came with specified power sources.  Since a 120 VAC to 12 VDC transformer powers the receiver, we can power this with a wall socket provided in the lab.  The camera is configured to run off a 9-volt battery, so we do not need to define a suitable power source of our own.

 

Device and Controller Power

The data sheets state that when the rangefinder is fired, it can draw a maximum of 2A.  This would cause a problem because 6 * 2A = 12A.  This value is not including any of the other components on the RC tank such as the accelerometer or the 8051 microcontrollers.  However, upon testing a rangefinder firing once every 0.5 seconds we discovered only 44mA of current is drawn from the power supply due to decoupling capacitors totaling 245 mF on the board.  With six rangefinders, we get 44mA * 6 = 264mA.

 

The amount of power that the accelerometer needs is negligible since it draws less 1 mA.

 

The Atmel 89C55 microcontroller draws 25 mA of current. We have a total of 5 microcontrollers on the vehicle, resulting in 25 * 5 = 125 mA of current being drawn.  In total, we have 264 mA + 1 mA + 125 mA = 390 mA, which is manageable since our power source of 3 D batteries provides 1 A of current.

 

Communication Controller

The main issue with the communication controller is timing.  We have a complex communication scheme due to the multiple Atmel microcontrollers on the vehicle.  However, our communication protocol takes this into account by requiring multiple cycles to set and read the data. (see Figure 3)  By taking multiple cycles, we eliminate any problems due to clock skew or slightly different clock frequencies.

 

Code size is not a concern with our communication controller.   Currently our controller is 3KB in size, far below the maximum of 20KB on the Atmel.

 

Sensors

Rangefinder

There are several main issues that came up when using the rangefinder.  The first is whether multiple rangefinders firing at the same time could cause erroneous values (from returns generated by the other rangefinders).  We decided that there could potentially be a problem here, so by our design, we do not allow any of the front three rangefinders to fire at the same time.  We apply the same constraint to the rear rangefinders as well.

 

Another issue is the speed with which we can switch between rangefinders within an array.  We want to get data from each rangefinder every half second.  To ensure that we don’t get any false returns, we need to make sure that we don’t fire another rangefinder before we get the return from the first sound pulse.  Since the speed of sound is equal to approximately 300m/s, and the range of the rangefinder equal to 11m (total distance round trip is 22 m), it takes approximately 100 ms to get a result in the worst case.  Due to this calculation, we decided the maximum amount of times we could fire the rangefinder and switch to another rangefinder in one second is 1s / 100 ms = 10 times.  As a result, we changed our design to have only three rangefinders per 8051 (as opposed to 6).  Three rangefinders, firing two times a second, gives us a total of six, which is below our upper bound of 10.  This also allows us to increase the number of checks per second to three if we feel we need that degree of accuracy.  In addition, this allows us to use the three external interrupts on the Atmel 89C55 (timer 2, INT0, and INT1).

 

The data format described in Figure 8 is used because it meets our specifications listed under requirements, and it allows for easier conversion on the Base Station.  Since only two bytes are being sent per rangefinder, we meet our requirement that the rangefinder arrays will send 12 bytes of information every half second.  The data format is easier to use because the Atmel microcontrollers can perform multiplication and division, operations that would need to be implemented on the FPGA if we chose to do the conversion on the XSV300 board.   We could have set the data format to give the data in terms of inches.  For example, 144 would be sent instead of 12 feet.  However, we felt that this would result in a less-meaningful result being displayed on the VGA monitor.  If we tried to convert the number from inches to feet, we would run into the same difficulty of implementing integer division.

 

The rangefinder can get returns off the ground.  In order to prevent this, we plan on placing the rangefinders at approximately a 15° to the vertical.  This is based upon the graph in Figure 9 that shows that the signal strength degrades rapidly once you are past 15° from the center of the rangefinder.   Actual experimentation will be needed to set the exact angle due to slight variations in the rangefinders.

 

The current code size for the rangefinder control is 4KB.  This is far less than the 20KB that the Atmel has available.   The 4KB also includes debugging code, along with the stdio.h library, so the actual code size will be far smaller than 4KB.

 

Accelerometer

To ensure we give an accurate calculation of the angle the vehicle is currently at, we use a 16-bit counter in the controller.  The accelerometer is set to have a period of 10 ms, giving us a total of 100 pulses per second.   We will be sampling a pulse approximately every half second.  This reduces the amount of calculations we need to perform, and still provides us with an accurate result.  The interrupt routine that checks the duration of T2 occurs every 25 cycles, or 9.375 ms.  This gives us approximately four degrees of accuracy, which is sufficient for our design.

 

Autonomous Control

 During autonomous operation, the vehicle will attempt to stay in the range of the virtual wireless development kit.  It will know when it has gone out of range because it will no longer receive periodic messages from the base station.  After one second has past and no message is received, the vehicle moves into the out of range state.  This is sufficient time because the base station sends the periodic message more than twice per second, and if one collides, the next will get through.  The vehicle will then back up for a maximum of 1.5 seconds.  The vehicle moved a maximum of 1 second forward out of range, so it should come back in range within 1.5 seconds.  If the vehicle is not in range after 1.5 seconds, it will transition to the stop state because it is more likely the RF communication was severed than it went out of range.

 

As given in the requirements section, the maximum speed of the vehicle is 4 feet per second and the maximum time between rangefinder updates is .5 seconds, since we don’t need to worry about loss over RF.  This means the vehicle can stop in 2 feet.  We use 3 feet as our stopping distance because the rangefinders provide unreliable data under 1 foot.

 

As shown in the design section, we created the autonomous controller from a 5 state Moore machine.  This means that outputs are decided by a single variable, state.  The inputs to the autonomous controller are obstacle in front, obstacle to the rear, out of range, and mode.  The mode acts an enable, resetting the whole controller when in interactive mode.  We have an effective machine of 5 states with three inputs, with many self-loops.  Since this is a small machine, we anticipate this will take up less than 4 kB of space on the Atmel, well below the upper bound of 20 kB.

 

Since we are using connections on the control board of the RC tank, we need to ensure we never create an invalid combination of connections.  PNP transistors controlled by the Atmel drive the relays that make the connections.  When the base of the transistor is set to high, no current flows through the transistor and the relay is off, creating no short on the RC tank board.  When the Atmel is in the reset stage, the pins connected to the transistors are set high and the Atmel enters the reset stage on power up because of an external reset circuit we implemented on the breadboard.  Therefore, during reset, no connections are shorted.  Also, no connections are shorted when powered down, because there is no current to flow through the transistor even though it is in the on state.  Once reset, the pins of the Atmel are explicitly set to high and all pins are assigned explicitly in every state, so no matter what state the Atmel is in, even if it somehow enters an invalid state, it will never have an invalid combination of connections.

 

Base Station

User Interface

Keyboard

The keyboard module is simple in design and simple in implementation. Its behavior is predictable and initial testing has shown its performance as satisfactory.  The clock used by the keyboard is slow compared to that used by the XSV board. For instance, the fastest signal to come from the keyboard is the new_key signal. This signal stays high for 77 ms. This is more than long enough for the parser, which uses a clock with a period of 40 ns, to recognize the signal. As a result, the signals from the keyboard inputs are seen and reacted to. This is the only asynchronous timing issue that we have with this module. Once the signal is on the FPGA, it proceeds as normal through the logic to assert the correct pins.

 

VGA system

The VGA module displays the telemetry data that is received. All members of the group have some experience from last quarter with the basics of the VGA system and have successfully sent information to the screen before. The modules used to conform to the VGA specification have already been proven to work, so no attempt to justify their use will be made here. What does need to be justified is the code that we use to put the display out to the screen.

 

As shown in the design section, the code to put a pixel to the screen consists of the equivalent of a case statement based on the X and Y coordinate of the pixel. For any given pixel, the worst case delay for determining the color of that pixel is one cycle. This is a result of our conditional statements that determine when and what we need to pull from the character lookup table. We also look at registers that are in the module to determine the characters for displaying the telemetry data we receive. These values are updated every cycle. The only error that should be propagated to them should be when the module attempts to read the dual-ported RAM at the same time that it is being written to. This happens at most twice a second. This difference will hardly be noticeable to the user because the refresh rate is set at 60 Hz. 

 

Slice Count

The hardest portion of user interface is that the main module in the system will require a large number of slices to accomplish its task. Every time we add a character to the display, we add about four slices to this module. This is not a problem because we will have 160 characters at maximum, resulting in 640 slices in the worst case. In contrast, the character lookup table requires only about three slices and the total keyboard system takes about 62 slices. This leads to a total usage of around 700 slices. The only other logic on the XSV board will be used to get data into the board from the external Atmel. This logic consists of the small dual-ported RAM and a logic block to pull the data from the Atmel off the bus connecting the two. Given our current experience with the ROM and the logic implemented so far, these pieces should not take more than around 100 slices. This means that we will be using less than one-third the capacity of the board.

 

Interactive Control – Collision Avoidance

The support for collision avoidance on the FPGA consists of a small amount of combinational logic to disable controls and some verilog to decide when to do it. This verilog will be contained in the module that transfers data from the off board Atmel that is controlling the radio link to the dual ported RAM for display. The module, upon receiving a signal from the vehicle that a collision is possibly going to take place, will place an output line high that will in turn signal the combinational logic to disable outputs. The only delay for this is that through a few basic gates.

 

The signals themselves will be computed every half second on the vehicle side of the system. They will be transmitted with the regular telemetry traffic as part of the vehicle’s status byte. When they are received by the base station’s external Atmel, they will be piped into the FPGA through an 8 bit wide bus. The delay for this will be about .5 ms. Processing on board will take no more than 2 cycles, or 80 ns. The transmission from the tank to the base station should take no more than 2 ms. All to gather, this part of the process will take less than 3 ms.

 

The biggest holdup for this will be the fact that we will be calculating the telemetry only twice per second. This will add a maximum delay of .5 s to the detection and reaction time. This means that our maximum detection to reaction time of the collision avoidance system is well less than a second, assuming no lost packets.   Typically, this number is closer to half a second, or about .51s. The vehicle will have traveled less than three feet in this time, making three feet a good minimum value for collision avoidance.

 

There is still the possibility of a lost packet.  The base station receives updates from the vehicle every half-second, but the maximum guaranteed interval is 1 second.  Since the vehicle can travel 4 feet in 1 second, the base station will keep a counter if any of the rangefinders fore or aft record a value of less than 5 feet.  If the base station does not receive a new packet in within .60 seconds, the collision avoidance protocol, will stop any attempt to move the vehicle in the direction of the close to an obstacle recording.  If the object sensed was from the opposite direction than the motion, the movement will not be interrupted, but if the object is in the direction of the motion, the vehicle will stop.

 

 

RF Links

Of the three links that we are using for wireless communication, two are already provided and work. These are the basic RC control channel for the vehicle and the transmission from the wireless camera. As a result, no analysis of these links is necessary and in this section we will concern ourselves with a discussion of the link provided by the Virtual Wireless Kit.

 

We treat the RF link provided by the virtual wireless kit like a half-duplex RS232 port. We use this link to send control signals to and receive telemetry data from the platform. Since we are using a half-duplex connection for full-duplex communication, there is the potential for collisions. However, the virtual wireless boards are capable of communicating at 19.2 Kbps, or 2400 bytes per second and we will be transmitting no more than 52 bytes per second in the worse case. The virtual wireless boards are more than adequate for our needs.

 

Collisions should not be a problem as covered in the design section of this document. The amount of traffic currently being sent over the link is minimal and collisions should occur less than once every seven seconds. Even if they do occur, the wireless kit protocol boards have some onboard collision detection and avoidance algorithms built in that will serve as a back-up.


Testing

In order to ensure our projects robustness, we will test our project each module individually.  Once each component is in working order, we will test the integration of these modules.  The main modules of our project are the sensors, RF link, RC control, autonomous control, and video link.

 

Vehicle

Communications Controller

For the first stage of testing, we created a simplified controller interfacing with two dummy device controllers.  We verified the communications controller received the correct data by viewing the output stream with Hyperterminal.  Next, we added the remaining functionality (support for the autonomous controller, computation of the status byte, and integration of the third device.)  We then integrated the dummy controller code into the device controllers to provide the communications controller with useful data and tested the entire system.

 

Sensors

Rangefinder

We will test the rangefinders in several stages.   At first, we test one rangefinder connected to the 8051.   This allows us to determine if our code for configuring the 8051 is correct.  We are using Hyperterminal and the serial port to communicate with the 8051’s transmit and receive pins.  This allows us to retrieve any relevant data from the rangefinder such as the distance to the target.  By physically measuring the distance from a given object and performing some calculations, we can determine if the values are increasing at the rate we expect them to increase (these values should increase linearly.)  We use Hyperterminal to test our ability to turn on and off the rangefinder (we do not want to have all three of the frontal rangefinders firing at once) by embedding a case statement in the rangefinder program that allows us to switch between two states upon a given key input.

 

After completion of the first stage, we integrate the additional two rangefinders into the array, for a total of three rangefinders.  Although the additional rangefinders are tied to different interrupts, the setup for them is essentially the same as the timer 2 external interrupt, making this part of the integration simple.  To toggle the rangefinders on and off, we use six different inputs from the keyboard.  Again, we use Hyperterminal to determine if we are getting the correct distance values from each of the rangefinders. 

 

For the third stage of testing the rangefinder, we configure the system to automatically switch from one rangefinder to the next.  By using an oscilloscope, we monitor the response of the INIT line on all three rangefinders and determine the order in which they fire.  This portion of testing is not as difficult as the previous two sections.

 

Lastly, we modify the rangefinder code to place its output data on the pins in the 8051’s port 0 according to the protocol specifications outlined above.  To make sure we get the correct data for all three rangefinders in the correct order, we hook up a logic analyzer to port 0 and examine the results.  To make sure we get consistent data, we place cardboard obstacles at fixed distances from each rangefinder.  If we get different results (equating to more than a few inches distance,) we know that the data has been placed on the pins incorrectly because the first two stages verified the correctness of the range. In this way we will debug the system.

 

Accelerometer

The accelerometer is easier to test than the rangefinders. This is due to the pre-calculated values we have from the data sheet for the accelerometer.  To test the accelerometer, we mount the accelerometer onto a breadboard, and fixing the breadboard to some flat platform (piece of plywood or thick cardboard).  By using an oscilloscope, we measure the difference in the high time between T2 and T1.  Once we have those values, it is a simple matter to compare them with the given values given on the accelerometer data sheet.

 

Once we finish that stage of testing, we integrate the accelerometer with an 8051, and convert the T2 and T1 values into a 16-bit integer value.  We can see that everything is working correctly by connecting a logic analyzer up to the 8051, and examining the outputs.

 

Autonomous Control

There are three main stages in testing for autonomous control.  At first, we have the tank perform a pre-planned sequence of moves.  This allows us to test that the 8051 microcontroller can truly control the tank.  Since we know the sequence of moves we programmed onto the 8051, we can easily determine if it is following those directions.  The sequence of movements would be in one-half second intervals: move forward, turn right, move backward, and turn left.

 

The second stage is to test the rangefinders in conjunction with the autonomous control.  If the tank gets too close to a wall or object, it should stop and turn to a different direction before continuing.  We can test this by placing the tank on its mount, so the treads do not touch the ground, and placing our hands near rangefinders.  This creates a reaction by the autonomous controller, and we can verify the treads are moving in the correct manner.  Once we have verified correct tread movement, we will put the vehicle in a confined area such as a cubicle and seeing how it reacts.

 

The last stage is total autonomous control coupled with user input.  To test this, we start the vehicle in user mode and move it to a random location, then turn on the autonomous control and make sure it is reacting as we defined.

 

Base Station

Keyboard Module

Testing the keyboard module was very simple. As each portion of the module was built, we ran the outputs out through the expansion header and verified them with the logic analyzer. When the last section was in place and verified, the final test was to hook the RC controller up to the pins and see that the tank moved the way that we wanted it to. This test proved successful.

 

VGA

The VGA module we use in our user interface was taken from last quarter’s CSE 467 resources.  Since all three members of the team were familiar with the VGA interface, we were able to get it fully functional without any problems.  Next we created a simple GUI which provided a layout for information about the mode the vehicle was in and what data the vehicle was sending back while not actually displaying any streaming data.  We then integrated the data coming from the vehicle to show the user the conditions the vehicle was sensing and tested this by setting the vehicle in a well-defined environment and recording the readings.  The environment will be small and not include any small obstacles, only walls and a ramp to test the accelerometer’s measurement.

 

RF Links

Video RF

This stage has been verified.  Since the video RF was pre-made, our testing consisted of hooking it up to a TV, and seeing if we could get a picture.  Testing for video RF range will be done in conjunction with the testing of the RC tank range. The camera will be mounted on the tank and we will send the assembly varying distance from the base station. This gives us an idea of how accurate the specified range of 50 feet is.

 

Virtual Wireless Link

We already completed some testing of the RF link.  We tested how the RF link handles overflow and/or collisions.  We tested the RF link by using the DOS program that came with the Virtual Wire Development kit.  We found out that the RF link loses data in the case of a collision, but with our system configuration, this should not be an issue.

 

RC controller

To test the RC controller, we first used it in its original form, testing its functionality without modification.  After verifying this phase, we opened up the casing and attached wires to the switch endings so we could create shorts across the switches.  We then interfaced these wires to the transistor network.  By controlling the voltage on the base, we successfully created the same functionality as the original unmodified controller, but with a digital interface.

 


Design Issues

The remaining design issues include the integration of the Virtual Wireless kit into the project, the communication between the Atmel chips and some of the other components of the system, the mounting of all the equipment on the vehicle, and some minor issues with the autonomous control device. In this section we will discuss each of these issues in turn and discuss ways that we plan on dealing with them.

 

Virtual Wireless Kits

The new Virtual Wireless Development Kit (DR-1200DK) is currently untested regarding compatibility with the old Virtual Wireless Development Kit (DR-1004DK).  We are familiar with the old packet format specified by the DR-1004DK, and the change to the new Development Kit may require some minor changes to our existing code. 

 

Mounting

When mounted on the tank cover, the sonar rangefinders receive returns from the floor at about 5 or 6 feet. This is a problem. One solution is to mount the rangefinders at an angle with the floor so that they have more range.   We also may encounter space issues when integrating all systems onto the tank.

 

We are currently using 7 breadboards to implement all the systems on the vehicle.  The tank does not have enough flat surfaces to accommodate all 7.  A possible solution is to create multiple layers of breadboards on the vehicle.

 

Autonomous Control

The autonomous controller will function correctly in theory, but it remains to be seen if it will do so in practice.  The accuracy of the rangefinders have not been tested under moving conditions and the flow of data from the rangefinders to the autonomous controller has yet to be implemented.  This could possibly produce erroneous behavior from the autonomous controller.  We are confident that if we implement the controller according to our specification and pay careful attention to these details, the autonomous controller will function correctly.


Response to Reviewer Comments

Movement

From preliminary design description, it is not entirely clear how the transitions happen between manual and autonomous control.  This functionality should be specified for all possible conditions, especially since the mode change can be triggered manually or automatically.  Also, care should be taken to ensure that the servo motors are never driven simultaneously by conflicting signals.

 

The user changes between manual (interactive) and autonomous control by pressing the space bar.  The vehicle cannot automatically change between modes.  When in interactive mode, the base station retains a small amount of control by stopping forward or backward movement of the vehicle if it is too close to an obstacle.  We chose to do this because the camera does not need to point in the direction of movement and the user could quickly approach an obstacle without knowing.

 

In the design of our verilog control module and our autonomous controller, we specifically disallow any combination of outputs that could result in illegal servo states regardless of the inputs to the systems.  This guarantees that we will not turn a servo on in both directions, thus saving the vehicle from harm.

 

Another issue regarding autonomous mode is how the vehicle goes about recovering a signal control signal that has been lost.   The design states that the vehicle will reverse direction in an attempt to regain the control signal.  This implies that there must be some notion of reverse.  How is this achieved?  Is a history of past motion maintained to allow for backtracking (perhaps a technically challenging approach)?  What if the vehicle is powered up initially and there never is a command signal from the beginning?  This particular functionality needs to be better defined.

 

In autonomous mode, the vehicle never goes backward during normal operation.  Therefore, we always know which way is reverse, because the vehicle is either moving forward or turning.  If the vehicle is turning when it goes out of range, no backtracking will be attempted.  If the vehicle is moving forward when it goes out of range, it will back up until it is in range or discovers an obstacle.  We will not implement any mapping functions into the autonomous controller.  Also, if the vehicle is out of range on power-up, the vehicle will not move.

 

Finally, manual movement commands are sent over existing the RC link.  Originally, the user would manually manipulate switches to send the signals.  Now the XSV hardware is reading keyboard input in order to send the same signals.  How faithfully does this mimic the original controller?  For example, how long does a single command stay in effect?  The original controller was a switch that would be shut for a certain amount of time and then released.  Can such events be reproduced or will the output from the XSV hardware resemble a series of pulses instead of a steady signal?

 

The keyboard input is performing the same action as the manual switches. When the user presses a key, the keyboard sends the system a byte code that is interpreted by a verilog controller. This controller asserts the control line that corresponds to that particular key. As long as the key is pressed, this line will remain high. When the user releases the key, the keyboard will send a different signal indicating its release, which will again be interpreted by the verilog controller and the line will go down. This means that as long as the user presses the key, the action is preformed it is continuous.

 

Sensors

The sonars are arranged in two banks of three transceivers each: one bank in front and one in back.  The design carefully addresses the issue of interference between individual sonars in a bank, but interference between banks is not considered.  Is there a possibility that a pulse from one bank could be detected by the other, especially in a small, crowded environment?  One simple way to prevent possible inter-bank interference is to use a bank-enable signal.  Since the sonars are used for collision avoidance, only the bank associated with the direction of motion could be active.  Since forward and reverse motion is mutually exclusive, the sonar banks are guaranteed not to interfere.

 

As shown in our rangefinder design section, the sonar pulse can only be detected up to 60 degrees to either side of center.  The rangefinder will not pick up any signals coming from behind.  Also, any signal that is reflected back and then reflected off another wall has not provided any problems experimentally.  We chose not to use the suggestion of a bank-enable symbol because we want to display as much information about the surrounding terrain as we can at all times.

 

Finally, the electrical parameters of the sonars are mentioned in the design, especially with regard to power consumption.  The specifications for the sonar indicate that the device can experience maximum currents of over one amp. This high current must surely be limited to a short period of time (e.g. when firing a pulse) and should not be a significant concern regarding power consumption.  However, this high instantaneous current could result in a significant drop in power supply voltage.  Such fluctuations in the power supply can seriously affect the overall system.  To avoid these potential problems, appropriately sized capacitors should be used on the power supply to the sonars.  In addition, adding these capacitors will affect the rate at which the sonars can be repeatedly fired.  This increased time delay should be considered.

 

We are using decoupling capacitors in our design.  We currently have 245 mF of capacitance across our power supply.  When we fire a rangefinder, we see a 1 ms drop of .5 volts.  This is within the Atmel’s power tolerances, so it does not reset upon firing.  Assuming a 5 ohm resistance on the power line (an overestimate) the capacitors if fully discharged, would regain 95% of their charge in 3 time constants 3 * (5 * 245 * 10^-6) = 3.68 ms.  We are firing a rangefinder once every .167 on each array.  The electrical requirements are well below our functional requirements used to ensure against false returns, so no further delay is necessary.

 

RF Communications

One of the issues that the project design deals with is the collision of packets over the RF link.  In general, this issue is handled by the Virtual Wire system’s firmware implementation of its radio packet system.  The details of the packet system are dependent on the operating mode of the Virtual Wire system, but packet collision avoidance can be had for free.

 

We have not created a complicated protocol for dealing with collision avoidance; we simply provided a proof that our system will work even if no packet collision is implemented.  The addition of packet collision avoidance in the firmware can only help our worst-case analysis.  A packet slightly delayed is much better than a packet lost.

 

Also, line-powered RS-232 transceiver is used to interface to the Virtual Wire board is unnecessary.  The board itself has such a chip which can be removed from its socket and jumpers can be used to connect the signal paths directly.  This would allow direct logic-level interfacing to the Virtual Wire boards.

 

We agree with this comment and decided to remove the line-powered RS-232 transceivers from our design.  In addition to being unnecessary, we also found our design would fail if they were used.  After looking at the transceiver more carefully, we discovered they operate by stealing current from the other end to use in its transmission.  In our former design we had two transceivers attempting to steal current from each other.  By removing them and communicating on logic levels, we no longer have this current problem.

 

Video Decoding and Display

The first issue is the process used to convert the YUV signal to RGB.  The method described in the project design may be prohibitively expensive in terms of the amount of time needed to convert an image frame to RGB.  One possible approach is to sacrifice some precision of the pixel data and use a static lookup table to perform the conversion.

 

Although we are dropping the video pass through on the XSV300 board, we did give this some thought.  The Y signal in YUV format is luminance.  The reason the broadcasting industry created YUV format was to imbed color information into a television signal without disrupting the black-and-white signal already there.  The Y is the black-and-white signal.  We could ignore the U and V bytes and process the Y signal by using a lookup-table rather than performing a transformation on the information.  We would initialize the RAMDAC with 256 shades of gray and display this image, thus eliminating the costly computation.  This also removes the problem of how to get all three bytes of the RGB signal into the RAMDAC in one cycle’s time.

 

Once the image data is converted to RGB, the issue of displaying it arises.  The project design document mentions the possibility of double-buffering the image data. However, if one of the expansion headers on the XSV board is being used for I/O, the SRAM bank on that side cannot be used.  That leaves only one SRAM bank, which doesn’t allow simultaneous read and write operations.  One possibility is that the flash RAM could be used for buffering as well, but it may interfere with the serial port since they share electrical connections through the CPLD.

 

We now realize that double buffering is not an option.  The Flash RAM provided on the XSV300 board is too slow to be used for double buffering.  It has a read access of time of 85 ns and the board must run at a minimum of 25 MHz, or a 40 ns period.  It takes over 2 cycles to read information from the Flash.  Also, we are using one of the expansion headers for interfacing with the RC controller.  This leaves one back of SRAM, which provides 8 Mbits of memory.  Even if we dropped every other row and column, we have 360 x 263 = 94,680 pixels yielding 757,440 bits at one byte per pixel.  This is small enough to be stored in one SRAM bank, but we would be overwriting the image as we attempted to display causing not only a discontinuity on the screen, but read and write access conflicts.  In order to implement double buffering, we would have to free up the other SRAM bank, which is not an option for us, as we need the pins to interface with other parts of our project.  We must process the video real-time.

 

System Integration

Our concern with overall system integration is specifically about the interfacing of the five 8051 microprocessors.  There is a protocol in place for handling state of the system and the flow of data between processors, but it seems quite complicated and may be sensitive to timing issues.  We think that in the end, the system could work as described (we could see no obvious flaws) but perhaps a different approach to dealing with the inter-processor communications could be used.  One possible alternative would be to use the I2C protocol for communications. 

 

We considered using an I2C protocol for communication between the Atmels initially, but decided against the option for several reasons.  First, the I2C chip has a maximum clock rate of 12 MHz.  We would have to slow down our chips by 20 MHz in order to satisfy this constraint.  Second, an I2C bus is slower than our protocol.  While we are not sending large amounts of data, we would like to give the device controllers as much time as possible for their computations.  Finally, we did not want any extra chips on the vehicle we could do without.  We are already running low on space for the other components and do not have room for 4 more 20 pin DIPs.


Technical References

XSV Board manual version 1.0, a local copy can be found at http://www.cs.washington.edu/education/courses/cse477/CurrentQtr/admin/Handouts/xsv-300/xsv-manual-1_0.pdf

XL210 evaluation board manual (for the accelerometer) http://www.analog.com/techsupt/eb/xl210eb.pdf

XL202 accelerometer data sheet

http://www.analog.com/pdf/ADXL202_10_b.pdf

Virtual Development Kit Manual, DR 1004-DK and DR 1005-DK

Atmel AT89 Series Hardware Description Manual

Atmel 89C55 Manual

Fairchild Semiconductor 2N3906 PNP General Purpose Amplifier Data Sheet

Dallas Semiconductor DS275 Line-Powered RS-232 Transceiver Chip Manual

Analog Devices ADXL202 Dual Axis Accelerometer with Digital Output Data Sheet