MakerLab创客实验室 — Let's Make something.
现在注册
已注册用户请 登入

CMUcam5 Pixy:开源机器视觉传感器

13年在Kickstarter上买的,最近马上发货了,但是对于大陆地区资料文件有诸多限制,故译为中文,以飨读者
快速开始8 PixyMon在Mac下的安装0 PixyMon在XP下的安装0 PixyMon在Win7/8下的安装5 教Pixy一个物体2 让Pixy与Arduino连接8 上传新固件2 安装云台系统0 云台系统测试2
MakerLab创客实验室  ›  CMUcam5 Pixy:开源机器视觉传感器
8

快速开始

说明

由于Pixy官方文档还在完善中,中文版本不能保证始终与官方版本一致,请大家注意。
翻译的版本是2014年2月28号的官方版本

本教程内容纯粹翻译官方文档,Pixy还没收到所以并没有实际使用过,但一单收到并使用后,我会第一时间发布自己的使用教程。
本人翻译水准有限,如有错误请在论坛中纠正。本文的翻译耗费了大量时间和精力,转载时请注明出处,谢谢。

如果您感觉该文章对你有帮助,请分享给你的朋友:

25.1K

文档开始

非常感谢对CMUcam5(Pixy)项目的支持。OK,使用Pixy之前的第一件事是安装PixyMon。选择下面的一个最适合你的版本:
PixyMon在Mac下的安装
PixyMon在Win7/8下的安装
PixyMon在XP下的安装
完成PixyMon安装并让它正常运行后,你应当教Pixy几个物体来识别
最后你或许想把Pixy连接到像Arduino这样的微控制器上

云台系统

如果你收到了云台系统,参考云台组装教程,和云台测试


Quick Start

Thanks so much for supporting the CMUcam5 Pixy project! OK, first things first, if you're just getting started with Pixy you should install PixyMon. Go ahead and choose below, which applies best to you:

After you install PixyMon and get it running, you should try teaching Pixy an object, or 2, or 3...

And finally, you will probably want to hook up Pixy to a some kind of microcontroller like an Arduino.

Pan/tilt Mechanism

If you received a pan/tilt mechanism, use these assembly instructions. Then run the pan/tilt demo.



CMUcam5 Pixy:开源机器视觉传感器 Andy 4 个月前 最后回复来自 Andy

PixyMon在Mac下的安装

你需要一根USB mini数据线,用来连接你的电脑和Pixy。Pixy产品中并没有包含这根线。

下载最新版本(0.1.41)的PixyMon: http://pan.baidu.com/s/1dDpDlvV 。当你下载完成后,使用Finder浏览到download目录,双击DMG文件。
当DMG文件挂在成功后,你应当看到一个新的窗口,PixyMon程序就在其中。将PixyMon直接拖动到你的Applications目录,你就完成了PixyMon在Mac下的安装了。

现在将Pixy通过USB mini数据线连接到电脑上。


然后双击Applications目录中的PixyMon图标来运行PixyMon。PixyMon会连接到你的Pixy并且开始显示“CCB1”数据。(这些数据都是由Pixy传上来的默认数据,包含了识别出的物体列表,及他们的位置和大小数据,但是因为Pixy可能还没学习过任何颜色标记【color signatures】,这些信息可能没有那么有趣。)

接下来是什么?让我们教Pixy识别物体

PixyMon在XP下的安装

你需要一根USB mini数据线,用来连接你的电脑和Pixy。Pixy产品中并没有包含这根线。

下载最新版本(0.1.41)的PixyMon: http://pan.baidu.com/s/1dDpDlvV 。当你下载完成后,双击开始安装,安装过程中,暂时不要将Pixy插在电脑上,安装完PixyMon后,再连接Pixy到电脑。

现在将Pixy通过USB mini数据线连接到电脑上。

这是一个新硬件对话框会出现。

点击“No,not this time”,然后点击“下一步”。在下一个对话框中,点击“自动安装程序”再点击“下一步”。

