Thursday, July 28, 2011

In Stock: Factory Fresh Gyros

We now have a limited supply of Power and Sensor Boards with Gyro for the TurtleBot. More are on the way soon.

Wednesday, July 27, 2011

YMTA: Laser Mounts for TurtleBot

Here are the latest results of our continued research on TurtleBot accessories. They are based on the philosophy that everything is better with lasers.

This is a prototype mounting adapter for the Hokuyo UTM30-LX. The required heat sink is in the process of being manufactured and should be available in a few weeks.

The first iteration of a mounting adapter for a Hokuyo URG-04LX-UG01, shown here with speaker mounts, will also be available in the next two weeks from the I Heart Engineering store.

Monday, July 25, 2011

Robot Film Festival

Researchin' from David Lu on Vimeo.

David Lu! presents this heartwarming tale of research at the Robot Film Festival.

Check out the rest of the films here.

Arduino Mega ADK Setup Notes

If you try using the Arduino Mega ADK with the default DemoKit code, it will hang during initialization if you do not have all of the same sensors attached.

The following code is a simplified version of the Arduino DemoKit code that connects the built-in LED on pin 13 to the Relay 1 button in the Android DemoKit application.

#include <Max3421e.h>
#include <Usb.h>
#include <AndroidAccessory.h>

#define  LED1         13

AndroidAccessory acc("Google, Inc.",            // Manufacturer
                     "DemoKit",                 // Model
                     "DemoKit Arduino Board",   // Description
                     "1.0",                     // Version
                     "",  // URI
                     "0000000012345678");       // Serial

void setup();
void loop();

void init_led()
  pinMode(LED1, OUTPUT);

void setup()
  Serial.print("\r\nADK Started\r\n");


  // Power On Android Accessory interface and init USB controller

