Pixy(CMUCAM5)入门学习

也可以参考这个网址:http://www.makerlab.me/guides/6/articles/34

1.教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摄像头所看到的图像中间部分的颜色。

用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里,所以当你下一次上电时,这些标记都是直接可用的。
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可以已经在运行,这并不影响。
3. 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的头文件:
这里写图片描述

并且在setup()和loop()函数外面创建一个全局的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”参数决定了输出方式(UART/SPI/Arduino SPI/I2C)。
这里写图片描述
如果你将鼠标指针移动到“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值;
这里写图片描述

在牛角座的上边相应序号为左上角1号脚:
这里写图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值