PixyMon会连接到你的Pixy并且开始显示“CCB1”数据。(这些数据都是由Pixy传上来的默认数据,包含了识别出的物体列表,及他们的位置和大小数据,但是因为Pixy可能还没学习过任何颜色标记【color signatures】,这些信息可能没有那么有趣。)

接下来是什么?让我们教Pixy识别物体

5

PixyMon在Win7/8下的安装

你需要一根USB mini数据线,用来连接你的电脑和Pixy。Pixy产品中并没有包含这根线。

下载最新版本(0.1.41)的PixyMon: http://pan.baidu.com/s/1dDpDlvV 。当你下载完成后,双击开始安装,安装过程中,暂时不要将Pixy插在电脑上,这期间会预先安装驱动程序。并且会有“Pre-installing device drivers. Please be patient!”的提示,等一段时间后,你将看到下面的对话框:

直接点击“安装”。系统会等段时间,并且再次弹出一样的对话框。(Pixy需要安装两个硬件驱动。)如果你看到了新对话框,直接点击“安装”。等待Windows的安装,这可能要到几分钟,耐心等待。
然后就安装完成了。

现在将Pixy通过USB mini数据线连接到电脑上。

然后通过开始菜单(或通过主屏幕如果你用Win8的话)运行PixyMon。当PixyMon第一次打开时,你可能会看到这样的错误信息“error: No pixy devices have been detected”,直到你把驱动安装完成了。你或许会看到这样的系统信息:

驱动安装完成后,PixyMon会连接到你的Pixy并且开始显示“CCB1”数据。(这些数据都是由Pixy传上来的默认数据,包含了识别出的物体列表,及他们的位置和大小数据,但是因为Pixy可能还没学习过任何颜色标记【color signatures】,这些信息可能没有那么有趣。)

接下来是什么?让我们教Pixy识别物体

CMUcam5 Pixy:开源机器视觉传感器 Andy 3 个月前 最后回复来自 Andy
2

教Pixy一个物体

教Pixy识别一个物体是非常简单的。但让我们先说一下什么要的物体会更好的被Pixy所识别。Pixy使用的是基于色调过滤算法(hue-based color filtering algorithm)来识别物体。因为Pixy使用色调(hue),物体应有明显的色调,下面的物体就很好,因为他们都有比较好、易辨识的色调。


下面有几个不好识别的物体,因为他们没有色调(黑,白或灰)或因为色调不明显。


把这条原则记在心里,挑选一个物体来教Pixy。(通过电池或USB线给Pixy供电如果你还没有。当你给Pixy供电时,Pixy会闪几下LED。等待LED灭掉后再教Pixy。)用手按住Pixy顶部的按钮,等待大约1秒钟,LED会变亮,显示白色,然后是红色,然后是其它颜色,但是当变为红色时松开按钮。
当你松开按钮后,Pixy会进入所谓的“light pipe”模式,LED的颜色就是Pixy所看到的图像中间部分的颜色。
[TODO:添加简单视频]
用LED的颜色来检查是否你的物体在Pixy视角的中心位置。当你感觉LED颜色和你的物体颜色很接近时,按下并释放按键,就像你单击以下鼠标一样。如果Pixy感觉你的物体色调足够好(有足够的色彩饱和度[enough color saturation])的话,LED会闪并且已经操作完成。Pixy现在已经“学会”了你的物体,并且会追踪具有相同颜色的物体。如果物体的色调没有那么好,LED会关闭(不会闪)并且Pixy并没有学到物体。如果LED没有闪,你或许应该换一个有更好色彩饱和度的物体或去咨询一下售后。

多个标记[Signatures]

Pixy可以学习多大7个颜色标记。在上面部分,我们通过松开按键当LED变红色时,已经教了Pixy第一个颜色标记。如果我们继续按下按键,LED会变为橙、黄等,来指示剩下的颜色标记。下面是标记的顺序:
1、红
2、橙
3、黄
4、绿
5、青
6、蓝
7、紫
颜色标记的编号是指你松开按键时的颜色。松开按键LED颜色是黄色,那么你在教Pixy第三个标记。松开按键后LED变蓝色,你教的是第6个标记。这些颜色跟实际的物体色调没有任何关系。这些颜色只是用来识别标记编号。举例,标记1可能是黄色的物体,虽然标记1的提示颜色是红色,标记2可能是粉色物体,虽然它的提示颜色是橙色。

关于教物体的其它说明

当你按下并松开按键来表示LED颜色和实际物体颜色匹配时,Pixy会闪LED,并且闪烁的亮度代表物体的色调的饱和程度。所以高亮度的闪烁是好的。试着教Pixy一个颜色鲜艳的物体——Pixy会通过闪烁LED来指示它是不是“高兴”。
如果你偶然发现本打算教Pixy第3个颜色标记时,它却再学第2个。你可以按下按键直到LED关闭后再松开。这将是你取消Pixy学习模式的方法。你可以通过按住按键重新进入学习摸索。

白平衡

某些类型的灯(如白炽灯)有略红的色调,而有些(如荧光灯及常见的节能灯)会有略蓝的色调。这样的光线会影响你的颜色标记。比如,如果你在白炽灯条件下教的物体,转移到荧光灯下,颜色标记可能不会被识别的非常好。你可以重新教标记或调节白平衡。
当你第一次上电时,Pixy会花5秒钟的时间来监测需要用哪个合适的白平衡。然后它会关闭自动白平衡的功能。如果你想重新配置白平衡,按下按键知道LED变白后松开,时间会很快,做好松开的准备。Pixy现在就是在自动白平衡摸索中。你可以那一张白色的纸在Pixy前面,从而让Pixy可以进行白平衡调节,这将会花2~3秒钟的时间。然后你可以像点鼠标一样按下并松开按键。LED会闪烁来表示白平衡调试成功,完成了。

通过PixyMon来教Pixy

你也可以通过PixyMon来教Pixy。当你的物体很小或者你想更好的控制哪些像素被用到时会很有帮助。通过连接USB线并且运行PixyMon。当PixyMon打开后,点击上面的raw按钮。

现在拿着要教Pixy的物体在它前面,然后选择菜单Action=》Set signature 1。

现在选择哪一个区域是你想用的物体。

如果成功,你应该可以在下面的命令区看到“Success!”信息,并且还有一个数字是0~100之间来指示色调饱和度。色调饱和度高会有更高的数字。
就是这样了,你现在可以监测颜色标记的效果了,通过点击厨师图标或选择Action➜Cooked Video。Cooked Video(处理过的图像)会显示哪些像素与颜色标记一致,并且如何组成识别的物体:

下面是什么呢?

你可以通过这种方式教Pixy识别物体,最多可以有7种颜色标记。需要注意的是Pixy总是将标记记忆在flash里,所以当你下一次上电时,这些标记都是直接可用的。

如果你还没有连其它MCU,你或许对如何连接到Arduino之类的MCU感兴趣.

CMUcam5 Pixy:开源机器视觉传感器 Andy 2 年前 最后回复来自 Andy
8

让Pixy与Arduino连接

Pixy被设计为可以与微控制器进行通讯,并且Pixy可以直接与Arduino进行通讯。它会以1Mbits/s的速度发送块信息给Arduino,这意味着Pixy每秒可以发送超过6000个识别的物体或每帧135个被识别的物体(Pixy每秒可以处理50帧画面)。
OK,想让Pixy与Arduino进行通讯,使用Pixy自带的数据线连接Pixy到Arduino。

接下来,下载Arduino库在这里:http://pan.baidu.com/s/1dDpDlvV ,打开Arduino IDE并且通过菜单Sketch->Import Library导入Pixy库文件,然后浏览到Pixy库文件解压的地方。
然后,通过菜单File➜Examples➜Pixy载入“hello_world”例子。上传代码到Arduino并且打开Serial Monitor(串口监视器)。你应该可以看到一些类似于下面的数据信息:

Detected 1:  block 0: sig: 1 x: 159 y: 109 width: 61 height: 61Detected 1:  block 0: sig: 1 x: 173 y: 114 width: 60 height: 61Detected 1:  block 0: sig: 1 x: 146 y: 111 width: 70 height: 65... 

