Monday, August 6, 2007

Little Brother roams the Earth

Little Brother is a humanoid robot that I put together while I was taking the Real-Time Systems course (i.e., COMP4550) at the University of Manitoba. The design was proposed by Prof. Baltes while he was teaching the course. The firmware of the robot was actually one of the assignments we had to complete but the students were not required to put together a robot. I was able to do so with the help of Prof. Baltes.

A Humanoid Robot for less than $70?


Yes, that is right. The idea was to build a simple and cheap humanoid robot. As a result, Little Brother does not stack up to its bigger brothers from the Autonomous Agents Lab. But its design is surprisingly flexible and it is a cool platform on which to develop other simple projects. Nuff said... Here is the robot walking:


Little Brother walking - Front View:






Little Brother walking - Side View:





Bill of Materials:


This is what I used in the project:

  • New Bright 6V NiCd Battery Pack

    Anything similar will do. They are only used to power the servos. The Butterfly carries its own battery.






  • Servos - Hitec HS-311

    You should be able to use any other servo you may run across






  • ATmega169 on board the AVR Butterfly

    The brains of the beast







That is pretty much it. You will also need some wires to hook up the battery pack, the servos, and the avr butterfly. The body of the robot can be built using a variety of materials. I have chosen aluminum and an old CD-R. Check out the pics:








Wiring it up:


The wiring for the robot is very simple. The battery pack is only used to power the servos. Therefore, the GND and VCC of each servo should be connected directly to the battery pack. This takes care of supplying power to the servos. In order to control them, we have chosen to use pins PE[6..4]. They are made available in the AVR Butterfly board via J405. You may want to check the schematics of the AVR Butterfly before soldering the wires. You will also need a fourth wire going into the board. This wire should connect the ground of the board and the ground of the battery pack in order to make sure that the control signals from the microprocessor are not fluctuating. This picture shows the wiring in detail:





The Firmware:


All the code was developed on Linux (Ubuntu v6.06 - Dapper Drake) using AVR-GCC. I built the toolchain from scratch because I did not have much luck with the versions I got from the repository. The versions I used are:

  • GNU AVR-GCC 3.4.6
  • GNU Binutils 2.17
  • GNU AVR libc 1.4.5

You can find a copy of the source code here. Inside of this archive, you will also find the original text of the assignment (assignment_description.html), which describes much of the source code. The code includes files written by me and files released by Atmel with the AVR Butterfly (e.g., the lcd driver).


Acknowledgments:


Many thanks to Prof. Baltes and the folks at the Autonomous Agents Lab for all the help. Be sure to check their websites as there is loads of interesting info available there.