Raspberry Pi球跟踪机器人使用处理

Raspberry Piçè·è¸ªæºå¨äººä½¿ç¨å¤ç

机器人,人工智能和机器学习领域正在迅速发展,它必将在不久的将来改变人类的生活方式。机器人被认为通过传感器和机器学习处理来理解现实世界并与之互动。图像识别是一种流行的方式,通过像我们一样通过相机观察现实世界,机器人被认为可以理解物体。在这个项目中,让我们利用Raspberry Pi的强大功能构建一个可以跟踪球并跟随它的机器人,就像踢足球的机器人一样。

OpenCV是一个非常着名的开源工具,用于图像处理,但在本教程中为了简单起见,我们使用的是Processing IDE。由于ARM的处理也发布了用于处理的GPIO库,因此我们不必再在python和处理之间切换以使用Raspberry Pi。听起来很酷吧?那么让我们开始吧。

硬件要求:

  1. 树莓派
  2. 相机模块用带状电缆
  3. 机器人底盘
  4. 带轮的减速电机
  5. L293D电机驱动器
  6. 移动电源或任何其他便携式电源

编程要求:

  1. Raspberry pi的监视器或其他显示器
  2. Pi的键盘或鼠标
  3. 处理ARM软件

注意:在编程期间必须通过导线将显示器连接到Pi,因为只有这样才能查看摄像机的视频

 

在Raspberry Pi上设置处理:

如前所述,我们将使用处理环境来编程我们的Raspberry Pi,而不是使用python的默认方式。因此,请按照以下步骤操作:

步骤1: -  将Raspberry Pi连接到显示器,键盘和鼠标,然后将其打开。

第2步: -  确保Pi连接到活动的互联网连接,因为我们即将下载一些东西。

步骤3: -单击Processing ARM,下载Raspberry Pi的处理IDE。下载将采用ZIP文件的形式。

步骤4: -下载后,提取您首选目录中ZIP文件夹中的文件。我刚刚在桌面上提取它。

步骤5: -现在,打开解压缩的文件夹,然后单击名为processing的文件。它应该打开一个窗口,如下所示。

å¤ç软件çªå£

第6步: -这是我们输入代码的环境。对于熟悉Arduino的人,不要感到震惊是IDE看起来与Arduino类似,程序也是如此。

第7步: -我们需要两个库来完成我们的球跟踪程序,安装然后只需单击草图 - >导入库 - >添加库。将打开以下对话框。

å¤ç中çå¾ä¹¦é¦

 步骤8: -使用左上角的文本框搜索Raspberry Pi并按Enter键,搜索结果应该如下所示。

rasberry-piåºå¨å¤ç

步骤9: -搜索名为“GL Video”和“Hardware I / O”的库,然后单击“安装”进行安装。确保安装两个库。

第10步: -根据您的互联网安装将需要几分钟。完成后,我们就可以处理软件了。

电路原理图:

Raspberry Pi球跟踪项目的电路图如下所示。

Raspberry Piçè·éå¨æºå¨äººä½¿ç¨å¤çççµè·¯å¾

如您所见,该电路涉及PI摄像头,电机驱动器模块和连接到Raspberry pi的一对电机。整个电路由移动电源组供电(在上面的电路中由AAA电池代表)。

由于Raspberry Pi上没有提到引脚细节,我们需要使用下图来验证引脚

为了驱动电机,  我们需要四个引脚(A,B,A,B)。这四个引脚分别从GPIO14,4,17和18连接。橙色和白色线一起形成一个电机的连接。所以我们有两个这样的两个电机对。

电机连接到  L293D电机驱动器  模块,如图所示,驱动器模块由电源组供电  。确保移动电源的接地连接到Raspberry Pi的接地,然后才能连接。

这就是我们完成了硬件连接,让我们回到我们的处理环境并开始编程,教我们的机器人如何跟踪球。

Raspberry Piçè·è¸ªæºå¨äººä½¿ç¨å¤çççµè·¯å¾

Raspberry Pi Ball追踪计划:

该项目的完整Processing程序在本页末尾给出,您可以直接使用。在下面,我已经解释了代码的工作,以便您可以将它用于其他类似的项目。

计划的概念是很简单的。虽然该项目的目的是跟踪一个球,但我们实际上并不打算这样做。我们只是用它的颜色来识别球。众所周知,视频只不过是连续的图片框架。所以我们拍摄每张照片并将其分成像素。然后我们将每个像素颜色与球的颜色进行比较; 如果找到匹配,那么我们可以说我们找到了球。有了这些信息,我们还可以识别屏幕上球的位置(像素颜色)。如果位置最左边,我们将机器人向右移动,如果位置最右边,我们将机器人向左移动,使像素位置始终保持在屏幕的中心。您可以观看Daniel shiffman的Computer Vision视频,以获得清晰的图像。