注意,这个例子中,如果Pixy运行了默认的固件,并且一个物体被识别才会打印这些信息。

Arduino API

在Arduino中使用Pixy是非常简单的,你只需要包含SPI和Pixy的头文件:


#include <SPI.h>
#include <pixy.h>

并且在setup()和loop()函数外面创建一个全局的Pixy实例变量:

Pixy pixy;

API包含一个函数:getBlocks(),这个函数将返回Pixy所识别的物体数量。然后你就可以通过pixy.blocks[]的数组得到每个识别到的物体数据(每个数组成员对应一个被识别的物体)。每个成员(i)包含下列元素:
pixy.blocks[i].signature:被识别物体的标记编号;
pixy.blocks[i].x:被识别物体中心位置在x方向的坐标;
pixy.blocks[i].y:被识别物体中心位置在y方向的坐标;
pixy.blocks[i].width:被识别物体的宽度(1~320);
pixy.blocks[i].height:被识别物体的高度(1~200);
pixy.blocks[i].print():一个成员函数用来打印被识别物体的信息到串口上;
所以Pixy与Arduino通讯很简单。

其它微控制器或设备

Pixy支持多种方式输出被识别物体的数据。它支持SPI,I2C,UART或模拟/数字 I/O口(通过10Pin接口)。Pixy还支持USB2.0 。你可以通过PixyMon的对话框来配置Pixy使用哪种方式。“Data out port”参数决定了输出方式。

如果你将鼠标指针移动到“Data out port”文字上,会有提示信息显示各个类型的接口对应的文字:
SPI:这是默认的输出端口,使用了三根心(IO口的第Pin1、3、4)并且用于与Arduino通讯;
I2C:两线接口(IO口的Pin5和9),可以支持一个主机与127个从机的通讯(多大127个Pixy);
UART:这是普通的串口(IO口的Pin1和4)。Pixy通过Pin1(输入)接受数据,Pin4(输出)发送数据;
模拟/数字 X:这种方式将在Pin3口输出0~3.3V的模拟电压,表示监测到的最大物体的X值;
模拟/数字 Y:这种方式将在Pin3口输出0~3.3V的模拟电压,表示监测到的最大物体的Y值;

CMUcam5 Pixy:开源机器视觉传感器 Andy 21 天前 最后回复来自 Andy
2

上传新固件

Pixy使用保存在ROM里的bootloader来上传最新的固件到Flash里。这使得Pixy不会“变砖”,也就是说你总可以从不成功的固件上传或不完美固件版本的升级中恢复你的Pixy。

第一次上传固件

请仔细按照本文操作。(如果你做错了某件事情或顺序颠倒,也不会有大问题,只是有可能会让你困惑。)OK,开始前做如下准备:
*Pixy上没有任何接线,没有电源,没有usb,没有IO,没有舵机等;
*你的计算机没有运行PixyMon(但是PixyMon已经在你的计算机上安装了);
*你自己的固件已经准备好了(.hex文件);

首先,将USB线插在计算机上

然后按下Pixy顶部白色的按钮,并且在保持按下按键的同时插上USB线。要同时完成,这可能是最麻烦的一个环节了。
Pixy上的LED会变的非常亮(白色)并且保持,这说明你已经进入了固件上传模式。因为你这是第一次上传固件,你的计算机会提示你安装固件,因为Pixy在固件上传模式下使用单独的驱动,所以计算机之前并没有安装过相应的驱动。这个过程只针对Windows用户,如果你用的是Mac,你可以直接掉过驱动安装部分。

Windows Vista、7或8

你应该会看到这样的下弹窗:

只需要等待驱动安装完成即可,期间你不想要做任何操作,仅仅是等待。

Windows XP

你会看到添加新硬件的对话框

点击,“No,not this time”然后点击“下一步”。然后点击“自动安装驱动”,然后点击“下一步”

驱动将会安装完成,等待完成后继续。

打开PixyMon

