Autonomous Interactive Machine Operating System

Similar projects worth following
About 8 years ago I began a quest to build a machine that understood the world not as I did, but understood my world on its own terms. Despite using AI in the name, it was never an attempt at Artificial Intelligence. 5 years later I'd designed and built a semi-quadruped robot with 'hands' that it could walk on, handle things like cloth, paper, pencils, small blocks etc, as well as use to point and gesture. Dubbed AIME, it was intended to be a companion for my daughter whose communication issues meant that it had to depend on situational awareness and make decisions.

It has been three years since an infinitely wise authority intervened, institutionalising my daughter and throwing me to the wolves. My work destroyed, indebted and branded insane, it took me a year to recover physically, regain my status as carer and advocate and another 2 years to make a new home and life.

These are parts of AIME's operating system that I am beginning to shoe-horn into a Raspberry Pi or more probably a few Zero's networked together inside a smaller and less sophisticated quadruped. AIME was 3.2GHz dual-core intel powered and a lot more complex so it's a lot of work, and I have many interests that I've never managed to reconcile in one place. Robotics probably comes closest, but I think it would take a lottery win to get me that secret laboratory I've dreamed of for decades.

AIME had two Arduinos, one to control each arm (8 servos) and leg (3 servos) and head (2 servos, one Arduino for X, the other for Y), and a pair of cameras.

The Quad has 13 servos total, three in each leg and one to tilt the camera up and down. It doesnt have hands either.

If I wanted to take over the world with my robots, I'd have done it by now.Thats my daughter Bea in the background quietly doing her jigsaw puzzle...

The Quad

This is the Quad. Its got a frozen servo I'll have to swap out when I have time and it needs a board with a couple of ULN2804a (6v) drivers and some Darlingtons. Ive just unboxed it to post for now but it is nearly ready to go and has been for a few years.

It doesnt have a name yet. Anyone? :-)

Thats an ATMega1284PPU. I'm using the extra pins to multiplex the batteries, which is the reason for the wide power bus. There's 13 servos and most of the weight is on four of them. They run on 6v, powered by 15 1.2v NIMH batteries so I decided to implement bank management, and feed the hungry servos off the best cells using a slow average. The Pi and Mega have their own separate bank to power the brain that will still outlast the main cells.

The main power bank is charged with a 19v supply in parallel using a resistive ladder. It takes a while but it gets there in the end.

One of the first things my mill is going to do, is cut protoboard for these horrible SMD components. My idea is an axonometric grid of round pads joined together by a grid of traces I can cut and drop a component over, or isolate a line of them for a track. When I have the funds, I think I'll get OSHPark to make me some pretty ones for this.

Here's the 13th servo, it tilts the camera up and down.

The entire thing is built out of pizza rounds, each layer cut to shape with a scalpel and glued together, then finished with sandpaper. When someone manages to build a 3D printer that can print this stuff, let me know. WOOT...

The chassis is polycarbonate sheet bonded with accelerated superglue. I cut it with a scalpel and protractor to score the shapes I need for each part, then snap them up and glue them together. Its fast, accurate, clean, and leaves very little waste. The entire robot came out of a single piece a bit bigger than an A4 card. It costs a few quid/bucks a sheet, and is very strong for it's weight.

Once I built the chassis I dropped the shell around it and glued the two halves together. The battery hatch is secured by little magnets glued into recesses, the lid will be the same.

The feet have sensors connected to the Analog Inputs on the Mega. The controller will sample these at a decent rate to get an idea of what surface it is walking on, and I intend to build in behaviours like investigating things with an exploratory poke.

In there is a piston compressing a pressure sensitive polymer against two tracks of a bit of Veroboard. I was too lazy to etch 4 pads... The polymer is a QTC Pill - Quantum Tunnelling Compound, an amazing invention. Its a non conductive polymer rubber until you apply pressure to it, then it responds with a fairly linear decrease in resistance down to a few KOhms before material failure. It's in remote controls, lift doors and other places where solid state sensing of pressure is preferable.

It can even pick up low frequency vibrations, although I havent tested this yet, just observed the response on a scope. As a rubbery material I'm guessing the bandwidth might include the lowest octave.


The motion tracking system for AIMos is based on a...

Read more »


Python driver used to accept commands from the console or from another process via its TTY. This is how AIMil is linked into it from a higher level.

aimosdriver - 5.58 kB - 02/10/2017 at 10:23



Upload this to an Arduino to control as many servos as you can configure on it, providing you have enough power...

x-arduino - 11.29 kB - 02/10/2017 at 10:23


  • Skeletronics

    Morning.Star02/10/2017 at 10:22 3 comments

    I've managed to find a working copy of the Skeletronics system for AIMos on an SD card I'd used while I was working on it. This is good news, I dont have to rewrite it from memory which I hate doing. The biped was an experimental attempt to scale AIME that never worked out, with the batteries onboard the ankle servos were too inaccurate and I gave up trying to make the annoying thing walk. It cost a few quid to replace the chassis with the Quad, a choice I made because I didn't have access to better servos. You can see in the video that the servos don't respond equally, they are only running on 5v, same as the Arduino.

    Now I have it working I can burn it onto the Mega in the Quad and have that running around, hooray! It might have to remain tethered to a power supply until I can upgrade the power bank with a LiPo and its own power management.

    The code in the downloads contains a version of my Quantum Symmetry Data protocol.

    This is an attempt to mitigate errors in transmission as the Arduino Serial doesnt use handshaking. I needed a system to recognise when bad data had been transmitted and realised that there was a class of information that I could combine over distance and send both the data and a CRC of sorts at the same time. It is not complex and demonstrates a use for Quantum Symmetry, part of Cloud Theory, which I will write about in my pages. This is an attempt to explain how information is stored at its fundamental level that a computer can understand.

    Traditional systems transmit data and a method to check it afterwards, usually by adding all the data bytes together and transmitting the resulting unique code generated by this afterwards. This is done so that the receiving end can tally what is received, and if the two results don't match it can send a request for a resend of the data (or CRC, Cyclic Redundancy Check) whichever was corrupted in transfer. In a very noisy environment the system breaks down easily, and the bigger the chunk of data sent, the more likely the errors are to break it.

    What I needed then was a way to error check each quanta of data at the same time as sending it. Two data lines sending the same information can achieve this, but I didn't have spare lines to handshake with, let alone use for redundant data.

    I discovered a single byte of data could be sent complete with an inline redundancy check encoded into it by using a special class of information.

    If you mirror image a single quanta of data within itself, it describes itself in a manner so that is easy to detect errors at that level in real time. Obviously, reversing the data bits this way means that an error would have to occur twice in different places to make the mirrored bits match, which is highly unlikely unless the system was so noisy transmission would fail anyway... It works perfectly within AIMos, which also now doesn't have the dense data serial stream I wrote it to cope with.

    I think of this as entangling the information carried within the data's superstructure so it describes itself, data which is simply a closed set of identical elements arranged in a specific order. Obviously a data 'byte' can be of any length, in this case it is 4 bits mirrored to make an 8 bit quanta to convey a single character but in theory could be transmitted in chunks of any size, including variable ones, a chunk for each word for example. This demonstrates neatly that the information contained is not dependent on the data itself but is represented by it at a fundamental level by its arrangement, and this is where I am directing my thoughts on machine understanding.

View project log

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates