Sunday, December 18, 2011

Cricket, the toy robot that never was

I decided earlier this year to build a robot as a gift for a young relative. I've always found Braitenberg vehicles interesting and wanted to create a mobile robot with simple sensors and the ability to switch among several Braitenberg-type "personalities" (light-following, sound-avoiding, etc.).

Thus Cricket was born.

Cricket with, well, some things working.

Turns out I underestimated the chaos of the target environment, with multiple even younger siblings running around. Only a totally bombproof gift would work - which Cricket is not.

That, plus some irritating bugs I don't feel like ironing out, means Cricket is now abandonware. But not forgotten!


Testing the light pods.

Full details and more pics after the jump.


Friday, December 9, 2011

Hot glue FTW!

How did it take me so long to discover hot glue?!?!?! Everyone else smears it on their robots and projects, but somehow it never occurred to me to try it. As an inveterate epoxy user - what a revelation!

Sure, it can get messy. But the adhesive power, the (literal) flexibility, and the absolute trifle of time it takes to set up are mind-bottling.

I just built a set of contact bumpers for a small robot in about 10 minutes, including time to mount them on the robot itself. With epoxy I'd still be waiting for the bumpers to set up, then I'd have to mount them tomorrow and wait another day, and it'd still be fairly brittle.

Now I'm on the prowl for anything that needs gluing - just like way back in the day when I discovered duct tape. Thanks, hot glue gun! 

Wednesday, December 7, 2011

Neural networks part 2: Evolving a "living" robot

In my first post on neural networks, I discussed training the network using gradient descent - a pretty straightforward optimization method. This project took a completely different approach: evolving the network's weights with genetic algorithms

Our project team designed a virtual agent (robot) that learned to avoid obstacles while acting autonomously to "work" and "eat", maintaining its own internal conditions in proper balance like a living animal.

The virtual robot (green circle) navigates from the green "health" waypoint to the red "work" waypoint while avoiding the gray obstacles.

We started in simulation, planning to implement the working system on a physical robot, but ran out of time to get the hardware side functioning. C'est la vie robotique! We did make sure our virtual agent would use the same motor commands as the real robot, so the simulation wasn't completely disconnected from the real world.

Full details, including the multilevel control architecture we developed, after the jump.

Wednesday, November 9, 2011

Neural networks part 1: Teaching Canyonero to drive

Artificial neural networks (ANNs) are modeled after natural neural networks (brains and nervous systems) and though they don't work exactly alike, both a brain and an ANN can learn arbitrarily complex tasks without being told exactly how - they just need data about the task and their performance.

A generic artificial neural network.

ANNs have been applied to a lot of artificial intelligence and machine learning problems, from autonomous vehicle driving to recognizing handwritten address on envelopes to creating artificial intelligence for video game agents.
  
I won't go deep into the math behind ANNs here; there are great sites on the web (and it's not really difficult, there's just a lot of bookkeeping). 

Instead, I'll take two posts to describe a couple of neural net projects I've worked on. First up: a mobile robot called Canyonero that learned to compensate for its own mismatched wheels.

Canyonero, with a camera in the front and a netbook running an ANN.


Tuesday, October 4, 2011

PIC + pyserial + Windows

I use PIC microcontrollers fairly often since I'm familiar with them and they generally have the features I need. That's a pain when I need to program a PIC board, then talk to the code over a serial port. I need Windows to burn the firmware, but I've never bothered to learn Windows serial port programming. 

Then I realized the pyserial library for Python is cross-platform. Sweet! One download and one "import serial" later I was burning firmware and talking to the PIC over USB serial, all from inside Vista.

PIC serial comms to the left of me, Python to the right, here I am, stuck in the middle with you...
(Well, almost... there's some weird version conflict where the pyserial version I downloaded doesn't like the Python version I have. Lucky I found a sketchy-looking forum post with some random dude's replacement for a key pyserial file. Copy, paste, run, and done. Sure, I can't close the serial port without getting an error, but it opens and handles data just fine. Thanks Internet!)

   

Friday, September 30, 2011

Microchip ICD adapter -> NXT port breakout board

