亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Rocky Rover:机器人视觉系统 PixyCam 和 Arduino 101

组件和用品

Arduino 101
× 1
Adafruit Motor/Stepper Shield V2
× 1
SparkFun Dagu DG102 坦克底盘
× 1
AA 电池
× 1
USB-A 转 B 线
× 1
Adafruit USB 电池组
× 1
M2.5 带螺母和螺钉的支架
× 4
公母极化 JST 电池连接器
× 1
男性标题 40 位置 1 行 (0.1")
× 1
公/公跳线
× 1
Pixy (CMUcam5)
× 1
Pixy Pan-Tilt Kit for Pixy
× 1

应用和在线服务

Arduino IDE
Blynk

关于这个项目

带有 PixyCam 的基于英特尔 Arduino 101 的 Rover!

Hackster Live 活动很棒!英特尔赞助了我们的 Hackster Dallas 活动,并向我们发送了一些英特尔 Arduino 101 来建造流浪者。感谢英特尔,感谢 Arduino。这是我为这次活动建造的漫游者。

我按照 Johnathan Hottell 的教程构建了这个设备。他制作了一些视频来构建 BLE Rover。而且很容易上手!在这里查看。这是 Johnathan Hottell 的视频。

我的 Rover 有 4 个电机,所以我遵循了这个。

建造漫游者后,将其与 Blynk 连接起来。我决定改进构建并添加一个 PixyCam。我将电池座移到前面,这样我就可以安装云台相机。

PixyCam

PixyCam 让机器人视觉变得简单。 Pixy 是一款用于 DIY 机器人的快速视觉传感器,只需按一下按钮,就可以轻松教 Pixy 一个物体。它能够同时跟踪数百个对象,并且只提供它正在跟踪的数据。

我决定追踪一个橙色南瓜。

我很惊讶让它变得如此容易。这是将 PixyCam 连接到 Arduino 的说明链接。单击此处获取平移/倾斜装置的组装说明。我很高兴它有很多图片,很容易理解。我按照设置和构建说明,如何与 Arduino 集成。我测试了他们的例子。

以下是我对 API 的了解。

PixyCam Arduino API

将 Pixy 与 Arduino 结合使用非常简单。您只需包含 SPI 和 Pixy 标头:

#include  #include   

并通过将这个小家伙放在你的 setup() 之外来创建一个 Pixy 的全局实例 和 loop() 功能:

小精灵小精灵;  

Arduino 库中最重要的方法是 getBlocks() ,返回 Pixy 检测到的对象数量。然后你可以查看 pixy.blocks[] 关于每个检测到的对象的信息的数组(每个检测到的对象一个数组成员。)每个数组成员 (i ) 包含以下字段:

  • pixy.blocks[i].signature 检测对象的签名编号(正常签名为1-7)
  • pixy.blocks[i].x 被检测物体中心的x位置(0到319)
  • pixy.blocks[i].y 被检测物体中心的y位置(0到199)
  • pixy.blocks[i].width 检测到的物体的宽度(1到320)
  • pixy.blocks[i].height 检测物体的高度(1到200)
  • pixy.blocks[i].angle 如果检测到的物体是颜色代码,则物体检测到物体的角度。
  • pixy.blocks[i].print() 将检测到的对象信息打印到串口的成员函数

所以用你的 Arduino 与 Pixy 交谈很简单!有关 Arduino 库和 API 的更多信息,请转到此处。这是用于 Rover 的代码。我修改了原始 BLE 代码并添加了对象跟踪。设置过程中:

void setup() { ..... pixy.init(); ....}  

主循环看起来像这样:

void loop() { ...... // 读取像素数据并获取块 static int i =0;国际 j; uint16_t 块;字符缓冲区[32]; int32_t panError,tiltError;块 =pixy.getBlocks(); //如果有块 if (blocks) { panError =X_CENTER-pixy.blocks[0].x;倾斜错误 =pixy.blocks[0].y-Y_CENTER; panLoop.updatePan(panError);倾斜循环。更新(倾斜错误); pixy.setServos(panLoop.m_pos,tiltLoop.m_pos);我++; // 框架会卡住 Arduino if (i%10==0) { int trackedBlock =0; sprintf(buf, "检测到 %d:\n", 块); Serial.print(buf);长最大尺寸 =0; for (j=0; j maxSize) { trackedBlock =j;最大尺寸 =新尺寸; } } int32_t followError =RCS_CENTER_POS - panLoop.m_pos; // 大小是对象的面积。 // 我们保持最后 8 个的运行平均值。 size +=pixy.blocks[trackedBlock].width * pixy.blocks[trackedBlock].height;尺寸 -=尺寸>> 3; int forwardSpeed =约束(400 - (size/256), -100, 400); int32_t 差分 =(followError + (followError * forwardSpeed))>>8; int leftSpeed =约束(forwardSpeed + 差分,-400, 400); int rightSpeed =约束(forwardSpeed - 差分,-400, 400); motor1->setSpeed(leftSpeed); //左马达3->setSpeed(leftSpeed); motor2->setSpeed(rightSpeed); //左马达4->setSpeed(rightSpeed);双倍宽度 =pixy.blocks[trackedBlock].width; if (width <=5) { } else if (width <20 &&!running) { Serial.println("running");电机1->运行(前进);电机3->运行(前进);电机2->运行(前进);电机4->运行(前进);运行 =真; } else if (width> 80 &&!running) { Serial.println("running");电机1->运行(向后);电机3->运行(向后);电机2->运行(向后);电机4->运行(向后);运行 =真; } else if (width>=20 &&width <=80 &&running) { motor1->setSpeed(128);电机2->设置速度(128); motor3->setSpeed(128); motor4->setSpeed(128);电机2->运行(释放);电机4->运行(释放);电机1->运行(释放);电机3->运行(释放);运行 =假; } } } }  

为了在没有 PixyCam 控制的情况下运行 Blynk,请戴上镜头盖。它将确保 PixyCam 不会干扰控制机器人。如果这个项目让你对在Arduino编程或在下一个项目中使用PixyCam感兴趣,请点击“尊重项目”按钮并关注我。

欢迎提问。

代码

岩石漫游者

制造工艺

  1. Arduino pov 视觉时钟
  2. Arduino 报警系统:SERENA
  3. Arduino 3D 打印机械臂
  4. Arduino Power
  5. Nunchuk 控制机械臂(使用 Arduino)
  6. 英特尔 Arduino 101 BLE Blynk Tank
  7. Arduino101 / tinyTILE BLE:相亲太阳镜
  8. 视觉的坚持
  9. Arduino Apple Watch
  10. 地下室/爬行空间通风系统
  11. 计步器(Arduino 101)
  12. 机器人手术视觉系统的照明设计注意事项