void loop()
  byte data[3];
  if (acc.isConnected()) {
    int len =, sizeof(data), 1);
    if (len > 0) {
      if (data[0] == 0x3) {
        if (data[1] == 0x0) {
          digitalWrite(LED1, data[2] ? HIGH : LOW);
          Serial.print("Toggle LED\r\n");


Friday, July 22, 2011

TurtleBot: Yet Another Robot Accessory

Did you know that robots like to rock out? It's true, just look at how many dancing robots there are. Keeping this in mind, we continue to investigate possible robot accessories for the TurtleBot.

Today's accessory is perfect for a stylish 21st century mobile robot who is ready to party and your robot will always be ready to party with these USB powered speakers and speaker mounts.

If you are interested in building your own, the files and a tutorial are available here.

If you want to buy this or any of the other TurtleBot accessories, you can check out the store, or email sales at I Heart Engineering.

Also, if anyone out there has musical talent,  we could use a theme song for the TurtleBot.

OpenSCAD Tip: Scan into SCAD

Making complex geometry with OpenSCAD can be a painful but there are some tricks to making the process easier. This tutorial will show you how to use a scanner to build speaker mounts for a TurtleBot.

We selected the Logitech Z110 Stereo Speakers for affordability and aesthetics, however one issue that was quickly noticed is the lack of screws.

Therefore we are going to build an adapter to attach to the bottom of the speaker that will provide a mounting point. The adapter will need to fit into the curved groove that previously held a foam pad. One option for making a plastic part that fits into the groove would be to make several measurements and attempt to reproduce the curve. Another approach would be to take a photo and model the curve with the photo as a reference. The easiest approach however is to use a regular flatbed scanner to scan the bottom and then vectorize the scan.

The speaker is placed on top of the scanner and scanned into GIMP. Once imported, the select tool can be used to extract the needed curve data. The levels can then be adjusted to produce a crisp outline.

Once a clean raster outline of the needed curve has been obtained, we can save the image and proceed to vectorization.

Next, import the image into Inkscape.

Select the bitmap object and select 'Path > Trace Bitmap...' from the menu.

Adjust the options if needed and execute the tracing operation.

After tracing is completed there will be both a raster version and a vector version, separate the objects a delete the raster version.

Select the nodes of the object and select 'Path > Simplify...' from the menu.This will smooth out the rough edges. At this point you can manually edit the curves if desired.

Since the DXF export in Inkscape is limited and support for DXF in OpenSCAD is limited, the normals of the curve data are not preserved and the curves must be converted into a series of straight line segments.

Select the nodes and press the 'Insert new nodes into selected segments' button on the toolbar. This tutorial might also be helpful for the rest of the process of getting the curves into OpenSCAD. Press the button a few more times until the curves have plenty of points.

Next, press the 'Make selected segments lines' button on the toolbar.

Now rotate and rescale the curves until they are 1:1 scale. It might be useful here to print out a copy and compare it to the actual part.

Next open the document properties and select 'Fit page to selection'. Once that is done, save the document as a 'Desktop Cutting Plotter (R13) (*.dxf)' file.

For this project we also created a version of the curve data with the center filled in to use as a base. This data is also saved in DXF format.

Now it's time to start up OpenSCAD!
translate(v = [0,248,0]) {
linear_extrude(file = "edge.dxf", height = 1.5, center = false, convexity = 10, twist = 0);

Importing the DXF file is fairly straightforward however there are a few things to keep in mind. First, the curves may be extruded in an unexpected position of oritentation, so you may need to zoom out or rotate the view to find them, and it will take a little experimentation to move the curves where you want them. Next, If you edit your curves in imperial units in Inkscape they will automatically be converted to metric in OpenSCAD.

As usual, the source files for this project can be found on Thingiverse.

The results with #6-32 nuts installed.

Snap fit tolerance on the first try! The center hole provides a point to fill with hot glue to attach the part more securely.

More details and pictures of it in action here.

Wednesday, July 13, 2011

In Stock: Arduino ADK

It has been a busy week over at I Heart Engineering, and we are please to announce that we now have Arduino ADK boards in stock for immediate shipment.

The Arduino ADK is based on the Arduino Mega and provides a USB Host interface to allow the microcontroller to be connected to an Android based cell phone. The ADK API Documentation can be found here.

If you are looking at building an Android cell phone based robot, this is the board for you. More Information and tutorials will be linked here when available and the board can be purchased from the I Heart Engineering store.

BYOT: TurtleBot Power and Sensor Board with Gyro

Are you building you own TurtleBot or waiting for the production version of the Power and Sensor Board with Gyro to become available? Well, on today's episode of Build Your Own TurtleBot we will be showing you how to build a power and sensor board.

The board provides a 150 degree/sec yaw gyro and 12 volt regulated power for the Kinect. Note that the voltage regulator has an enable pin so that it can be automatically disabled to stop the Kinect from pulling more current than the charging system is capable of providing.

To make this widely available we implemented  a single sided version of the TurtleBot Power and Sensor Board with Gyro in Eagle, and made it available here, along with instructions for modifying a Kinect power cable for compatibility.

There are other ways to do this but we use the PCB "Fab-In-A-Box" from PulsarProFX to make the process quick and painless.

Once your circuit board is designed print out the design on Toner Transfer Paper taking care to make sure that the printed design is a mirror image of the desired pattern and printed on the shiny side.

Depanelize the paper circuit boards and cut out single sided copper clad fibeglass boards to the desired size.

Scrub the copper surface briefly to remove oxidation and optionally wash briefly with a degreaser.

Insert the board into the laminator with the printed circuit facing the copper. After the first pass, rotate the board 180 degrees and reinsert into the laminator.

Soak the Toner Transfer Paper off of the boards.

Cut the Toner Resist Film to the needed size with a bit extra to fold over the end. The Toner Resist Film makes the toner less permeable to the etchant and improves the final results.

Insert the board into the laminator, while working to keep the film fairly smooth.

Again after the first pass in the laminator, rotate the board 180 degrees and reinsert.

You may find that there is excess resist left behind by this process.

To clean up the resist, apply a piece of low tack masking tape, the type often used by painters.

Removing the tape gently should remove the excess resist.

Next, put on some rubber/latex/nitrile gloves, some safety glasses and get ready to etch! We will be using the plastic bag technique, which is a variant of technique #2 shown here. Place your circuit board inside a ziplock bag with a small amount of etchant and seal the bag with most of the air removed.

Rub the board gently to ensure the fresh etchant is always in contact with the board. In terms of fluid dynamics, you are fighting the no slip boundary condition to remove used etchant and supply fresh etchant.

The process is faster than the time is takes to get bored, and you can easily check the progress by holding the bag up to a light.

This is the resulting mess created by etching four boards and the used etchant has been placed in a sealed glass container for resue.

To remove the resist, the boards are soaked in acetone and scrubbed gently.

Etching is now completed.

Optionally you can silver plate the boards using Cool-Amp plating powder for improved performance.

Use a moist high strength paper towel and rub the powder on to the circuit boards.

The silver plating improves conductivity and solderability.

Next, drill the holes needed for the through hole parts and contemplate why everything is switching to surface mount. I found that a #65 drill bit worked well but your mileage may vary.

Begin soldering the surface mount parts starting with the 0805 capacitor. A boom microscope may be helpful for this process.

Here is what the parts on the top should look like.

Next mount the pin header on the bottom taking care to keep the pins straight.

 Next, mount the gyro upside down with the top of the gyro flush against the bottom of the circuit board. This configuration makes the board single sided and helps ensure that the gyro is parallel to the circuit board.

Here is the finished boards with a Micrel MIC29151-12WT voltage regulator mounted upside down on the top of the board. The regulator is bent face down after the heatsink is attached to ensure good airflow.

If this seems like too much work you can always order it along with other TurtleBot parts here.