Lego Mindstorms NXT kits are great for robotic prototypes and experiments. The computer brick and sensors communicate over I2C, which is great for DIY expansions. Unfortunately they also use nonstandard RJ connectors. (You can now buy the connectors, but that's no fun.)

The NXT's RJ port with offset connector lock.


I wanted to access the I2C, so I hacked up my "sound sensor" (microphone) to add a standard 0.1" header. But even as hacks go, it was ugly and only allowed access to 5 of the 6 pins.

However, a while ago the ECE department was getting rid of surplus parts, and among the reels of SMD resistors were a handful of header-to-RJ45 adapter boards that come with Microchip ICD programmers.

Microchip, on the other hand, make this handy board with a normal RJ45 port.
One day I happened to look at one and realize the RJ port on the Microchip board had the same pin spacing as the NXT ports. I cracked open my earlier hack, did a bit of soldering and desoldering, and boom - I had a small, clean NXT-port-to-header breakout board.

The connector lock may be shifted, but the footprint is the same as RJ45.
Mind you, I haven't actually coded up an I2C interface yet. But I can have a lot of lovely continuity beeps between NXT ports and a breadboard now. :)

     

Monday, September 12, 2011

ModDroid, we hardly knew ye

One of the projects I worked on at the Robotics and Neural Systems Lab was a modular robot we were going to design and build for a conference. Each module would be about 8" x 8" and stackable, so you could load up on CPUs and batteries, add some arms, mobility options, different heads...

Alas, for a variety of reasons we didn't get that far - we built just enough modules to make a basic robot we named ModDroid. ModDroid's coolest feature was his adorable head, designed by two of my labmates and featuring 8x8 RGB LED matrix eyes from Sparkfun. I had a lot of fun coding up the eye animations on the PIC control board.


 

I recently saw ModDroid sitting in a heap of parts in a corner of the lab. Looks like all we have to remember him by is this video... bon voyage little buddy!



Particle filters in real time

I love class projects, because it's great to make something that works amidst the theory and pure math. For one of my robotics classes, my team decided to code up a particle filter.

Actually, our plan was to have a Lego Mindstorms NXT robot localize itself (figure out its initially unknown position in a known environment), then navigate to a sound source while avoiding obstacles. We couldn't get the physical robot to cooperate, so we did the localization piece in simulation.

We got the particle filter working, and made some nice videos of the particles in action. Those and more info after the jump.

Sunday, September 11, 2011

Little Drummer Boy: a drum machine with real drums

 
"Little Drummer Boy" was my final class project for an embedded microcontroller class. Two Futaba S3004 servos with drumsticks, controlled by a PIC18F4550, play a set of bongos. The frame was built by a teammate from scrap aluminum.

Videos and more info after the jump.

Music gear hacks: ugly but fun

Contrary to what you might think from the photos on this site, I do care about aesthetics. I get jazzed about great industrial design, I love a good clean interface, and part of me always wants to take a working project and sculpt it into a beautifully finished product that anyone would be proud to own.

The other 90% of me really likes the "junkyard whirlwind" look.

I was going through old files last week and found some photos/videos of music gear I modified, then sold when I got bored. These were all cool little hacks, some more labor-intensive than others - but they're all pretty ugly.

Circuit-Bent Casio SK-1 Keytar
By far the coolest SK-1 you'll ever see. Unfortunately since I made it around 1998, the only evidence left is this crop of a highly embarrassing snapshot.

Of course I'm not making a "rocking with my keytar" face.

Yes, that's the handhold from a kid's keytar bolted on an SK-1. Yes, that's a full-size guitar strap. Yes, the yellow buttons are wired up as circuit bends. And there are others you can't see - switches, pots, and body contacts - to modify the already crazy SK-1 sample magic.

I loved this thing and only sold it because I thought I could make bank at the height of the SK-1 craze. Which I did. Maybe I sold a little piece of my soul too. 

Check out the rest after the jump...

On the origin of blog

I'm not sure why anyone would be reading this post, it's pretty clear from the rest of this blog that I just wanted a place to blag on the internet about my precious wecious little projects. :)

Also I've gotten a lot of help and good ideas looking at other people's projects and code online, so maybe something here will come in handy for someone else someday.

About me... well, I'm back in school so I can build robots and finally put my scavenging skills to good use. There's really nothing better than a good long walk around the neighborhood the night before the trash gets picked up, wondering what treasures will, uh, fall into my lap.

After all, it's only junk if you don't know what to do with it.