The CMUcam4 is a fully programmable embedded computer vision system designed to track colors and to be used as a co-processor for the Arduino or equivalent microcontroller. The main processor on the CMUcam4 is the Parallax P8X32A (Propeller Chip) clocked at 96 MHz and connected to an OmniVision 9665 CMOS camera sensor module.
The CMUcam4 can be used to track colors or collect basic image statistics. The best performance can be achieved when there are highly contrasting and intense colors. For instance, it can easily track a red ball on a white background, but it would be hard to differentiate between different shades of brown in changing light. Tracking colorful objects can be used to localize landmarks, follow lines, or chase moving beacons. Using color statistics, it is possible for the CMUcam4 to monitor a scene, detect a specific color, or do primitive motion detection. If the CMUcam4 detects a drastic color change, then chances are something in the scene changed. Using "line mode", the CMUcam4 can generate low-resolution binary images of colorful objects. This can be used to do more sophisticated image processing that includes line following with branch detection, or even simple shape recognition. These more advanced operations require custom algorithms to post-process the binary images sent from the CMUcam4. As is the case with a normal digital camera, this type of processing might require a computer or at least a fast microcontroller.
The most common configuration for the CMUcam4 is to have it communicate to a master processor via a standard TTL serial port. This "master processor" could be a computer (through USB or RS232), Arduino, Basic Stamp, PIC, or similar microcontroller. The CMUcam4 is small enough to add simple vision to embedded systems that can not afford the size or power of a standard computer-based vision system. Its communication protocol is designed to accommodate even the slowest of processors. The CMUcam4 supports various baud rates to accommodate slower processors. For even slower processors, the CMUcam4 can operate in "poll mode". In this mode, the host processor can ask the CMUcam4 for just a single packet of data. This gives slower processors the ability to more easily stay synchronized with the data. It is also possible to add a delay between individual serial data characters using the "delay mode" command. Due to communication delays, both poll mode and delay mode will lower the total number of frames that can be processed in one second.
Why Choose CMUcam4? If you've ever wanted to add computer vision to your robot that is powered by Arduino or an equivalent microcontroller, then the CMUcam4 is for you. However, if you want a general-purpose computer vision system that can do more than just track colors and perform basic image statistics, then the CMUcam4 is not for you.
Computer vision systems like the Kinect can do much more than the CMUcam4. However, you can't connect the Kinect to your Arduino, whereas the CMUcam4 was designed specifically to have an Arduino interface. If you just want to track colors and control motors with your Arduino, then using the CMUcam4 will be far easier. Otherwise, you would have to program an application for your PC to use the Kinect and to talk to your Arduino, and an application for your Arduino to communicate to the PC and control motors. Using the CMUcam4 will save you half the work.
The CMUcam4 is also a low-power embedded computer vision system. It draws about 100 mA on average while running. This means you can connect it to your Arduino and USB port (assuming the USB port supplies up to 500 mA) without issues. The Kinect on the other hand draws over 1 A while operating not to mention that you'll need a PC to use it which also may draw over 1 A while operating. If power will not be an issue for you, then this paragraph is a moot point. For many robots, though, power consumption is important.
Some Assembly Required The RCA and barrel jack aren't populated because the connectors can affect the field of view when mounting the unit in an enclosure. Also, the servo power bus is disconnected in its default state; you will need to close the Servo EN jumper on the back side of the board to enable power to Pan/Tilt servos.
Embedded Computer Vision Sensor Features
- Fully open source and reprogrammable using the Parallax Propeller Tool software
- Arduino shield compatible; supports interface libraries and demo applications for Arduino and BASIC Stamp
- OmniVision 9665 CMOS camera sensor module:
Image processing rate of 30 frames per second
Raw image dumps over serial or to Flash card (640:320:160:80)x(480:240:120:60) image resolution; RGB565/YUV655 color space
- On-board image processing (QQVGA 160×120):
Track user-defined color blobs in the RGB/YUV color space
Mean, median, mode and standard deviation data collection, sampled from 40×120 resolution
Segmented (thresholded) image capture for tracking visualization (over serial or to Flash card)
80×60 image resolution, monochrome color space
Histogram generation (up to 128 Bins) sampled from 40×120 resolution
Arbitrary image clipping (windowing)
- µSD/µSDHC Flash card slot with FAT16/32 full file system driver support (w/ Directory and File manipulation)
- Two-port servo controller (pan and tilt w/ 1µs resolution at a 50 Hz refresh rate); Pan and/or Tilt servo channels can be configured as GPIOs
- User-controllable indicator LED (red) and power LED (green)
- TTL UART (up to 250,000 baud; 19,200 baud by default)
- Monochrome baseband analog video output (NTSC/PAL) of 160×120 resolution for tracking visualization segmented (thresholded) image w/ color centroid and bounding box overlay at 30 fps
- CMUcam4 GUI for viewing images on the PC
Recommended Communication Tools You will need one of the following (or similar) USB-to-Serial converters to communicate with the CMUcam4:
The 5V cable is recommended for Windows only because the Brad's Spin Tool software used on Linux and Mac pulls RTS low which halts the CMUcam4 indefinitely. You either can cut the RTS (green) wire from the cable, or use one of the other connection options. (The FTDI breakout board has DTR in place of RTS, avoiding this problem despite using the same connector.)
- FTDI 5V Breakout Board Plugs into 6-pin connector on CMUcam4. You must connect a power supply to CMUcam4 as well.
- FTDI 3.3V Breakout Board Plugs into 6-pin connector on CMUcam4. You must connect a power supply to CMUcam4 as well.
- Prop Plug (or old Prop Clip) Plugs into 4-pin connector on CMUcam4. You must connect a power supply to CMUcam4 as well.
- FTDI 5V Cable (recommended for 5V-tolerant systems, Windows only) Plugs into 6-pin connector on CMUcam4.
- FTDI 3.3V Cable (recommended for 3.3V-tolerant systems) Plugs into 6-pin connector on CMUcam4.
Arduino Programming Note To program your Arduino when the CMUcam4 shield is connected, you may need to use the Halt Mode (see Tips and Tricks link below), or disconnect the serial jumpers (SJ4 and SJ5), connect the two-pin header (J1) to any digital Arduino pins, and then use the SoftwareSerial library included in the Arduino installation.
Embedded Computer Vision Sensor Resources
Videos of CMUcam4 in Use
Optional Recommended Products for this Item
|Power Supply 3-12V DC, U.S. plug, 6 connection tips||+|| US$11.00|
|Power Supply 3-12V DC, US/UK/Euro/AU Plugs, 100-240VAC||+|| US$13.00|
|FT232RL USB-to-Serial Board for Arduino/LilyPad, 5V||+|| US$14.95|
|FT232RL USB-to-Serial Board for Arduino/LilyPad, 3.3V||+|| US$14.95|
|Prop Plug USB-to-Serial Adapter for Propeller Boards, 4-pin||+|| US$14.99|
|USB-to-Serial Cable: 5V TTL, 6-pin SIP Connector||+|| US$16.50|
|USB-to-Serial Cable: 3.3V TTL, 6-pin SIP Connector||+|| US$16.50|
|RCA Audio/Video Cable, 6 ft., Shielded||+|| US$2.95|
|microSD 2GB FLASH Memory Card w SD Adapter||+|| US$6.90|
|Arduino Stackable Female Header Kit, for R2 & earlier||+|| US$1.50|
|Arduino Stackable Female Header - 6 Pin||+|| US$0.50|
|Arduino Stackable Female Header - 8 Pin||+|| US$0.50|
|Arduino Shield Pogobed Kit for Solderless Shield Testing||+|| US$49.95|