close-circle
Close
0%
0%

P.A.L. - Self Programming AI Robot

P.A.L. : Personable Autonomous Learning
- Self Programming Robot that learns and grows - Each robot developes a unique personality.

Similar projects worth following
close
P.A.L. : Personable Autonomous Learning

What is AI? Is it a scripted response? Should AI learn? These are some of the questions I am attempting to answer with P.A.L. as I pursue the knowledge of what AI means for robotic implementations as well as for us. The eventual goal is to have an open source self programming/learning robotic platform that can be expanded upon to push the boundaries of what is currently out there.

Goals at a glance:

  • Learn what actions are best for a given situation ("instinctive" based learning AI)
  • Voice/audio recognition with a learning system.
  • Be able to display situational emotion.
  • Exploration of the environment.
  • Track objects.
  • Judge distances.
  • Fetch a ball or other object as verbally directed.
  • Perform simple tasks after learning them in an organic manner.

Challenges:

  • Design and implement the robots body (needed for the Squirrel system described below)
  • Develop the voice/audio recognition system
  • Develop the learning AI that makes use of this body (Squirrel system)

How the Challenges are addressed (or Divide and Conquer):

This project consists of 3 primary challenges, each is broken up into smaller bites for easier consumption.

The mechanics:

This particular portion of this project has me stepping out of my comfort zone, as such I am learning a lot about mechanical stresses and servo/stepper motor design. The reason I chose to do this portion of the project first is twofold. The initial idea behind the AI is to use an instinct based system in what I have dubbed "Squirrel". One way to go about this is to design the body that will be used in order to understand what the best instinct choices would be. I considered simulation, but what fun is that? I have broken up this task into several parts.

  1. Design and construct the brain layout as this will dictate the proportions of the rest of the robot.
  2. The second task will be to design and construct the lower track system and implement the mechanics required to allow for locomotion. This is also where the battery is located in order to keep the center of gravity low.
  3. Design and construct the body portion that will allow for a vertical movement of the head and arms. In the "chest" there will be a compartment that contains the DC motor controllers as well as any electronics that did not fit into the head unit.
  4. Design and construct the arms. In this area I am planning on implementing a 5 degree of movement limb. Two in the shoulder join, 1 in the elbow, two in the wrist. Part of the challenge in this is to be sure that the robots arm is strong enough to lift small objects while also keeping their weight very low.
  5. Design and construct the "hand" section. In this area I am looking at several techniques that can be used. The first idea is to implement a modified 3 digit gripper design. This gripper will be controlled by control lines in order to keep the weight to a minimum. Other ideas considered include vacuum systems, and “coffee filled balloon” systems.

The mechanical construction will be made of easily obtainable aluminum stock when practical, other components will be 3D printed in PLA or modified from purchased components when convenient and economical . The idea is to make this project easy to duplicate by others.

The Voice/audio recognition system:

I am choosing to stay away from standard voice recognition systems so that I may explore and come up with something slightly different. Many of the already robust and available systems on the market require an online connection or are very complex in their design. One of the design choices already in PAL is to include a Raspberry PI 3b as the primary computer, this will allow many of these other systems to be implemented should anyone constructing their own PAL wish to adopt a more standard approach.

This part has two primary components, a speech output system and an audio recognition system. I say audio recognition as the way this is implemented is that a sound is broken up into key frequency blocks and the db levels of each of these blocks is then analyzed with the result being shipped off to the primary computer.

  1. The Voice will be relatively a simple system consisting of a TTS256, a speakjet, and a pic16f1459. The pic16f1459 is used as a USB to serial converter as well as other duties...
Read more »

BRAIN.zip

Current files to print the plastic portions of the head. Dimensions are in mm. The print I made is in PLA at 100% original size. This version uses LED rings instead of eyelids to mimic blinking as well as show different colors and act as a light when needed. Aug 7, 2016

Zip Archive - 1.70 MB - 08/08/2016 at 05:11

download-circle
Download

