0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CMUcam5 Pixy视觉相机传感器简介

李巍 来源:DevicePlus 作者:DevicePlus 2023-03-01 18:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

这篇文章来源于DevicePlus.com英语网站的翻译稿。

poYBAGPzE3SAY3vXAAxGe6Xb97M137.png

PixyMon 和 Arduino

该项目的目标是向您介绍CMUcam5 Pixy,并展示如何在您自己DIY的项目中实现相机功能,您会发现即使对于一个复杂的机电系统(比如轮式自主机器人)来说,这也是非常简单易执行的操作。Pixy是一种灵活、紧凑、可调节且易于设置的相机传感器,能够检测并传递某些类型对象的信息。我们将介绍有关相机的基础知识,并了解在Pixy和Arduino之间进行通信的一般方法。

硬件

Arduino Uno (您可以使用任何 Arduino)

CMUcam5 Pixy 相机

伺服电机 (S06NF)

一小块木头(用来将相机安装到伺服上, 我将只使用螺丝安装)

线缆 (用于相机USB MINI 以及Uno USB B)

用于伺服的外接5V电源(警告!如果您将伺服连接到您的Arduino上,并通过USB供电,您的 Arduino将会被烧坏)。

软件

Arduino IDE 1.6.9

PixyMon 软件

用于Arduino的PixyMon库

pYYBAGPzE3iAbAMzAAnLVXYiGHU439.png

图1:CMUcam5 Pixy相机

CMUcam5 Pixy是一款小型、易于操作、成本低且开源的相机。它拥有独立的处理器,每秒可对探测到的信息进行50次输出。它还可以与Arduino、Raspberry Pi等连接。CMUcam5 Pixy使用非常常见的接口,例如SPI、12C、UART以及USB,并且具有一个自定义程序,可让您连接到您的设备上,点击此处可以免费下载。

设置Pixy

点击此处下载软件PixyMon并安装。安装时,请通过USB连接Pixy,然后检查RGB Led灯是否亮起。

打开PixyMon,并确保Pixy是通过USB进行连接的。如果所有连接正确,它将输出相机所“看到”的内容。例如,我放置了一个紫色的盖子作为测试对象,来检查Pixy相机的输出。

poYBAGPzE3qAIhrAAAKHyJfHQhI642.png

图2:Pixy Raw输出图像

进入“Action”子菜单,并点击“Set Signature 1”,视频将会停滞,您可以选择想要用相机检测的颜色/对象。

pYYBAGPzE3yAQrvDAAD3mtxQ7Rs020.png

标记好颜色/对象后,视频将会开始播放,并且相机传感器将会对颜色/对象进行检测,如图3所示。在同一时间,您最多可以设置7个想要检测的对象/颜色。如果您进行了正确标记,并且设置了视野范围,就可以实现对多个对象/颜色的检测。

pYYBAGPzE32ABPIdAAKwN5szKfQ512.png

图3:Pixy检测下的视图

如果想要清除预设标记,您可以点击Action -> Clear All Signatures,直接清除所有标记 ,或者选择Clear Signature 来对标记一一清除(在控制页面输入标记编号)。

点击Settings -> Signature 1进行调整,您可以修改Pixy视野尺寸的大小。

