Let's Make Robots!


Little robotic platform for my AI experiments
Schematic_Chibot.JPG223.67 KB
Interactive_Stochastic_Learning_Automaton_US_president.zip2.72 KB

Update 2/5/2014

Finished wiring (see attached schematic) and wrote test codes for the servo, ping and accelerometer.

I am still waiting for the 74LS04 and L293D chips to arrive. All express companies here do not work during Chinese New Year holiday.

The first video shows the stochastic learning automaton learning who the current U.S. president is. I also attached the code in case you want to play with it.


Initial post

Chibot - an acronym for child robot - is a little robotic platform I am just building for my upcoming weak AI experiments I have in mind. As a reminder: Weak AI is an artificial intelligence system which is not intended to match or exceed the capabilities of human beings.

I mainly want to extend my Variable Stochastic Learning algorithm as follows: if single actions do not lead to a success over a certain time, the robot is able to combine pre-defined actions randomly and apply them again to the environment. Let's say, two of the pre-defined actions are "Go back" and "Turn left", and none of them lead to a success over the time, a new randomly assembled action would be for instance "Go back-Turn left". With just a few pre-defined actions a very large number of possible permutations can be obtained, which leads to a very complex learning behavior of the robot.

Chibot is currently equipped with two sensors. While the ultrasonic sensor just measuring the distance to objects, the ADXL335 accelerometer can be seen as a kind of pain receptor and responsible for the reward. If the robot bumps into objects or got stuck after an action was applied, a negative reward is given, else a positive reward will be send to the system.

I have mounted the Arduino Mega on top of the robot to be able to extend its functionality by adding different shields (like compass, SD card, RTC). This also has the advantage that the battery box is freely accessible and nothing needs to be disassembled before you can remove the batteries for re-charge.

The base plate is made from 2 mm aluminium sheet and the mounting plate for the board and servo from 3 mm ABS sheet:

Base plate with assembled ball caster and mini gear motors:

Followed by battery box, on-off-switch, accelerometer and stand-offs for the deck:

Deck and servo mounted:

Home made sensor bracket with HC-SR04 and micro controller added:

Basic shield (not finished), containing voltage regulator, voltage drop diodes for the servo, sockets for motor driver and inverter IC, pin headers for 5 V, GND and servo:

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.


Nice, simple robot.  Definitely need a Mega or a "big boy" processor for more of the VSLA. 

I am still working on the AI library that I started in the blog a while back based on your code.  My plan is to incorporate your idea with randomly selecting actions and putting events together to move toward more complex behaviors.  I am also adding an EventPattern class which consist of EventSteps.  Each step can consist of many possible events that kick to the next step.  In effect it is a way to logically "OR" several events for a step in an event pattern.  So, if this event or that event or that or that, could be the first step in an event pattern.  The randomizing will allow me to select the "depth" of the event step so I could have several random events that could be part of an identifiable event step within an event pattern.

With this framework, it would be fairly easy to create an event pattern such that (assuming voice software and vision software work is already done!) if the robot speaks to a person, the person responds within 25 seconds, smiles, the robot responds again, the person responds within 25 seconds, smiles, then the person stays within 3' of robot for greater than 1 minute = favorable event. Definitely need a Mega or a bigger processor to run since will no longer fit into a Arduino Uno.

I look forward to see what you come up with.  I will post code when I am done working out the bugs.