Sabertooth2x25.pdf

PDF Instructions for the main motor driver.

Adobe Portable Document Format - 1.94 MB - 07/11/2016 at 08:17

eye
Preview
download-circle
Download

concept art.zip

original concept art - not used in construction but left here to show the design process.

Zip Archive - 556.94 kB - 08/02/2016 at 05:38

download-circle
Download

  • 1 × See build logs for current schematics. This will be updated more as things are finalized
  • 1 × 3D printed components - to be uploaded soon
  • 1 × Rasberry pi 3B
  • 2 × Pixy CMUcam5
  • 4 × Micro Servos for the inside of head

View all 9 components

  • GRIP

    ThunderSqueak08/23/2016 at 01:14 3 comments

    It has been asked a number of times, "Are you going to add some sort of rubber belt over the tracks?" I have indeed been considering this. One option I have been seriously looking into is simply roughing up the surface of the metal and giving it a coating of a rubbery truck bed liner, Liquid Electrical tape, or one of the other plastic cotes. This sounds much easier than attempting to either rivet or glue cut up tires to each plate in the tracks.

    Another option for indoor use could also be some sort of fabric "boot" that covers the entire track. I don't really have to worry about tearing up a hardwood floor at my home, but ya never know... it might be useful?

    Time will tell which option I go with...

    An example of truck bed liner application for those who are curious.

    cheers!

  • Update

    ThunderSqueak08/20/2016 at 10:06 0 comments

    Hello!

    While waiting for parts to be delivered, I have been working on some of the other items in the build. One of these is the Squirrel OS. To help with this process I constructed a small limited robot that has been lovingly dubbed "Turtle". The design is from thingiverse, with a modified body to fit some of PAL's internals. You can find these files here http://www.thingiverse.com/thing:152638

    and here http://www.thingiverse.com/thing:772740

    The small robot body took a few hours to assemble after it was all printed. Infill is 20%, so the limbs are very light weight.

    The brains are a small servo controller from http://electronics.chroma.se/rpisbv3.php (purchased on ebay) and a Raspberry Pi 3B. It does not have the speech module as of yet, this is more to get the base logic working before I transfer it to the much larger robot PAL.

    The resulting robot:


    Eventually, it may become a pet for PAL :) He looks terrified @.@;;


    I also dug out my old Futaba 6EX FASST radio to test the limits of the track system when it gets assembled. After 10 years of being buried in the closet, it needs a new battery so I will need to order one of those when I get the funds for it. I looked at other systems but the range on FASST radios is hard to beat (about 3 miles). The FHSS systems they offer in a lower price range are geared more towards park fliers and have a much shorter range. I also need to purchase a battery charger as I cannot find my old one. It was lost in a move years ago. Currently I am looking at the Triton EQ http://www.electrifly.com/chargers/gpmm3155.html

    That is it for this update, I figured that I would let everyone know that this project is alive and well and one that I am determined to finish :D


    Cheers!


  • Hi! I'm P.A.L.!

    ThunderSqueak08/10/2016 at 00:01 0 comments

    While coding last night, the soft chirping sounds of steppers kept me company. With clockwork punctuality, a large fan began whirring loudly in the build chamber. From the comfort of the couch I peeked around my arcade cabinet, hollow eyes peered back with a blank stare.

    I took this bit of plastic and wandered over to the bench. After several moments of fitting the small puzzle of fresh parts together there was a spark of imagination. I set this newly formed construct down and picked up the camera. As if it spoke, a mental image formed ....

    "Hi! I'm P.A.L. ... Let's explore AI together!. "

    ======

    Next up, the neck.

  • A pile of components - an update

    ThunderSqueak08/07/2016 at 08:00 0 comments

    While I wait for the final components that I had ordered to arrive in the mail, I decided to print out a more "final version" of the 3D models that are going to be used. I have been doing a lot of thinking about how to go about attaching the axle, the idler sprockets, and other components. I have decided that the space between the tracks will be 9 inches and that the main drive sprocket will be driven using a 2:1 gear reduction using appropriate 25h chain and sprockets. Those are still yet to be delivered. I am still waiting on some electronic components to come in before I finish assembling the last few boards that are in the brain. Even though it is just a pile of parts, it is starting to look like a lower chassis as things pile up :)

    I am considering using some threaded rod as the idler sprocket axles, as I do not have access to a lathe to make a proper axle. The bearings will be captured between two washers and nuts with some thread locker. These axles will then be secured to the frame with the use of 'U' bolts fed through the frame. I guess time will tell how it holds up as the rod is 5/8", this means that at its core it will be about 1/2".

    The large pillow bearings are for use in the main drive for each track. In the box, there are two 12v ps-1290 f2 lead acid cells that will make up the 24v power supply. The black "brick" on top of the box is a 2amp 24v battery charger.

    The center bar that you can see in the image is to hold the center wheels on each track. This will go over the base of the chassis and be riveted or bolted in place.

    I need to upload a fixed version of the current BRAIN.zip as well. I am printing it for a test fit at a higher resolution as I write this.

    And now... A pile of parts that make up some of the lower chassis!

    That's it for today's update.

    Cheers!

  • Track layout - Track support structure

    ThunderSqueak08/02/2016 at 06:47 0 comments

    While I was working today, I suddenly got an idea. Since I changed the track structure, I needed a way to give some reinforcement to the part between the ends. In the previous design, I was to be using heavy duty casters. I might as well put some of them to use. With some minor cuts using a good pair of safety glasses and a dremel... I made these.

    By cutting off the one side of each caster, they have enough clearance to allow the parts to roll comfortably. The thought is that in the final design it will end up looking something roughly like this. Please note, I am waiting on sprockets to arrive in the mail, so those parts are substituted just to give an idea of the basic shape.

    I have also uploaded a current zip file titled "BRAIN". This file contains the current 3D models in 123D and STL format.

    Take care!

  • A quick update - lots of pictures

    ThunderSqueak07/28/2016 at 11:03 0 comments

    I have been meaning to do this update for a while now and since it is 3am, and I am seriously overtired... seems like the perfect time!

    The initial concept has given way to some more practical designs choices.

    First up, the head.

    I went with a tray that holds everything, the cameras are locked in place with a top cover that screws into place. I still have to print a retention clip that holds the boards down into the tray, this clip will fit right up behind the eyes between the two screw mounting holes.

    The eyes have also changed somewhat, gone are the eyelids... at least for now and in their place I am making use of some LED rings. These rings have individually addressable LEDs that can blink, change color, and shine a bright light when PAL needs it. The two holes between the eyes are for a speaker and another visual effect led that will flash when PAL speaks. On the side of the head you see a set of stereo microphones. The whole thing bolts together by feeding through to the top of the head where a couple nuts hold it all in place. This design also leaves me room to hook up the "neck" system later.

    That is one blank stare XD

    I ended up modding the USB cables as the strain relief was too long to fit properly. With a knife, I carefully cut away the plastic revealing the wire. This also lets me make the cables the length that I require.

    I did cut a notch into the shell, this will be fixed in the main file so future versions will not require a mod. The hollow plastic was filled with hot glue to keep it from delaminating more after the cuts were made. You can also see the modified USB cables in place.

    In other news, I have received a very wonderful linear actuator. This will be what is used to raise and lower the main body of PAL. It moves 6 inches, and with the use of a speed controller should do the trick.


    Sorry for the picture heavy update. Work has kept me very busy this last week and I have not had a lot of time to work on PAL. I am also making some modifications to the lower chassis design to accommodate the much nicer tracks that I made the other day (seen in the images with the linear actuator).

    Currently I am on the fence if I want to print the head in a higher resolution and possibly give it an aluminum paint job to match the rest of the body, or if I will just leave all the plastic looking like 3D printed PLA :)

    As always... more to come as I find time !

  • Another option for the track

    ThunderSqueak07/26/2016 at 06:53 0 comments

    I won 10' of table top roller chain on ebay a while back for 50 dollars (including shipping to Alaska). Normally this chain is used for conveyor belts, I was thinking it could be put to another use. A wonderful new track :)

    Well, it arrived today. I used a 'C' Clamp and a 5/8" nut, along with a chain breaker tool to build two tracks with it . The nut is used so that you can use the 'C' clamp to press the pins back into place without resorting to the use of a hammer. I also used some wheels to see how it "felt" in the shape that I want as well as tested how much force it would take to move such relatively heavy track. The motors I have should move it with no problem.

    The chain is larger, 1864EAK3 made by Rexnord. Each track is made using a 3.5 foot section of chain, with 3 feet of chain left over for repairs or other uses later.

    I know it isn't a totally 3D printed solution, but I like looking at all the options :)

    Pros:

    • Doesn't twist
    • Easy to work with and repair
    • Very solid
    • Much faster than 3D printing a solution
    • Looks amazing
    • Heavy - moves the center of gravity down for more stability

    Cons:

    • Heavy - requires strong motors
    • Can be expensive if you do not shop around

    That's it for this 5 minute update :)

    Cheers!

  • Brain Pan - A place to fix the brains and optics

    ThunderSqueak07/18/2016 at 09:04 0 comments

    This is an older log that was saved in draft, publishing it as I want to keep all thoughts on the project transparent. I have since finalized the design and when I get some more time I am going to write the log entry :)

    The head also has a design change, for the better I think :) More to come!

    ===============

    A brain pan... the skull, or rather, the inside of the skull. This is a place to fix the optics and some of the PCB boards, including a raspberry pi 3b and a lynxmotion servo controller. It will also house the speech and audio recognition system (represented by the two blank boards).

    I did have to do a tiny bit of minor trimming on the raspberry pi slot, along the back corner to allow room for a small smd part. I will adjust the file accordingly so this should not need to be done on future prints.

    The idea is to use this as the foundation to attach the other components, IE. the outer shell and servo mounts for the eyebrows. The components are not bolted/glued/mounted into place in these photos, so there is some wobble on the optics. This will be remedied with the addition of a bracket that bolts into the front set of mounting holes.

    The bottom, all ports are accessible.

    There is no stress on the boards, the two PCB are simply warped from being stored for a long time.

    The file for this part will be uploaded, I test fit it for both the Rpi2b and the Rpi3B. Both fit properly.

  • Track 1... One more to go

    ThunderSqueak07/16/2016 at 20:38 0 comments

    There are 76 of the treads printed for each track, with one tread every other link. The result looks like this.

    To connect them, simply use a pop rivet that is the proper length to go through the tread and the chain link and out the other side. The only issue I ran into is the occasional rivet that would either break off leaving a small spike that I need to ground off or in the rare occasion where the rivet would not break at all and the plastic tread would break. The track turned out extremely flexible :)

    I am compiling a list of parts as I go, and will update that list with a note where that part goes as things are built.

    Sadly, my lab assistant (pictured below) doesn't want to build me another track, cornered him to ask why and he mumbled something about another 152 rivets is not for today. :p

    Cheers :)

  • 3D Printing the Track - The Tedium ^^

    ThunderSqueak07/14/2016 at 20:34 0 comments

    8 sets.... that is the number of times I need to print for the track. I am going to attach the file to the files location as soon as I am done. The file contains a single part for now. I will design and print the sprocket soon. Each of the parts is mounted onto two #25h roller chains using a medium rivet that is 1/8" (3mm) wide and 1/4"(6mm) tall on each end. #RMA1/8IP from ARROW.

    You only place the parts on every other link, leaving a 1/4" gap between. This allows the track to roll properly and gives the sprocket a place between to grip the track.

    8 prints*22 parts per print + four pieces of 3 feet of chain = two tracks with some spares left over for repairs. More pics and files to come soon :)

