Sunday, December 23, 2012

a new sensor

/theKinect

First Impressions



I just received the Microsoft Kinect for Developers from Amazon.  I intend to use it as the primary sensor for my robot; It has a lot of interesting features including an IR sensor, depth sensors, audio, camera, and a fantastic set of API's.  For the cost -200.00 U.S. dollars- it seems like the easiest place to start. After the unboxing I downloaded the Kinect SDK and Developers Toolkit 
-http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx-
and spent a couple days playing with the code.  The two main development languages are C# and C++ and are numerous examples using both - I chose C# to get started. 


A side note, I have never coded in C# before, but I was able to get up to speed with the help of some tutorials posted by Microsoft 
-http://channel9.msdn.com/Series/C-Sharp-Fundamentals-Development-for-Absolute-Beginners. 
I spent a couple hours and was able to figure the rest out from there.

My first step was to just turn the sensors on and load the video into a window; next I played around with the face tracking API's. In all it was fairly easy to get things up and running, and to start doing some really cool thins with the data streams the Kinect has on offer.  Latter on I will post some videos with actual code.

Saturday, December 22, 2012

iMobi

Winter [vacation] is coming 

iMobi- This idea has been forming over the past two years.  I took the +Coursera +Machine Learning  course  by Andrew Ng and latter two +Udacity courses (AI for robotics, and CS101).


Concept

A to B to C 

A robot that can sense it's surroundings, build models based on those sensor inputs and make decisions based on those models.   I want  to drop it in a room, or outside in a desert or another planet.....just kidding, but that would be cool...  and it should start learning about it's environment.  I have no idea if I can ever finish this alone, but I hope my rather simplistic outline will provide a structure for the systems I will need to develop.  

Here is what I have in mind:  Picture a human brain and it's perceptions of the world.  It is able to perform  relatively simple tasks such as recognizing a handwritten "t"  to fairly complex tasks like understanding irony, or making an apple pie.   One might be tempted to think the brain's circuitry operates on a scale where less complex tasks are a assigned to less complex circuitry while the more complex tasks are left to complicated computational unites.  As it turns out this is not the case; each computational unit in the brain is no more or less complicated than the other- the brain makes sense of the world by layering simple computations. The computational unit that recognizes irony relies on input from dozens of other units that have already done their job. something had to process the visual images, something had to recognize a spoken word, something had to recognize grammar etc. Each unit performs it's task and eventually we understand irony.


I will borrow an idea from +Ray Kurzweil's book, How to Create a Mind, and call these computational units recognizes. In a similar way, perhaps the only path from input to model to decision is to take a page out of natures book and construct separate model's or "recognizes" for different tasks.