What We Know

After scouring the internet for more information about how the RoboPet works, we have learned one thing: there is very little information about how the RoboPet works. This is likely because of the existence of the RoboSapien at the same time. RoboSapien was a better robotics platform and attracted all of the attention and glory.

For convenience, we’ve accumulated all of the stuff we know about the RoboPet here. Some of this comes from other source, some from our own experimentation.

Overview

The RoboPet was designed and programmed by the legendary Mark Tilden.

The RoboPet can run autonomously and is controlled by a 13 button infrared remote. When powered up, the robot is operating autonomously. Using the remote, you can direct it to perform various actions, “train” it, or record a series of up to 20 actions to be replayed on command.

The RoboPet runs on 4 AAA batteries in series, providing 6 volts raw power. It contains 5 motors and gearboxes (one for each leg and one to twist the waist.) Each gearbox is equipped with a position sensor. It also contains 3 infrared transmitters and one infrared receiver, all located in its head. There is a microphone between its front legs and a speaker located between its rear legs. In addition, there is a simple tilt sensor inside.

Its CPU is a custom 16 bit RISC processor that contains 512k of audio, 12k of programming, and 128 bytes of RAM. There is no persistent storage on board.

You can see photos of evolution of the RoboPet here.

Circuitry

There are three circuit boards: the mainboard, the power board, and the tilt sensor board. Nocturnal over at EvoSapien has compiled a wonderfully complete diagram of these boards and their connections. Head over there for those details.

IR Communications

Protocol

RoboPet uses the RoboSapien V2 IR protocol. The carrier frequency is 39.2 KHz, but carrier modulation and demodulation are done by the IR components themselves and so we can ignore it. Data is signaled by pulse encoding with a pulse time of 1/1200 of a second (about 0.833 ms).

NOTE: Although the pulse rate is supposed to be 1200 HZ, the RoboPet’s remote can vary from it a lot. Further, the amount of error a remote has will vary over time. Any code or circuitry that will be handling the remote’s transmissions will have to be very tolerant of speed variations.

The transmission protocol used is as follows. Data is sent as a string of bits, most significant bit first. There are 12 bits per command. “Signal” refers to the binary output from the IR receiver or binary input to the IR transmitter.

  1. When no data is being transferred, the signal is HIGH.
  2. A new command is signaled by taking the signal LOW for 8 pulse times (about 6.66 ms)
  3. A bit is sent
    1. If the bit is 0, the signal is taken HIGH for 1 pulse time.
    2. If the bit is 1, the signal is taken HIGH for 4 pulse times (about 3.33 ms)
    3. The signal is taken LOW for 1 pulse time.
  4. Step 3 is repeated until 12 bits are sent.
  5. The signal is taken HIGH.

Commands

Every command is 12 bits long. The first four bits identify the type of Wowwee robot the command is intended for. We know of six of these codes, but our information is old and there is likely to be more.

0000: RoboRaptor
0001: (Unknown)
0010: RoboPet
0011: RoboSapien V2
0100: RoboReptile
0101: RS Media
0110: RoboQuad

Therefore, every command that we’ll be dealing with starts with 0010 (0x2). Here are all the possible commands that we know of (in hexadecimal):

0x280
Turn right (from the robot’s POV)
0x286
Walk forward
0x287
Walk backward
0x288
Turn left (from the robot’s POV)
0x28E
Stop. Will complete action in progress first. If standing, will sit down. If sitting, will stand.
0x2C1
Sleep/Wake. Repeatedly send this for ~5 secs to activate. Toggle’s the robot’s low power mode.
0x2C3
Guard. If not in guard mode, will sit down for 30 mins, then go to sleep. If sound or motion happens near it before sleeping, it will stand up and make a lot of noise, then sit again. If in guard mode, takes the robot out of guard mode. If the robot pants and barks, somebody bothered it when guarding. If it just stands, it was left alone.
0x2C4
Reward. Sending this command after the robot does an autonomous trick (not commanded or programmed) makes it more likely that it will do the trick again. This command is cumulative.
0x2C5
Punish. Sending this command after the robot does an autonomous trick (not commanded or programmed) makes it less likely that it will do the trick again. This command is cumulative.
0x2C8
Demo. Pretend you’re at the store!
0x2E1
Roll over
0x2E2
Play dead
0x2E3
Howl
0x2E4
Paw
0x2E5
Urinate
0x2E6
Jump
0x2E7
Fart
0x2E8
Rock
0x2E9
Scratch
0x2F0
Program. All commands sent after this are acknowledged with the robot making a small noise and remembered. Send the program command again to exit programming mode. Programming mode ends after entering 20 commands as well. To replay the sequence, send this command again twice.