Belvedere is a robot I designed and built to serve appetizers at parties and entertain with jokes and dancing. He has the ability to navigate the first floor of our house while avoiding obstacles. Belvedere’s first job assignment was entertaining guests at our son’s first birthday! His main body sits on an iRobot Create, which he uses as a drive system. Here is a list of his main features:

– Navigates to one of four different rooms by turning a knob on his back

– Avoids obstacles using non-contact sensors (ultrasonic and infrared)

– Uses his British voice to offer food, make comments, and tell jokes

– His flat head is perfect for a plate of appetizers or a cooler of drinks

– He will play music and dance on command with a push of a button

– LEDs on his front light up in various patterns to show he is active

– Spinning bowtie!

See below for a video of Belvedere in action!

YouTube player

This project was inspired by many other robot projects. In particular, JoeCreate’s Serverbot instructable gave me many great ideas and Belvedere wouldn’t be a reality without his impressive work and documentation.

Detailed photos can also be found at this picasa album

Project Steps


Belvedere’s main body is mounted to an iRobot Create which he uses as a drive system. The main body is made from a concrete form tube used in construction. The various circuit boards are mounted on a plexiglass table mounted firmly to the iRobot Create. The main body is also mounted firmly to the plexiglass table. Belvedere’s flat head is made from a round piece of plexiglass lined with a non-skid mat.

In order to make Belvedere more stable, I mounted an extra swivel caster on the opposite side of the caster included with the iRobot Create.

Electronic Components

Here is a list of electronic components used to create Belvedere: – iRobot Create platform – Arduino MEGA microcontroller (the brains of the operation) – Sparkfun 16×2 LCD for message display and debugging – Adafruit WaveShield used to store and produce voice and music clips – HMC6352 compass module from Sparkfun – Custom LM386 amplifier board to produce voice and music clips through speaker – 3 X Maxbotix Maxsonar EZ1 Ultrasonic Ranging Sensors – 2 X Sharp GP2D12 Analog Distance Sensors – 3 inch speaker – Hobby servo for spinning the bowtie

There are standard electronic components including voltage regulators, switches, buttons, etc.

A few custom boards were created for power and signal distribution.

Details of the Arduino pin-out can be found here.


Belvedere can run in two different modes, NAVIGATE and ROAM.

In NAVIGATE mode, Belvedere keeps track of his location on a large grid of the house. To plan his move to the next destination, he uses a WAVEFRONT algorithm. I got the idea to use a wavefront algorithm from the Society of Robots website. In order to use this mode, the floor and permanent obstacles (walls, couches, etc) must be pre-mapped into a large matrix. Also, Belvedere must be started in the same location and orientation when he is turned on, otherwise he wouldn’t have a reference.

In ROAM mode, Belvedere, will not keep track of his location in the house. He will move a few feet forward, pause for a while, turn randomly, and continue forward.

OBSTACLE AVOIDANCE: In NAVIGATE mode, Belvedere will constantly monitor his three ultrasonic ranging sensors when he moves forward. If an obstacle is detected closer than a certain threshold, he will begin to slow down gradually. If an obstacle is within 1 foot, he will stop and speak a warning. The Sharp IR sensors are used to veer Belvedere away from walls without slowing him down. In ROAM mode, if Belvedere detects an obstacle while moving forward, he will stop, rotate to a random angle, and continue forward in a different direction.

Programming Belvedere

Belvedere’s “brain” is the Arduino MEGA microcontroller. It has an incredible amount of inputs/outputs and memory for such a low-cost controller. Belvedere uses almost all of the 54 digital pins on the Arduino MEGA.

CONNECT ARDUINO MEGA TO iROBOT CREATE: Most people that add a microcontroller to the iRobot Create use the iRobot Create Command Module. iRobot engineers supply example code with the Command Module so that it can communicate with the Create over the serial connection. I needed many more inputs/outputs and more memory than the Command Module could offer, so I decided to connect the Arduino MEGA to the Create. I wired the serial communication pins between the two and converted the Command Module code to Arduino code (very similar since they are both written in C).

VOICE AND MUSIC: Belvedere’s audio clips are pre-recorded and stored on an SD card. The Arduino can access any one of the clips as needed. Belvedere has at least 50 different audio clips that are in different categories (offer food, move obstacle, joke, comment, music). Belvedere’s voice was generated by the text-to-speech software at AT&T’s Natural Voices website. You can choose gender and various accents. This website was convenient because I could directly export the file to .wav format.