My mock up of a Mars Rover, based on a toy tank. Video Clips of Rover
driving around my house and yard are at bottom of this page.
New and improved version shown above. The old version with the ugly black
box on top is shown below.
Mars Rover Bot - The Tank Cam grows up.
Most of these photos have larger versions available that you can access
by cliking on the picture.
On another project page I have photos and video clip of the first use
of this tank I bought at Toys R Us about 2 years ago. You may recall
then I just took off the turret with gun and GI Joe at an M60 and replaced
it with an X-10 wireless camera duct taped to the top. Last time we
saw this, it was under my deck looking for base balls.
Reborn as the Mars Rover now, behold. I have switched over to a small
sized wireless camera mounted onto a pan and tilt assembly. Both the
camera and pan/tilt assy, I bought through Super
Droid Robots. The camera is a 1.2 GHz model with 380 lines of resolution.
Not bad for the $65 I spent on it. It runs on a 9V battery which makes
connection very simple. The 9V is stored at bottom of the vertical mast.
Remote control is now done via the Maxstream RF Modem, model 9XCite.
This is a 900 MHz RF Modem. I bought the 9600 BAUD version and found
the range to be quite acceptable for my purposes. I can control the
tank remotely using the camera (and built in microphone) for feedback,
similar to the real Mars Rover. At the mission control I add a 5 second
delay to simulate the delay seen by the actual rover and its controllers.
The video signal from the bot is also delayed 5 seconds. It made exploring
my kitchen an interesting problem that took almost an hour.
Below is a block diagram of the bot as it exists currently. The DARC
Board is the brains, taking inputs from the IR range, Sonar range, and
temperature sensors. The RF Modem is a bidirectional link to the command
station providing both input in the form of command and output as data
is transmitted back to the control station from the various sensors
on demand. The sensors can also trigger an automatic transmission when
a command to move is in conflict with the sensory data that is collected.
For instance if I tell it to drive forward 30 cm and the IR Ranging
sensors detect an object ahead in 10 cm it will send me a proximity
alert and abort the command. I can override this though I use the video
camera carefully to survey before doing so. Notice the video camera
is not included in the system diagram as it operates completely independently
from the DARC Board and other circuitry including its own power supply.
The video data is in no way fed back into the system as the other sensors
are. The RF modem has a max 9600 BAUD which is to narrow a bandwidth
to send video data.
Block Diagram of the Mars Rover system
The brains for this bot is a DARC
Board running the program that I attach below written in BASCOM.
As it stands right now I can control the driver motors, and camera pan/tilt
only using 23% of available code space in the Mega8535. For anyone running
the free download version of BASCOM the 2K limit comes at 25% so this
will work. The full version of software currently with sonar/IR/temp
sensor and 2 way communication is at 42% (just under 4K).
More before and after. I show the before design of the control electronics
in the ugly black box.
The turret motor was very coarse control so when I used it to pan the
camera view I would most often overshoot the intended viewing angle.
The new and improved version brings all the control and communication
electronics inside the chassis of the tank.
In the guts shot above are visible, left to right, RF Modem, DARC DMC
(motor control) board, and the main brains, the DARC Board. Both photos
have larger views that you can see by clicking on the image.
The top of the rover now sports a nice flat surface by bolting on a
sheet of 1/4" expanded rigid PVC. I used 1/8" PVC to make
the mast which holds the camera pan/tilt assembly, sonar sensor, and
LED headlights. A door at the bottom affords quick access to change
out the 9V battery. A hole pierces the rover's top cover to allow the
wiring harness necessary to control the pan/tilt servos. I marked out
a grid showing 10 mm increments to help in measuring distances when
viewing camera images at mission control. I have to tilt the camera
down to include this view of course. I can tilt the camera up to almost
60 degrees above horizontal and down to about 45 degrees below horizontal.
The sonar rangefinder is mounted with the camera so any sonar range
data that I get is aligned with where the camera is looking, as opposed
to the 6 IR rangefinders which are fixed and looking out level with
the top surface of the rover.
A 9.6V rechargeable NiMH battery is in the comparment accessible from
the bottom (fits right in after some Dremel action).
Radio Link: The RF link is accomplished via a pair
of the Maxstream 9XCite 900 MHz
Wireless modules. Clik
here to download data sheet for the module. Clik
here to download the user manual. These are $50 each and come in
a 38400 and 9600 Baud flavor. I have the 9600 version as it has longer
range. Range with the XCite module is 100' indoors (I can send from
my basement lab to the office 2 floors above no problem), and about
300' outdoors. Maxstream makes a longer range version module, the 9X-Stream
that has the same footprint.
The Maxstream modems have built in error correction, so for simplicity
I do not do an error checking algorighm with my communications interface.
Tests so far have shown that I don't need it and since I don't actually
send this bot to another planet I can afford a little bit of error.
I have updated the command interface to be done with a GUI that I wrote
in Visual Basic. It allows me to control the rover's main drive with
forward, back, left and right buttons with a specified number of units
for each motion. I'm working on the other features of pan/tilt controls
for camera as well as grahical displays of the sonar and IR range finders
for obstacle detection. I went with a radar screen looking display for
the IR ranger and a side view for sonar. This screen capture shows the
GUI as it stands in its early stages. It shows an obstacle detected
in front and to left (this was actually one object) and gives a collision
warning in the data received from the rover. I still have work to do
on this but will post the VB source code when I have it working fully.
I'll also dress up the rather drab grahics. Not sure what functionality
the bottom center button will have yet, but my 9 year old suggested
I have it so it could be like "real robots" in the movies.
Under the GUI layer, the command interface is simple. The GUI invokes
serial commands to go out on my PC's serial port which in turn drives
the mission control RF Modem. Each serial out stream is a 3 byte packet
formatted like this:
byte1 byte2 byte3
where byte 1 is the command type byte. It can be 'm' for move (operate
the drive motors), 'c' for camera pan/tilt control, etc. The 2nd byte
is the action identifier. 'f' for forward, 'b' for backward etc. The
3rd byte is a number that specifies magnitude of the action to be taken.
Some commands only have 2 bytes, like the get sonar range command.
The repertoire of commands currently are:
- mfx/mbx - move forward/backward x units where x is a hex number.
Each unit is 5 cm distance.
- mrx/mlx - move right/left. This is a neutral (tank style) turn of
about 10 degrees per x unit.
- trx/tlx - turret left 1 unit (rotates the turret about 10 degrees)
- cd1/2/3 - tilt camera down. 1 gives about 30 degrees down, 2 gives
60 and 3 is 90 degrees down.
- cu1/2/3 - Like the cd command but this gives control to tilt up
30, 60 and 90 degrees.
- cc - camera center. Takes camera back to center vertical position.
- lo - lights ON (front headlight LEDs)
- lf - lights OFF
- gt - get temperature reading
- gs - get sonar range, return value via RF modem is range in cm
- gix - x is 1 for front left,2 for front right, 3 for rear left,
4 for rear right. return is range in cm
Still to come is a batch command where I can send a string of commands
all at once and it executes them in sequence.
Mission Control:The control station consists of 3
elements: a PC for serial commands (the laptop shown here), RF modem
with delay module (white box left of laptop), and the video receive/delay
The laptop is a new one with a fair amount of power. The serial command
out interface is dirt simple and could be done easily with a 486 processor
based machine, but the video display and delay interface requires serious
power, thus the new laptop is the one I use. It is an Averatec with
AMD Mobile 1.6 GHz processor, 512 MB RAM.
The RF modem and delay module is the matching Maxstream 9XCite mated
to a DARC Board. The DARC board receives input on its UART from the
laptop, waits 5 seconds then retransmits it out the RF modem.
The video display/delay system is done using a USB 2.0 interface device
made by ADS called USB Instant TV. It takes input through the box shown
above on S-Video or Composite inputs (audio too though I don't use it),
and then brings in the video data to the laptop over the USB 2.0 interface
(you need 2.0 to handle the bandwidth for video). The software that
is included gives the ability to "time shift" the incoming
data, buffering the incoming data onto the hard drive while simultaneously
displaying on the screen data recorded 5 seconds earlier. Also known
as DVR technology.