其他设置(File -> Configure

通过更改相机亮度,您可以在黑暗环境中进行信息探测。

Camera 选项中,您可以调整白平衡,这非常有用。

使用 Action -> Default 程序,您将只看到所检测到的颜色,没有视频输出。

有一个专用于在您的Arduino上使用Pixy的自定义库。我使用的是Arduino Uno,但是您可以使用任何版本。这个库非常有用,不仅为初学者提供了简单的示例,也为专家提供了绝佳的开发平台。

首先,我们要设置一个检测对象,类似于我们之前在设置相机时所进行的操作。

点击此处下载Arduino库(在“Arduino libraries and examples ”文件夹下)。[https://www.cmucam.org/attachments/download/1157/arduino_pixy-0.1.7.zip]。这将实现您的Arduino和Pixy相机之间的通信。然后,将其添加到Arduino IDE(Sketch -> Include Library -> Add .zip Library)。

点击Example->Pixy->hello_world,打开一个名称为hello_world的简单示例。

poYBAGPzE3-AJ9qaAADYlCkBtL0097.png

将其上传到您的开发板上,并打开终端(Tools -> Serial Monitor)。

此时,您将看到一条信息,显示“Starting… ”,然后将显示有关检测到的对象的信息。

hello_world代码释义

setup() 函数中,对编号和pixy进行初始化和相关设置。

loop() 函数包含几个变量,这些变量用于打印以及从pixy获取模块。使用 pixy.getBlocks() 函数,我们可以获取检测到的对象。if (i%50==0) 代码可以用来设置我们想要获取信息的FPS。如果我们想要每秒钟获取一条信息,就要写 %1 而不是 %50

/*
 *  explaining the (((pixy.blocks[j].x)/2)+10)-60
 *  with pixy.blocks[j].x we get the x position of the object detected
 *  we divide it because the max value it can read is 320
 *  I did the + 10 for small adjustments 
 *  the -60 is used for rotating away from the object
 */
 
#include 
#include 
 
Servo myservo;  // create servo object to control a servo
Pixy pixy;  	// create pixy object for controlling the pixy camera
 
// function for testing the servo
void test_camera(){ 
  myservo.write(0);
  delay(1000);
  myservo.write(90);
  delay(1000);
  myservo.write(180);
  delay(1000);
  myservo.write(90); // get the camera centered
}
 
void setup() {
  //Serial.begin(9600); // initialize serial
  myservo.attach(9);	// attaches the servo on pin 9 to the servo object
  test_camera();    	// executing testing for the servo
  pixy.init();      	// initing the pixy camera
}
 
void loop() {
  //variables
  static int i = 0;
  int j;
  uint16_t blocks;
  char buf[32]; 
  int32_t xpos;
  
  // grabing the blocks
  blocks = pixy.getBlocks();
  
  // If there are detect blocks
  if (blocks)
  {
	i++;
 
	// we are using 50FPS 
	if (i%50==0)
	{
  	sprintf(buf, "Detected %d:n", blocks);
  	for (j=0; j 180 || ((((pixy.blocks[j].x)/2)+10)-60) < 0 ) 
    	{
      	myservo.write(90);  // if at min or max go to the middle
    	}
    	else{
 
    	// if there is no problem with min and max
    	myservo.write((((pixy.blocks[j].x)/2)+10)-60);
    	}
  	}
	}
  }
}

sprintf(buf, “Detected %d:n”, blocks); 输出由ID检测到的当前对象,并将必要的数据放入缓冲区。在for循环中,我们将会获得所有类型的信息,包括检测对象、宽度、高度、x、y以及标记信息。

poYBAGPzE4GAH2bsAAGnXtETRqI138.png

通过伺服进行控制

现在,Pixy已经成功连接到了Arduino,我将做一个简单的实验,将Pixy连接到伺服,并且在相机“看到“某种类型的颜色/对象时让伺服控制离开。

在本实验中,我将把Pixy的检测对象设置为圆形紫色容器,然后进行编程,这样一来,每当这种容器进入相机的视野,伺服就会控制离开这个物体。

装置结构:

poYBAGPzE4WAFDi4AAlTWQBELaU503.png

图4:已完成的装置结构

我使用的是S06NF伺服,并且用小螺丝钉将伺服连接到相机上,如图5所示。

pYYBAGPzE4iAK3tDAAor_9-Zsno432.png

图5:相机与伺服电机连接

对于硬件部分,仅进行简单的接线。将SPI线缆连接到相机上,将伺服与Arduino连接。我使用引脚9来控制伺服。

poYBAGPzE4qActJuAALlCa0I-9s452.png

图6:接线图

警告!

不要忘记连接GND。如果您没有将电源、伺服和Arduino GND连接在一起,伺服器将会奔溃!

这里,我使用的是用于5V电源的旧型适配器。

总结

在本教程中,我们介绍了PixyMon相机的基础知识,并且开发了一个简单的伺服驱动应用。我们创建了一个会离开检测对象而不是对象追踪的系统。在第二部分中,我们会继续深入拓展这个理念,开发出一种具有多个伺服的交互系统,通过将一个球作为对象,实现对桌子方位的控制。

如果您有任何意见或疑问,请在Google +上留言,并关注我们的动态。

继续阅读本文的第二部分 >

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源
    +关注

    关注

    185

    文章

    18707

    浏览量

    261340
  • 传感器
    +关注

    关注

    2573

    文章

    54363

    浏览量

    785881
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195926
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    从3D传感器到立体相机,解锁工业应用新可能

    3D传感器是实现深度感知的核心技术。这些传感器广泛应用于多种常见的3D视觉技术中,例如立体相机、激光雷达(LiDAR)、飞行时间(ToF)相机
    的头像 发表于 11-28 17:03 1538次阅读
    从3D<b class='flag-5'>传感器</b>到立体<b class='flag-5'>相机</b>,解锁工业应用新可能

    工业CMOS相机的原理及基础知识

    信号转变成有序的电信号。其成像原理与小孔成像类似,但更为复杂。当被摄物体反射的光线通过工业镜头折射后,会投射到相机的感光传感器上,这个感光传感器通常是电荷耦合器件(
    的头像 发表于 11-04 17:25 452次阅读
    工业CMOS<b class='flag-5'>相机</b>的原理及基础知识

    工业相机传感器CCD的原理及基础知识

    工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号。其成像原理与小孔成像类似,但更为复杂。当被摄物体反射的光线通过工业镜头折射后,会投射到相机的感光传感器
    的头像 发表于 10-13 17:37 1168次阅读
    工业<b class='flag-5'>相机</b><b class='flag-5'>传感器</b>CCD的原理及基础知识

    事件相机会成为自动驾驶的下一代核心传感器

    。   事件相机是模仿生物视觉系统的一种新型视觉感知传感器,只对场景中的变化作出响应,工作原理和传统的CCD和CMOS图像传感器有本质的区别
    的头像 发表于 08-25 08:36 7457次阅读

    相机传感器物理建模中的畸变设计

    在自动驾驶感知系统中,相机传感器的应用十分广泛,无论是前视,侧视,环视甚至车内,相机传感器都发挥着至关重要的作用,目前带有ADAS和自动驾驶功能的汽车,大多配备七八个甚至十几个
    的头像 发表于 08-12 16:59 2137次阅读
    <b class='flag-5'>相机</b><b class='flag-5'>传感器</b>物理建模中的畸变设计

    机器视觉系统工业相机的成像原理及如何选型

    机器视觉系统是一种模拟人类视觉功能,通过光学装置和非接触式传感器获取图像数据,并进行分析和处理,以实现对目标物体的识别、测量、检测和定位等功能的智能化系统。其目的是让机器能够理解和解释视觉
    的头像 发表于 08-07 14:14 1010次阅读
    机器<b class='flag-5'>视觉</b>系统工业<b class='flag-5'>相机</b>的成像原理及如何选型

    实拍案例 | 振动盘上必不可少的视觉传感器VDS10

    机械式检测方式难以满足高精度需求。视觉传感器技术的引入,为这一难题提供了高效解决方案。点击视频揭秘明治视觉传感器VDS10如何做到“火眼金睛”判断正反检测流程步骤
    的头像 发表于 07-15 07:34 807次阅读
    实拍案例 | 振动盘上必不可少的<b class='flag-5'>视觉</b><b class='flag-5'>传感器</b>VDS10

    RGB+EVS视觉融合相机:事件相机的革命性突破​

    事件相机(EVS)是一种新型的视觉传感器,其设计灵感来源于生物视觉系统。
    的头像 发表于 07-01 14:08 3709次阅读
    RGB+EVS<b class='flag-5'>视觉</b>融合<b class='flag-5'>相机</b>:事件<b class='flag-5'>相机</b>的革命性突破​

    苹果正测试2亿像素相机传感器,或应用于iPhone 18

    5月27日消息,博主@数码闲聊站发布微博透露苹果正在为iPhone测试2亿像素相机传感器,该博主同时在评论区透露相应传感器“大概率用于主摄端”,预计这一配置将应用于要在2026年发布的
    的头像 发表于 05-27 18:15 874次阅读
    苹果正测试2亿像素<b class='flag-5'>相机</b><b class='flag-5'>传感器</b>,或应用于iPhone 18

    索尼将于5月28日发布FX2相机 搭载3300万像素传感器

    相同的 3300 万像素传感器,并内置 AI 芯片,支持先进的 AI 自动对焦功能。 相机配备机械快门,支持 4K60 Super 35 模式,并首次引入 32 位浮点音频技术,其电子取景尺寸较大,堪比
    的头像 发表于 05-16 18:17 969次阅读
    索尼将于<b class='flag-5'>5</b>月28日发布FX2<b class='flag-5'>相机</b> 搭载3300万像素<b class='flag-5'>传感器</b>

    视美泰EVS事件融合相机新品“灵光一号”正式发布,开启视觉新纪元

    的高端产品,基于APS(有源像素传感器ActivePixelSensor)+EVS(事件驱动传感器,Event-basedVisionSensor)的视觉融合相机
    的头像 发表于 02-05 17:10 2399次阅读
    视美泰EVS事件融合<b class='flag-5'>相机</b>新品“灵光一号”正式发布,开启<b class='flag-5'>视觉</b>新纪元

    三星或打破苹果相机传感器供应格局

    长期以来,苹果公司在相机传感器方面一直高度依赖索尼供货,这一局面在最新的iPhone 16系列中依旧未变。然而,近日有消息称,这一稳定的供应链关系或将迎来重大转变。 据爆料人士透露,为苹果提供
    的头像 发表于 01-03 14:36 691次阅读

    Sony偏振传感器加持 Blackfly S工业相机突破视觉成像反光难题

    Q为什么采用传感器偏振?A:视觉系统一直都在试图克服玻璃、塑料和金属等反光表面产生的动态或多余光线、反射、朦胧和眩光影响。TeledyneFLIR的BlackflyS机器视觉工业相机
    的头像 发表于 12-27 17:02 1457次阅读
    Sony偏振<b class='flag-5'>传感器</b>加持 Blackfly S工业<b class='flag-5'>相机</b>突破<b class='flag-5'>视觉</b>成像反光难题

    从2D走向3D的视觉传感器

    电子发烧友网报道(文/黄山明)作为机器视觉系统的主要信息源,视觉传感器一直在众多视觉设备中占据重要位置。尤其是通过视觉
    的头像 发表于 12-27 00:22 3283次阅读