View all 29 project logs

View all instructions

Enjoy this project?

Share

Discussions

Esa Niemi wrote 06/05/2017 at 07:05 point

Hi!

How is the project going?

  Are you sure? yes | no

ThunderSqueak wrote 06/05/2017 at 18:25 point

It got put on hold, I just moved to a new home.  I will start it back up when things are more unpacked :)  

  Are you sure? yes | no

Craig Hissett wrote 08/04/2016 at 14:33 point

This is awesome! So much potential to explore.

I'd love to one day make the head of this fella, just to sit on my desk next to my PC as a test platform :)

  Are you sure? yes | no

Julian wrote 08/02/2016 at 19:06 point

Hey there, super cool project you have here! I just wanted to post a quick link to a low memory footprint, high speed neural network algorithm which should run very well on embedded micros, and especially well on a Pi: https://www.research.ibm.com/software/IBMResearch/multimedia/IJCNN2013.neuron-model.pdf

This is the TrueNorth architecture, designed by IBM under contract by DARPA's Synapse project. It is essentially designed for hardware implementation (i.e. FPGA/ASIC), and is therefore designed to be very easy on compute and memory resources. Everything uses booleans or 8-bit signed/unsigned integers, and no multiplies are required (all of the "multiplies" in the formulas are between 8-bit ints and bools, so just bit operations). Because of the nature of the architecture, it's very easy to parallelize, and would make excellent use of NEON SIMD instructions or similar integer-based DSP operations.