首先打开PixyMon,当PixyMon运行后,Pixy上的LED会关闭,你会看到如下信息“Pixy programming state detected”在PixyMon的命令窗口区。如果你没有看到上面信息,有可能是驱动还在安装,再多等一段时间。
选择菜单File➜Program,选取文件对话框将会弹出,浏览到你的新固件位置(.hex文件)然后选择相应文件,然后点击OK。Pixy会开始接受新固件,然后将其写入到flash中。这是非常快的,一般只需要2~3秒钟。当完成后,你会看到“done!”信息,你需要拔掉USB线然后重新插上来运行新固件。
任务完成。

再一次安装固件

下一次上传固件时,你的驱动已经安装,所以你只需要通过按键然后插上USB线进入固件上传模式。并且PixyMon可以已经在运行,这并不影响。

CMUcam5 Pixy:开源机器视觉传感器 Andy 2 年前 最后回复来自 Andy

安装云台系统

没买云台系统,暂时先不翻译了。

The pan/tilt mechanism when combined with Pixy, makes a fun demo — a good “hello world” for Pixy (no Arduino required). The Pixy pan/tilt mechanism comes in a kit and requires some assembly.
You will need the following (in addition to a Pixy and a pan/tilt kit):
A small phillips screwdriver

needle-nose pliers

small wire cutters

There are lots of different types of fasteners included in this kit. Refer to the picture below to help you find which fastener we are referring to in these instructions.

1. Find one of the long servo horns inside one of the servo baggies, and clip it on the 3rd hole from the end.

2. Put the servo horn on the servo and check both ends of travel. You can do this by moving the horn all the way to the right:

and then all the way to the left:

and adjusting the mounting angle of the horn such that the center of travel has the servo horn pointing downwards. Note, it's OK to move the servo in this way even though it requires a fair amount of force. And it makes a cool sound!
3. Find one of the servo horn fasteners in the one of the servo baggies. (Refer to the fastener picture above.) Screw the servo horn tightly. (In the picture below, the servo is shown with the servo horn pointing downwards, which should be roughly the center of travel.)

4. Remove the paper backing on the pan/tilt body (the smaller of the two acrylic parts).

5. Fit one of the servo mounting tab into the slot on the pan/tilt body.

6. Flip the body over and thread a cable tie through the cable tie slots in the body.

7. Thread another cable tie through the other cable tie slots in the body.

8. Tighten both cable ties by using pliers. It requires quite a bit of force to fully tighten!

9. Take the 2nd servo and place in the other hole in the body as shown in the picture. Note that the wires for the servos are pointing in opposite directions.


10. Grab two of the long 4-40 fasteners. (Refer to the fastener picture above.) Use these fasteners secure the 2nd servo.

11. Take all five right-angle brackets out and examine them. Notice that three of them have two threaded holes and and two of them have one threaded hole. We'll call these two-threaded and one-threaded brackets, respectively. Go ahead and separate these two bracket types to make things easier.
Grab a two-threaded bracket. If you look really closely, you'll notice that one of its legs is ever-so-slightly longer than the other. Say what? It's true--- I don't know why. But you can best see this by looking at the holes in the bracket. One of the holes in centered in its leg and the other hole is not centered, because its leg is slightly longer. Weird.
Take two long 4-40 fasteners and attach two two-threaded brackets to the body as shown in the pictures below. Attach them such that the short legs are touching the body and the long legs are pointing up.


Nice. Now put this assembly aside for now.
12. Take your Pixy and attach two one-threaded brackets to it as shown in the picture below. Use two short 4-40 fasteners to do this. (Refer to the fastener picture above.)

13. Take two nylon bushings and press them into the non-threaded holes in these brackets.

14. Slide the Pixy into the body assembly as shown. Use two long 4-40 fasteners to hold the two assemblies together. Don't tighten these fasteners too tight or it will cause binding. (This is the tilt axi,s and you want it to move freely.) Also make sure that the brackets are mounted squarely--- this can cause binding also. Tilt Pixy back and forth a couple times and make some adjustments if you feel any binding.


