【RaspberryPi5开发板方案创意赛】树莓派5“解魔方机器人”---视觉系统设计【过程帖3】
解魔方的第一步,是识别出魔方6个面的色块分布,进而才能进行求解。因此视觉识别是魔方机器人的最初部分,也是非常重要的一部分。我们采用的方案,是基于 Python + OpenCV 的方案。 这个方案呢,说实在一般都是在工控机上完成的,工控机上运行windows或linux均可。 但是工控机过于庞大,树莓派5强大的运算能力赋予我们直接用树莓派单板计算机来执行这块的能力。因此一方面为了尽量榨干 树莓派5的性能,也为了减小成本,最终使“解魔方机器人”更加紧凑。
基本上是将 linux工控机上的方案,移植到了树莓派5上。尽量简略,给大家介绍一下, 包括求解任意随机打乱魔方的算法。
2.1工作原理
1.概述
机器视觉是以机器代替人眼采集图像识别的一种技术,其使用视觉产品将被摄目标转化成图像信号传递给图像处理系统。它能根据 其蕴含的像素点的分布、亮度、色彩饱和度等信息产生数字化信号,经过图像处理系统一系列的处理加工,最后输出识别结果以控制现场的设备动作。
2.流程

图2-1视觉采集流程图
机器采集---相机靶面成像---图像处理---输出识别结果
3.平台工具介绍
图像处理软件:在图像获取与预处理阶段所使用的库与算法源于OpenCV。

图2-2 OpenCV-Python
编程软件:

图2-3 Visual Studio Code
使用Visual Studio Code编写Python代码,通过python3-opencv调用OpenCV 函数库内的算法。
硬件:
-- WN-HD720P摄像头4个:
-- 4个720P高清摄像头,负责采集魔方的六个面。
-- 上下面的摄像头分别负责采集两个面,侧面的摄像头负责采集魔方剩余的两个面。
-- 树莓派Raspberry-Pi 5B:
Raspberry-Pi 5B具有四个USB接口,刚好可以连接四个WN-HD720P摄像头用于采集图像。
2.2主要功能
2.2.1 图像采集算法
1.组网:
通过终端修改树莓派的ip地址至当前路由器的网段192.168.1.XXX。
修改电脑网段至192.168.1.XXX。
2.视频网页共享:

图2-4 摄像头获取的四个视频,由上位机共享至网页
3.图片采集:
使用Visual Studio Code编程,将共享至网页的4个摄像头拍摄的视频截取一帧保存至树莓派内。
2.2.2 颜色信息获取算法
高斯模糊:
由于图像受环境光线影响较大,例如反光可能导致魔方被识别成白色,所以使用高斯模糊操作,对图像进行平滑处理,使图像更容易被机器识别。设置卷积核为5 x 5大小,对图像进行GaussianBlur高斯模糊图像平滑处理,以便于视频的颜色采集。
HSV颜色值域的采集:
想要机器识别颜色首先需要它认识颜色,在这里我们采用手动创建滚动条方式选取魔方某种颜色的上限值和下限值,创建滚动条手动识别HSV颜色值域。值得注意的是由于光照有偏差,所以采集颜色不要过于精确,要留有一定余量。在能够识别的基础上,采集上下限数值差距越大,程序的鲁棒性就越强。
彩色空间变换:
RGB 模型:RGB 模型计算方式较为直观,由于摄像头返回的图像格式为 RGB 模型的格式,无需格式转换可直接使用(虽然OpenCV为颜色三通道为BGR但是可以直接使用)。RGB 模型区分颜色正确率相对较低。

图2-5 RGB颜色模型
HSV 模型:HSV模型三个变量不够直观,并且由BGR模型转换成HSV需要损耗大量时间,但是优点为准确率高。为了追求更高的正确率,我们将之前平滑处理过的图像进行彩色空间的转换,将原本不容易分辨的BGR模型转换成颜色对比度较为明显的HSV模型方便颜色的采集与识别。
图2-6 HSV颜色模型
坐标选取与导出:
获得透视变换所需要的魔方棱与棱交点,将所需的像素坐标点输出时,需要特别注意,图像拍摄时的像素是(x,y)排列,但是图像中的像素坐标在OpenCV中是以(y,x)排列,因此在透视变换的时候需要将x,y坐标反向。
透视变换(Perspective Transformation):