I've been working on using it for my own AI research, and so far it's been absolutely wonderful. It's an extremely capable architecture, and is supremely flexible. While it doesn't do learning on its own, you could add something like STDP, Q-learning, backprop, etc. to give it that capability. If you search google for TrueNorth and IBM, you'll find all sorts of papers on how to implement learning successfully on such an architecture. I've also had lots of success with "dumb" training via random Genetic Algorithms, so that might be an option as well.

I know you're already working on your own NN architecture, so I'm just posting this in case you need some ideas or want to prototype on a well-tested architecture. If you decide you want to use this architecture (or not) and need some help with the neural network side of things, feel free to give me a holler!

  Are you sure? yes | no

Murat wrote 07/12/2016 at 23:53 point

looks like you are doing what I'm trying to do, focus on the hardware first. I have my robot head built, using RPI3, servo controller etc. I wanted to have the hardware so that I could motivate myself. and now, since the hw is ready, I don't really know where to start. I too want to use AI. I started my project for autistic kids. the language was a big problem for me. at fist, I wanted to use Java, then Python, and now I'm kinda sure that the best choice would be C++. 
I don't see any software documentation, what is your plan? you have a sw design in mind? 
also, I would like to join your project if that is possible. what do you think? would you recommend any resources to read?

  Are you sure? yes | no

