ArduinoEye


ArduEye - vision sensor for Arduino from Centeye

Interesting little low resolution serial camera.
An example and code are here. It does visual "odometry" 

I purchased one of these chips (Tam2 16x16 with lens) for $50.

The soldering was minimal.  Just a few pins for Vcc Gnd and the serial telemetry. The documentation was very good on the web site.  It was presented in a logical and step by step manner.

Following the Odometry example, I found the code could not be loaded on my old Duemilanove because of size constraints.  The example is over 16K bytes. The data coming back from the camera is at 9600.

 

The first thing which is needed is calibration.  You are supposed to hold a white sheet up to it and hit the 'C' key.  This will dump a "image" which can be stored (hitting 'S').

This is to dumps of the same view. As you can see they are similar(ish)

 

Done.
Writing calibration mask to EEPROM...
Done
ASCII dump of image, after calibration
@@@#%%%*+-+- 
####%%%*+=** 
####@%%*=--- 
#@#@%%%==+-, 
@@#*%%*++==- 
@@#*=%*+=*=+ 
###@=%%+=*== 
###@*%*-==== 
@##%%==,==== 
@@@%%=-.,-,- 
@#@%%*,      
##@%%*..     
Done.
ASCII dump of image, after calibration
@@@#%%%*+--- 
@@##%%%=-+== 
@@#@%%%*+,,- 
@@#@%%*==+-. 
@@#*%%*++==- 
@@#*=%*+===+ 
@@#%=**-+==+ 
@@#%***-==== 
@@@%%==,==== 
@#@%%=- ,-,- 
@@@%%*,      
@#@%*= .     
Done.
 
The highpoint of the program is to do streaming visual odometry.  Two values are streamed out the X and Y.  These  represent the average travel of the image in the horizontal and vertical directions.
 
-104 -367
-105 -368
-105 -367
-105 -367
-104 -366
-105 -366
-105 -366
-105 -366
-106 -366
-106 -367
-106 -366
-107 -366
-107 -366
-107 -366
-106 -365
-106 -366

This is not the same as Lucas Kanade Optical Tracking.  Where a point is set in an image and it is tracked.  Geoffry L. Barrows appears to be an expert on this sensor @ the http://embeddedeye.com forum.  I believe he has vested interest in the sensor.  He mentions LK Tracking but only has an example in some MATLAB code (not running on the Arduino).  I suspect that the algorithm is effectively "too big" for an Arduino.

I looked at several demos like this where the odometry is used to stabalize a mini-helicopter.  Very cool, but I think of this sensor of basically like an optical mouse.  Very quick frame-rate, but very low resolution.  Using an Arduino to do the processing I suspect you will not get more than optical odometry, which as the demos showed worked well in stabilzation.