15. Plug in the servo wires into the servo connector on Pixy. (The servo connector is the little 6-pin connector labeled J3.) The pan axis goes on the left and the tilt axis goes on the right, and the yellow wires on both connectors face up. (Which is the tilt axis? It's the one with the servo horn.)

16. Use a cable tie to secure the wires to the body as shown. String the cable tie through the single slot in the body and around the outside. Do not tighten the cable tie fully yet.

17. Use the slots on the other side of the body to thread another cable tie and secure the wires on the other side as shown. The wires are longer than they need to be, so it requires some artistic arranging. Do not tighten this cable tie fully either.

18. Verify that there is enough slack in the cables to allow Pixy to tilt fully forward and backward.


19. When you're happy with the cable situation, make the ties snug, but not too tight (to save the wires) then flip over the assembly and clip the ends of the cable ties.

20. Remove the paper backing from both sides of the pan/tilt base.

21. Grab a circular servo horn from one of the servo baggies and attach it to the pan/tilt base with two short tapping fasteners. (Refer to the fastener picture above.) The servo horn has lots of holes -- rotate the servo horn until the holes on the servo horn line up with the holes in the pan/tilt base.

22. Attach rubber feet to the bottom of the base as shown. There are little holes in the pan/tilt base that are there to help you position the rubber feet.


23. Place the body assembly on the base assembly by attaching the horn to the pan servo. (The pan servo is the servo without the servo horn sticking out of the bottom.) Attach the servo horn such that the center of travel has the wide part of the base facing forward (where the camera lens is pointing). You can do this by moving the horn all the way to the right:

and then all the way to the left:

24. Find one of the servo horn fasteners in one of the servo baggies and attach the base to the body. (Here, the wide part of the base is facing forward, which should be close to the center of travel.)

25. Place a short 4-40 fastener through the eyelet of the wire pushrod and attach it to a two-threaded bracket, but don't tighten fully. The pushrod needs to be able to pivot around the screw. Attach the pushrod and fastener to the longer leg of the bracket.

26. Thread the pushrod into the bottom hole of the tilt servo horn. You need to insert the pushrod past the second bend.

27. Attach the bracket to Pixy with a short 4-40 fastener.

You're done!
What's next? Run the pan/tilt demo!

2

云台系统测试

OK, you've assembled the pan/tilt mechanism and it looks cool, but it would look even cooler if it actually moved. One nice thing is that you don't need a battery to move the pan/tilt -- the pan/tilt can use the USB cable for power, but you must use a 4 ft or shorter cable. (3 ft is common, and even better.) If you use a longer cable, there can be up to 1 volt of voltage drop along the cable, which is fine for Pixy, but the servos will malfunction. Also, before you run the pan/tilt demo, go ahead and teach Pixy an object.
There are two ways to run the pan/tilt demo.
Running the demo with the button

When Pixy first powers up, you'll notice that the LED turns on (white) for about 1 second, then flashes, then turns off. What's really happening is Pixy is asking you which program you want to run. Currently, Pixy ships with two programs:
the default tracking program that detects objects and streams them out the port you choose
the pan/tilt demo
So, power up Pixy, and when the LED turns on (white), hold down the button. The LED will turn red then orange, red then orange, etc. If you release the button when the LED is red, you will select the default tracking program. If you release the button when the LED is orange you will select the pan/tilt demo. So do that -- release the button when the LED is orange. The LED will flash orange a couple times which means "running program 2!"
And then Pixy should track your object. Yay!
A quick note on program selection -- normally, upon power up, if you don't press the button, Pixy "times-out" and just runs the default program, which is the tracking program, but you can configure which program is the default program from the PixyMon Configure Dialog.
Running the demo from PixyMon

If you're running PixyMon, you can run the demo (or any other program) at any time by selecting it in the Action menu. In particular, select Action➜Run the pan/tilt demo.
Pixy should then track your object and print the position to the command window. Yay!



CMUcam5 Pixy:开源机器视觉传感器 Andy 2 年前 最后回复来自 Andy