XLKe_xjf 发表于 2020-6-18 10:40:22

【虚谷号】智能分拣机器人



## **根据颜色智能分拣的机 器人**

案例提供:郑祥、林淼焱(温州)

生活中总会遇到分类的小物品,比如:家里混在一起的各类瓜子、学校里混在一起不同颜色的卡片纸条、创客空间里散落在地上的螺丝和螺帽、生活中产生的不同垃圾。

人工智能已经是现在非常热门的话题了,也为我们的物品分类分拣提供了很不错的解决思路。下面将以不同颜色(红色和绿色)的纸条的分拣为例,简单介绍一下智能分拣机器人的制作。

## **1 .原理**
虚谷号通过摄像头采集待分拣物品的图像,对图像中待分拣物的特征(如:颜色)进行分析,并根据特征的分析结果将待分拣物进行分拣。

智能分拣机器人的工作原理,如下图所示。




## **2. 原型设计**

智能分拣机器人的分拣平台原型设计如图所示。



当待分拣物在待分拣平台上时,虚谷号通过平台正上方的摄像头采集待分拣物(卡片)的图像,并分析该待分拣物的颜色;若虚谷号判断该待分拣的颜色属性是红色,则执行舵机向右侧旋转90度;反之,若虚谷号判断为绿色,则执行舵机向左侧旋转90度;进而完成分拣物品的功能。

因此,除了笔记本电脑、无线网络WIFI外,智能分拣机器人的制作还需要以下清单:




## **3.实践制作**

### **结构搭建**
步骤1:根据设计的原型,利用机器人结构件、螺丝、纸板、舵机搭建分拣平台,如图所示。



步骤2:将摄像头置于分拣平台的正上方,并调整好焦距。

步骤3:将摄像头(USB接口)、舵机连接到虚谷号上,最终效果如图所示。




### **编写程序**
通过U盘方式正确设置WIFI账号和密码后,将虚谷号和笔记本电脑同时连上WIFI热点,打开浏览器访问虚谷号内置的Jupyter,即可完成对虚谷号进行编程。

导入基本库,并做好应用摄像头的准备工作。

```
import cv2
from xugu import Servo #从 xugu 库中导入 Servo 类
from matplotlib import pyplot as plt
import time
def get_showcampic(fname):
    cap = cv2.VideoCapture(0) # 打开摄像头
    ret, frame = cap.read()       # 读摄像头
    display.clear_output(wait=True) # 设置在一个画面中刷新
    cv2.imwrite(fname,frame)
    plt.imshow(frame[:,:,::-1])
    plt.axis('off') #不显示坐标
    plt.show()
    cap.release()
    cv2.destroyAllWindows()
def get_color(frame):
    step=0
    red=0
    blue=0
    green=0
    print('开始处理')
    high, width, _ = frame.shape
    print('剪裁前行数%d,列数%d' % (high, width)) # 裁剪坐标为,截取图像的中心部分
    frame=frame
    high, width, _ = frame.shape
    print('剪裁后行数%d,列数%d' % (high, width))
    #读取图片中所有像素点的RGB值
    frame1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    for i in frame1:
      #i中的数据类型是一整行的像素点[]
      step+=1
      #读取图片像素点的步长,step==50则为50个像素点读取一次
      if (step==20):
            for point in i:
            #point中的数据类型是单个像素点
                red+=point
                green+=point
                blue+=point
            times=0
    red=red/len(i)
    green=green/len(i)
    blue=blue/len(i)
    return red,green,blue
while 1:
    servo=Servo(4)
    servo.write_angle(90)
    filename = r"test.jpg"
    get_showcampic(filename)
    frame = cv2.imread(filename)
    r,g,b=get_color(frame)
    if (g>r):
      print("更有可能是绿色物品")
      servo.write_angle(0)
      time.sleep(1)
      servo.write_angle(90)
      time.sleep(1)
    else:
      print("更有可能是红色物品")
      servo.write_angle(180)
      time.sleep(1)
      servo.write_angle(90)
      time.sleep(1)
    print('r:',r)
    print('g:',g)
    print('b:',b)
    time.sleep(5)
```
               

# **4.功能测试**

依次将不同颜色的红绿纸条放在待分拣平台上,红绿纸条分别被分拣到右边和左边的小盒子中,如图所示。虚谷号可以正确判断纸条的颜色,并且驱动舵机转向不同的方向。



本案例涉及到的所有代码,已经整合在虚谷号的固件中。


# **5. 项目总结**

智能分拣机器人的完成,可以让红绿颜色纸条的分拣变得轻松而简单。当然,生活中除了纸条以外,还有很多东西需要被分拣,例如:创客空间里的螺丝和螺帽,不同垃圾的分类。这些都可以通过虚谷号、摄像头结合一些简单的分拣结构就能完成,一起尝试思考一下:如何用虚谷号和摄像头做一个智能垃圾分类装置吧?

# **6. 参考资料**

https://blog.csdn.net/qq_42444944/article/details/89323039
页: [1]
查看完整版本: 【虚谷号】智能分拣机器人