ThunderSqueak wrote 07/13/2016 at 01:06 point

I do have a software design in mind and I will be publishing it after things are written.  There is a flow chart for the basic software algorithm in the logs.  The language I am going to be using is C, as I have been using that for 25 years.  :)

I am to the point in the software design that I need "some" hardware to begin testing as I code the algorithm ... hence the current concentration on the nuts and bolts side of things.  When I design a project from the ground up I go all over the place with ideas and eventually consolidate the best of those down into a final product.   

As for resources, it really depends what you are looking for.  The life around us is full of ideas, millions of years have created an amazingly diverse planet.   A great source of inspiration comes from watching this squirrel in my yard ^^;;  I am currently not looking for anyone to join, but thank you for offering.  That may change in the future, but for now this is a labor of love :)

Do you have any links or pictures of your project? 

  Are you sure? yes | no

Murat wrote 07/13/2016 at 01:33 point

I don't think I can learn AI from a squirrel but she will definitely help me, that I know :)

  Are you sure? yes | no

ThunderSqueak wrote 07/13/2016 at 01:40 point

You should post your project on hackaday.io :)  The more the merrier!   As for language, you should go with what you are most comfortable with.  That will help increase the chances of success; simply grasping some of the concepts of AI are difficult enough without adding learning a new language on top of it.  

