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.

Improvements in Rev 2 of the Rover:

  • Much lighter since a 2nd 9.6V battery was in the black box. Also more stable and not top heavy.
  • Has a clean top deck where I can add solar panels or more instrumentation later. This also just looks a lot prettier than that black box.
  • All control electronics are inside the main chassis. Better protected from dirt, and no external ribbon cable.
  • 6 IR Ranging sensors vs. previous 4 for better obstacle avoidance
  • Mission control is now a Visual Basic based GUI where I click buttons rather than manually type serial commands.
  • Camera pan is done with a single pan/tilt assembly. Before I tried to use the tank's turret for panning. Too coarse.

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 system.

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.

Source code:

mars_rover4.bas - Rev4 of the code for the Mars Rover board. Written in BASCOM BASIC.

delay_modem.bas - the code used in the DARC Board/RF modem box to introduce 5 second delay.

Video Clips (Windows Media File format):

Rover driving outside and inspecting underside of my vehicle (4 Megs)

Same clip as above but lower quality (1.7 Megs)

Rover exploring the kitchen (1.6 Megs)