Saturday, October 17, 2009

Introducing the BeagleBoard

Our first step in building BRB will be to put together a navigation system comprised of an IMU, a GPS, and a Kalman filter. Once BRB knows where it is, we will look into moving from place to place.

On the GPS side of things, we will be using a Topcon TG-3 100 Hz GPS which was generously donated by Topcon for another project. We hope this will give us plenty of data to work with.

For the "brains" of the vehicle, we ordered a BeagleBoard from Digi-Key. The BeagleBoard packs a pretty impressive set of features:
  • 600 MHz TI OMAP 3530 processor
  • 128 MB RAM
  • 256 MB NAND flash
  • Expansion port with I2C, SPI, UART
  • SD/MMC card slot
  • Audio, video, USB, and so on
This is arguably overkill for our project, but we wanted to be absolutely certain that we would not run short on horsepower.

One hitch in working with the BeagleBoard is that it uses 1.8 V logic levels, while our peripherals use 3.3 V. This can be overcome with a level translator IC. We've decided to put this IC, as well as a few other interface components, on a separate board. This keeps our design as modular as possible, so that if we want to change one part, we won't need to rebuild everything.

We have broken everything down into four boards, for the time being:
  • The BeagleBoard
  • The IMU board
  • The GPS receiver
  • An interface board
We sent the interface board off to BatchPCB at the same time as the IMU board, so we hope to have both back in the next couple of weeks. The interface board contains a mating connector for the BeagleBoard's expansion header, an ADG3304 level translator IC, a CAT6219 3.3 V regulator, and connectors for the IMU and GPS. The schematic is below:



In the meantime, I have been working on getting the BeagleBoard up and running. The first step is to get the Ångström Linux distribution installed. The BeagleBoard ships without cables or connectors, so the first thing to do is build a serial interface cable. These can be purchased, but they are easy enough to build.

It is possible to get Linux installed on the BeagleBoard using Windows, but support for this method is limited. I highly recommend working with Ubuntu. Much of the community support for BeagleBoard assumes you are using Linux, so things get a lot easier if you are.

Using Ubuntu, BeagleBoardBeginners is an excellent tutorial that will walk you through as far as booting Ångström from an SD card.

While running Ångström on the BeagleBoard is a fun milestone, you may wonder, how do I do anything with it? I found a few particularly illuminating links, which I would like to gather here.

The Beaglebot project includes loads of information on circuits and software needed to run a few servos and motors using a BeagleBoard. A quick browse through the source code will give you an idea of how things work. Basically, everything on the BeagleBoard is exposed as a device, and can be manipulated from the Linux shell, or using common C functions.

I spent some time looking for a program akin to "Hello World", and found a couple of helpful links:
  • A Make article showing how to blink an LED using GPIO.
  • A Google Groups post which takes this even further, showing you how to use GPIO, onboard LEDs, and buttons.
Finally, we are eventually going to need to run a bunch of these commands from within a C program. So how do you compile a C program for the BeagleBoard? You can do this from Ubuntu using Sourcery G++. To find the latest release, follow the "Download" link, then choose "GNU/Linux". Once you've installed Sourcery G++, look for the Getting Started Guide, which includes a small tutorial program.

Next, I want to write a small program to get the GPS running and log its output. We can then do some basic tests to quantify its accuracy.

No comments:

Post a Comment