The best way? Just jump in with both feet and get dirty :>  Worst that happens is it doesn't work, and you try again :D  Never give up, never surrender!  

  Are you sure? yes | no

Murat wrote 07/13/2016 at 01:57 point

I was thinking about implementing facial and speech recognition first. I don't really know where to start but I have like 30 books waiting for me, and reading them asap would help me I guess. at least some... :)

  Are you sure? yes | no

Murat wrote 07/13/2016 at 01:57 point

and thanks a lot for your comments.

  Are you sure? yes | no

Radomir Dopieralski wrote 07/13/2016 at 08:01 point

If you want to do visual recognition, I highly recommend trying the OpenCV library. It has a lot of the commonly needed things already implemented (but you can always look under the hood), and it's available for many languages (C++ and Python included). There should be lots of tutorials on it too.

  Are you sure? yes | no

[deleted]

[this comment has been deleted]

[deleted]

[this comment has been deleted]

Blecky wrote 07/10/2016 at 10:21 point

This is the best damn insult bot I've seen in a while. Keep the development going lantramnamcodon!

  Are you sure? yes | no

[skaarj] wrote 07/10/2016 at 10:24 point

Dude, when you advance from kindergarden you may learn what "artifficial intelligence" means. Until then, keep your communication hole shut down, as you interrupt scientific creation processes. Also you should follow the advice of some medicine doctors, as my colleague here suggests.

  Are you sure? yes | no

Radomir Dopieralski wrote 07/10/2016 at 06:59 point

don't drink and comment

  Are you sure? yes | no

lantramnamcodon wrote 07/10/2016 at 08:16 point

and you just don't comment like that i had drunk because i did not.i see now your intelligent.

  Are you sure? yes | no

Radomir Dopieralski wrote 07/10/2016 at 09:09 point

Either you are drunk, you forgot to take your medicine, or you should really seek professional help.

  Are you sure? yes | no

ThunderSqueak wrote 07/10/2016 at 10:19 point

In the logs, there is a flowchart on the AI that is used in the design.  It learns and remembers situations and reacts to similar situations with successful strategies that had worked in the past.  Should that strategy not be successful in the new instance, then it works to create a new solution and remembers or refines that as needed.   As time goes on,  the library of responses grows and the robot will become better at the tasks that it needs to do in order to achieve its objectives based on the environment that it has been functioning in.   Once you start the robot, there should be very little human interaction, unless you want the robot to learn about interacting with humans of course :)  Thanks

  Are you sure? yes | no

perry levac wrote 07/09/2016 at 13:22 point

Insted of using a PI you might want to look at the Orange computer very close to the PI, but there will be some programming problems I have one and am very please with it for the price was right, and you do get what you pay for but hardware side of it I dont think that you can beet it. they start at $12 for a duo core, 512g ram and wifi and $19 for a quad core 1.4ghz and 1 gig of ram. the prices are around there.

Good luck

  Are you sure? yes | no

thygate wrote 07/07/2016 at 20:35 point

No disassemble! 

can't wait to see your progress !

  Are you sure? yes | no

Robot wrote 07/07/2016 at 19:00 point

This is great! I am reminded of the joy I felt upon finding a dusty copy of "How to Build Your Own Self-programming Robot" back in the stacks Multnomah County Library. Oh the '80s :)

  Are you sure? yes | no

ThunderSqueak wrote 07/07/2016 at 19:47 point

The 80's were an awesome time to be alive in many ways :D  

  Are you sure? yes | no

Adam Vadala-Roth wrote 07/02/2016 at 18:35 point

Love the design, its like an open source Johnny 5 !!!

  Are you sure? yes | no

ThunderSqueak wrote 07/02/2016 at 18:49 point

Thanks! :)  It's a project that I have wanted to do for ages now ^^

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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