一如既往,我们首先导入我们下载的两个库。这可以通过以下两行来完成。硬件I / O库用于直接从处理环境访问PI的GPIO引脚,glvideo库用于访问Raspberry Pi相机模块。 

import processing.io.*;
import gohai.glvideo.*;

设置功能中,我们初始化输出引脚以控制电机,并从pi相机获取视频并在320 * 240的窗口中调整大小。

void setup() {
  size(320, 240, P2D);
  video = new GLCapture(this);
  video.start();
  trackColor = color(255, 0, 0);
  GPIO.pinMode(4, GPIO.OUTPUT);
  GPIO.pinMode(14, GPIO.OUTPUT);
  GPIO.pinMode(17, GPIO.OUTPUT);
  GPIO.pinMode(18, GPIO.OUTPUT);
}

空隙平局是像无限循环此循环内的代码将被只要程序终止执行。如果有相机来源,我们会阅读其中的视频

void draw() {
   background(0);
  if (video.available()) {
    video.read();
  }}

 

然后我们开始将视频帧分割成像素。每个像素的值为红色,绿色和蓝色。这些值存储在变量r1,g1和b1中

for (int x = 0; x < video.width; x ++ ) {
    for (int y = 0; y < video.height; y ++ ) {
      int loc = x + y*video.width;
      // What is current color
      color currentColor = video.pixels[loc];
      float r1 = red(currentColor);
      float g1 = green(currentColor);
      float b1 = blue(currentColor);

为了最初检测球的颜色,我们必须点击颜色。一旦点击,球的颜色将存储在名为trackColour的变量中。

void mousePressed() {
  // Save color where the mouse is clicked in trackColor variable
  int loc = mouseX + mouseY*video.width;
  trackColor = video.pixels[loc];
}

 一旦我们有了轨道颜色和当前颜色,我们就必须比较它们。这种比较是使用dist函数。它会检查当前颜色与轨道颜色的接近程度。

float d = dist(r1, g1, b1, r2, g2, b2);

对于完全匹配,dist值将为零。因此,如果dist的值小于指定值(世界记录),那么我们假设我们已经找到了轨道颜色。然后我们得到该像素的位置并将其存储在最接近X和最近Y的变量中以找到球的位置

if (d < worldRecord) {
        worldRecord = d;
        closestX = x;
        closestY = y;
      }

我们还在找到的颜色周围绘制一个椭圆,表示已找到颜色。位置的值也会打印在控制台上,这在调试时会有很大帮助。

if (worldRecord < 10) {
    // Draw a circle at the tracked pixel
    fill(trackColor);
    strokeWeight(4.0);
    stroke(0);
    ellipse(closestX, closestY, 16, 16);
    println(closestX,closestY);

最后,我们可以比较最近的X和最近的Y的位置,并调整电机,使颜色到达屏幕的中心。以下代码用于向右转动机器人,因为发现颜色的X位置位于屏幕的左侧(<140)

if (closestX<140)
    {
     GPIO.digitalWrite(4, GPIO.HIGH);
     GPIO.digitalWrite(14, GPIO.HIGH);
     GPIO.digitalWrite(17, GPIO.HIGH);
     GPIO.digitalWrite(18, GPIO.LOW);
     delay(10);
     GPIO.digitalWrite(4, GPIO.HIGH);
     GPIO.digitalWrite(14, GPIO.HIGH);
     GPIO.digitalWrite(17, GPIO.HIGH);
     GPIO.digitalWrite(18, GPIO.HIGH);
     println("Turn Right");
    }

同样,我们可以检查X和Y的位置,以控制所需方向的电机。与往常一样,您可以参考页面底部的完整程序。

Raspberry Pi球跟踪机器人的工作:

一旦你准备好硬件和程序,就可以享受一些乐趣了。在我们测试我们的机器人之前,我们应该确保一切正常。将Pi连接到监视器并启动处理代码。您应该在小窗口上看到视频Feed。现在,将球带入框架内并点击球,教导机器人它应该跟踪这种特定的颜色。现在在屏幕上移动球,您应该注意到车轮在旋转。

使ç¨å¤ç2çRaspberry-Piçè·éå¨æºå¨äººçå·¥ä½

使ç¨å¤ççRaspberry-Piçè·éå¨æºå¨äººçå·¥ä½

如果一切都按预期工作,请在地面上释放机器人并开始使用它。 确保房间均匀照明,  以获得最佳效果。该项目的完整工作如下  视频所示。希望你理解这个项目,并喜欢建立类似的东西。如果您有任何问题,请随时在下面的评论部分发布或提供帮助。

 

猜你喜欢

转载自blog.csdn.net/qq_42444944/article/details/89351927