图2-7 透视变换效果图
由于采集到的图像并非是正对魔方每面拍摄,使用采用透视变换方法展开采集到的魔方每个面的图像至正方形,这样能加强魔方每个面的各个采集点的采集准确度以及颜色识别的精确度。
颜色识别:
由于魔方安装到机器人上之后,与摄像头的相对位置基本不变,因此在摄像头中的因此在摄像头视野中,各个颜色块所处的坐标大体上是不变的,但是受到安装误差和夹爪结构上的影响,魔方采集点极易出现偏差,如果是采用固定采集点识别区域可能偏离至魔方黑边甚至是偏离至其它色块,基于以上情况,基于对魔方的色块边缘检测我们将原本的固定识别点位更改成计算魔方色块中心获得的活动点位以增强魔方识别程序的鲁棒性。算法上,我们抛弃了原本基于阈值处理的魔方掩膜算法,使用SVM向量机来预测识别魔方的颜色。能够做到把颜色识别时间精确控制在0.5--0.6s之间。

(a)固定点位采集

(b)活动点位采集
图2-8 魔方点位采集视图
SVM支持向量机

(a)SVM原理图 (b)SVM训练数据集
图2-9 SVM向量机原理及训练图
SVM支持向量机是一种监督学习的广义线性分类器。其基本原理是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。用通俗易懂的方式来说,我们训练SVM向量机识别某一种颜色就需要告诉机器这个颜色是什么样子,因此我们需要用到庞大的自定义标签的数据集去训练SVM使它在三维空间内展开大量向量。这样,在采集到了一组新的颜色数据后,向量机就能凭借训练好的数据模型区分颜色。
对于本身是二分类算法的魔方求解支持向量机来说,支持向量机并行地设置6个分类器。对于红色类,样本只有红色类和其他类;对于绿色类来说,样本只有绿色类和其他类,依此类推,难以求解的多分类问题就转变成了多个二分类问题。对于支持向量机,我们需要设置好模型类型、核函数、迭代终止条件等一系列参数,然后根据颜色输入对应下标写入保存到数据文件内,在需要使用时调用数据文件进行SVM预测即可。
颜色字符串的生成:
魔方颜色字符串生成的规律为:
U(Up上面)R(Right右面)F(Front正面)D(Down下面)L(Left右面)B(Back面)从U面的第一个色块算起(左上角)至最后一个色块(右下角)分别为:
U1、U2、U3、U4、U5、U6、U7、U8、U9 以此类推生成各个面共54个色块的字符

(a)俯视图 (b)正视图
(c)仰视图 (d)后视图
图2-10 魔方各面视图
方位字符串的生成:
魔方方位字符串的生成是以当前面中心色块的颜色为依据,例如U面的中心色块为红色,那么此魔方6个面的所有红色色块为U,以此类推,最后魔方能生成54个方位字符。
2.3主要创新点
1. 设备上不同于传统的电脑控制,我们采用树莓派5控制摄像头采集图像,不需要用户拥有其他设备(例如电脑,气泵等),设备集成化程度高。
2. 操作方便,甚至可以做到手机连接同一网络控制摄像头采集图像。
3.算法上不同于传统的累加求平均值,根据属于哪个区间判断颜色,而是使用基于掩膜的方法。

(a)程序测试图1 (b)程序测试图2

(c)程序测试图3 (c)程序测试图4
图2-11 程序测试图
4.由于夹爪夹持住魔方的F(Front)、B(Back)面的四个色块,加上圣手传奇魔方的特点(色块之间有黑边)导致了魔方色块采集的区域极小,甚至不能做到识别。我们采用了魔方颜色的推测算法——基于魔方的8个角块和12个棱块上色块的相对位置
不会改变,夹持难以识别的部位相对位置也固定不变,我们开发了魔方色块推测算法,此算法能够通过对魔方缺失的1-4个色块进行推测,排除绝大部分不可能的字符串组合,再通过与已识别出的魔方4个缺失色块其中一个甚至几个进行比对,得出正确的魔方求解字符串,经测试该程序拥有高达99.5%的准确度。
2.5 小结
本过程帖着重讲解了解魔方机器人的视觉算法实现。在最一开始介绍了经典的视觉库 OpenCV,接着介绍了 RGB 模型到 HSV 模型的联系、区别与转换,再讲到基于丢失色块难以识别的魔方推测算法的理论。讲解了SVM算法理论、介绍了图像平滑处理的方法--高斯模糊,也介绍了透视变换的方法,并给出鼠标获取图像像素坐标和滚动条获取图像颜色值域的两种方法。
有兴趣的可以多多交流~~~
我要赚赏金
