Simple Embedded Architecture for Robot Learning and Emotion

I’ve been working on a paper about robot learning for over a year now, more as a place to organize my thoughts than anything else. This paper outlines some ideas I’ve been having about how to implement a learning system that let’s a robot relate state-action sequences to a result. It’s still extremely sketchy, but I thought I’d make it public:
Simple Embedded Architecture for Robot Learning and Emotion
Sorry for the shoddy formatting, but that results from publishing a Google Doc as HTML.

I also have a few background documents that may be interesting* to some:

Senses/States Matrix
Emotional Effects on Outputs
Robot Emotions versus Movements

My current mental obsession is an ALife simulation running under Linux, and I thought I would try out this learning architecture in a simulated environment on a capable processor.

*I find this stuff extremely interesting, but then according to my teenage daughters I’m weird. Of course they think weird is a compliment.

Design Goals for Deskpet

I have decided to limit myself to 3 projects; Deskpet, Tiletoy and notebooks. I just built some notebooks, and my Tiletoy PCB is on the way (maybe more about that later), so I’d like to get back to Deskpet.

Deskpet is a project that I am working on to create a small robot to live on my desk as a pet. One of the things I have learned at work is that it is much harder to build something if you don’t know exactly what it is supposed to do. So here goes; high level design goals for Deskpet:

  1. The major goal for the Deskpet is to construct a pet. It needs to live on my desk and generate an emotional attachment.
    • Sufficient output to be “interesting” – If all it has is a pair of motors, I can make it dance, but it would be much easier to generate an emotional attachment if it has other methods of expressing itself.
    • Sufficient input to be interactive – I want to be able to play with my pet, so it needs to be able to sense it’s surroundings, toys and possibly me.
  2. Automatic recharge – If it is going to seem alive, I can’t keep having to put it on the charger.
  3. Wireless communication and bootloading – This is going to require A LOT of firmware work on my part, so it ould be easiest if I could download new firmware without even toucing the ‘bot.
  4. I will not be concerning myself with availablilty or cost of components with respect to eventually making kits available. This will be a project for me.

Well, that should be enough to keep me busy……..

Driving Miss Daisy-wheel

I got the wireless key-fob working:

Family and friends have been having a lot of fun driving it around.

My end goal is to let the ‘bot talk to a base station connected to a PC. I REALLY want to write an RF bootloader, so I can reprogram without touching the ‘bot. This is the hardware for the base station ( Still need to write the software and firmware):

Deskpet pre-proto

I ordered a Nordic-FOB from Sparkfun to make the coding for the wireless module easier. While I’m waiting, I decided to hack together a pre-prototype of the deskpet using a Baby Orangutan from Pololu, that has an ATMega168 and an LB1836M, the same motor driver that the real board will use. If you want one of those Baby-O’s, get it quick, because they upgraded the motor controller on it, and the old version is going fast. On a good note, they added the LB1836M to their IC page for me, so they should be much easier to get now.

Here’s a pic of the prototype:

P.S. If you are looking for a cool off-the shelf ‘bot, the 3pi from Pololu looks really nifty. Can’t wait until it comes out…

Deskpet Update & Pics

I finished laying out the PCB during lunch today. Maybe I can clean it up and get it out to BatchPCB for fab by tomorrow morning:

I finally got around to taking some pictures of the base:

Deskpet Planning – Part B

1) I picked a battery: 230 mAh LiPo from All-Battery. If I raise the standoffs by about 0.05″ I can fit it between the motors and the PCB or I could add a small shelf to the back end of the frame, kinda like a penny-racer.

2) The IS471F requires 4.5V but I want to run from a max of 3.3V. Looks like I’m going to need to find another solution for proximity detection.

3) Charge pump for the color sensor LED’s: MAX1595? I have used some of the Maxim capacitor charge pumps in the past and they work well.

Deskpet Planning – Part A

I am working on the design for the Deskpet, and decided to build a prototype with a minimal configuration to get started. I plan to use an ATMega128 processor because I have several laying around. Here are the required input and outputs:


  • Color/Line sensor
  • Linear Hall effect sensor
  • 2 way IR proximity sensor
  • Ambient light level sensor
  • Wireless data
  • Battery level sensing
  • Battery charge input
  • Pushbutton


  • 2X Motors
  • Speaker
  • Wireless Data
  • OLED “face”

And here’s what I have so far for each:

Color/Line Sensor:

NECM005 RGB LED and TEMT6000 light sensor

Linear Hall Sensor:

Not sure yet. I like the 3 pin SIP devices from Allegro, but they need 4.5V. I would like to keep everything possible running from a 3V or maybe 3.3V supply.

IR Proximity Detect

2X IR LED’s and IS471F modulated detector. Could also be used for IR homing beacon for charging station. To avoid interference with the proximity detect, sending a specific pulse from the LEDs would trigger the charging station to transmit a response.

Light Level

CDS Cell or TEMT6000 light level sensor

Wireless Data:

Nordic nRF24L01 board from Sparkfun

Battery Level:

Voltage divider to ADC on the main processor

Battery Charging Circuit:

MAX1555 Lithium charge controller


SMT Momentary Normally Open SPST

2X Motors:

LB1836M Low Voltage Dual H-Bridge and 2X GM10 geared pager motors


Citizen Micro Speaker from Electronics Goldmine.

OLED “face”:

uOLED96 from 4DSystems. I have an older version than the one shown in the link with 8MB internal flash, and no uSD slot.

Still left to work on:

  • Battery – Size and mounting locations
  • Charging method – How does the robot find & connect to the charger?
  • Decide on a Hall Sensor
  • Find an LED charge pump since the G and B LEDs require 3.6 V

More CNC’d parts

sprockets I have been playing more with my CNC machine and am working on some tiny treads for the GM10 motors. Here is a pic of the drive sprockets that I made. That is 1/4″ square grid paper that they are sitting on. I cut some prototypes out of nylon (yuck) then cut these out of some sample scraps of “Butter-Board“. That stuff cuts nice!
I made a female mold for the treads, but I don’t like it, so I’m going to redesign it. Maybe the sprockets also. I just got a 1/16” end mill in the mail today so I can probably make them better now anyway. As soon as I tram my mill and get out the backlash, since my circles appear slightly out of round.

Deskpet redux

As an ongoing project (see Flik previously) I have been working on a small robot that could live on my desk as a pet, hence the Deskpet moniker. I’ve done some research into how to give him personality, as well as how to add emotion (links soon). Last weekend I decided to play with my CNC mill and cut out a design for the body of my deskpet robot. I’ve been working on this design for a while so it was just a matter of loading and running the program. Then, one of the guys at work used the CNC’d master to make an RTV mold, and I molded a urethane copy:

Deskpet1 Deskpet 2

The body is shown with a Nickel for scale. The pics are really crummy because I used my cell phone, I’ll post better pics later. This will make a robot small enough to use for Micro-Sumo competition, and is designed around the GM-10 motors. I may end up selling these as just the body, or as a complete robot kit.

Useable accelerometer data

Here’s a few places I found good stuff about filtering…


Next Page »