乐趣区

关于人工智能:机械臂颜色识别-路上捡到一台机械臂给它点颜色瞧瞧

大家好,我就是那个走在路上常常捡到宝的 铁熊 老师,那么明天捡到了啥好玩的货色呢?一台五自由度机械臂,从天而降呈现在我背后!

这话说进口,我本人都不信,哪有那么好的运气!其实这是敌人送我玩的,你也想要这台机械臂么?什么!你不要机械臂,你想要那个敌人?那是不可能的!

既然白嫖了一台这么高端的机械臂,总是要玩点什么才对得起它!那就给它点色彩瞧瞧,让它当前乖乖听我话。那明天就来设计一个 色块分拣机械臂 的案例吧:通过色彩传感器,给机械臂减少色彩辨认的能力,使其能够辨认不同色块的色彩,而后将雷同的色块摆放到一起。

在开始残缺的教程之前,咱们先来看一下成果演示视频:

https://www.bilibili.com/vide…

机械臂介绍

首先咱们来认识一下这台机械臂:它是一台五自由度机械臂,采纳了 Arduino Uno 作为主控板,所有关节采纳串行总线舵机进行管制,也就是只有一根信号线,就能够同时对机械臂上 5 个舵机进行管制,另外它还能够采纳 Mixly 图形化编程。因为采纳了 Arduino 主控,加上能够 DIY 的构造,所以它具备很强的开放性和扩展性,不仅能够无缝集成各种 Arduino 中罕用的传感器,还能够改装构造,利用在各种我的项目中。

为了配合它特有的串行总线舵机管制,它还有专门的 Arduino 扩大板:Ardurobo1

Ardurobo1 次要具备如下性能个性:

  • 间接兼容 Arduino Uno 直插,无需其余连线;
  • 集成 6 路分布式串行总线通道,CH1~CH6,每个通道最多串联 6 个舵机,因而最多能够同时管制 36 个舵机;
  • 可间接调用事后编辑好的动作组;
  • 集成 I2C 接口、数字接口、模仿接口,兼容各种罕用的传感器;
  • 为 Arduino 优化了电源治理,满足多个舵机同时工作的电源需要;
  • 提供电源反接爱护,避免电源接线谬误。

将 Ardurobo1 扩大板依照引脚对应关系间接插在 Arduino Uno 上即可实现连贯,如下图所示:

色彩传感器介绍

因为这个我的项目波及到色块分拣,也就是要先进行色彩辨认,所以咱们这里采纳了色彩传感器,当然用其余能够辨认色彩的传感器也是没有问题的,比如说图像识别传感器。这里咱们先来介绍一下色彩传感器和它的应用办法。

色彩传感器有很多种型号,比方 TCS230、TCS34725 等,他们的应用办法根本相似。本我的项目中应用的色彩传感器型号为 TCS34725。

TCS34725 是一款低成本,高性价比的 RGB 全彩色彩传感器,传感器通过光学感应来辨认物体的外表色彩。反对辨认红、绿、蓝 (R、G、B) 三基色,能够输入对应的具体数值,帮忙您还原色彩本真。

为了进步精度,避免周边环境烦扰,个别会在传感器底部增加一块红外遮光片,最大水平减小了入射光的红外频谱成份,让色彩治理更加精确。板载自带了高亮 LED,让传感器在低环境光的状况下仍然可能失常应用,实现“补光”的性能。模块采纳 I2C 通信,能够很不便的接到主控板上。

接下来咱们就来学习一下在 Mixly 中如何编程实现色彩传感器辨认色彩。

色彩传感器电路连贯

咱们把色彩辨认传感器接在 Arduino Uno(或 Ardurobo1 扩大板)的 I2C 引脚,如下图所示:

读取 RGB 色彩值

Mixly 中有专门的 TCS34725 色彩传感器 编程模块,它位于 传感器 分类中,它的作用是返回待辨认色彩的 R(红色)、G(绿色)、B(蓝色)的值,而后咱们再通过 R、G、B 值去分辨(分类)色彩。

咱们来编写一个程序,别离获取不同色彩方块的 RGB 值,并且在串口中打印出 RGB 值,程序如下:

上传程序,关上串口监视器,察看不同色彩的方块,在串口监视器中的返回后果:

留神:环境光线、物体外表光滑度、传感器与待测物体,都会影响色彩传感器的辨认后果,理论应用时,如果待测环境发生变化,请从新测量数值,并且尽量放弃色彩辨认传感器与待测外表放弃雷同的间隔。

色块色彩分辨

察看下面返回的后果,咱们能够发现:

  • 检测 红色 方块时,R 值绝对较大(R > 60),G、B 值绝对较小(G < 10,B < 10);
  • 检测 绿色 方块时,G 值绝对较大(G > 30),R、B 值绝对较小(R < 10,B < 10);
  • 检测 蓝色 方块时,B 值绝对较大(B > 40),R、G 值绝对较小(R < 10,B < 20);
  • 检测 黄色 方块时,R、G 值绝对较大(R > 20,G > 20),B 值绝对较小(B < 10)。

依据这个后果,咱们进行一下推理分类,在检测 4 色方块场景中,能够断定:

  • 当 R > 60 时,检测到的方块为红色;
  • 当 G > 30 时,检测到的方块为绿色;
  • 当 B > 40 时,检测到的方块为蓝色;
  • 当 R > 20 且 G > 20 时,检测到的方块为黄色。

留神:在设定 RGB 色彩边界范畴时,咱们要仔细观察每个色彩的数值范畴,使设定的 RGB 边界值能够放弃每种色块的唯一性,这样能够大大简化程序。如果两种色彩的边界值比拟靠近,则可能须要多重判断,别离去判断 RGB 值。所以在进行色彩辨认试验中,尽可能筛选差别比拟显著的色彩。

根据上述推理,编写程序,依据检测到的 RGB 值断定方块的色彩:

上传程序,而后别离去检测每个方块,在串口监视器中查看返回的后果是否与理论方块色彩统一。

色块分拣机械臂

有了色彩传感器的应用根底,设计色块分拣机械臂我的项目就不难了。

机械臂电路连贯

咱们采纳特制的防反接线,把色彩传感器接在 I2C 引脚,把点阵屏也接在 I2C 引脚,把机械臂上的舵机串联接在 CH2 通道上(或者其余 5 个通道都能够),如下图所示。这里减少点阵屏模块是为了显示辨认到的色彩名称(缩写)。

场景搭建

接着依据视频中的演示成果,咱们来搭建一个简略的场景。首先找一块红色泡沫,在侧面两头地位开个孔、在反面挖个槽,将色彩装置到卡槽中,色彩传感器的辨认芯片和 LED 灯光朝上,如下图所示:

而后找 4 个盒子,别离标上红色、绿色、蓝色、黄色字样,代表不同色块的分拣盒。

而后将机械臂、色彩传感器、分拣盒按下图所示形式摆放。

至此,色块分拣机械臂的繁难场景搭建实现,上面开始机械臂动作设计与程序编写。

机械臂动作设计

一开始我感觉机械臂的抓取动作设计很麻烦,要一个舵机一个舵机去调节角度,要实现这么多抓取的动作,必定要花费很长时间了。而且不同动作之间的门路与静止布局,那就更难了!后果敌人通知我,它有个专门的动作编辑器软件,只有用手对给它凹凹造型,掰掰关节,而后用软件记录下来就能够了。有这么简略的办法,那还不连忙试试!

这里动作编辑器软件的应用,就不具体开展了,反正很简略,如果前面应用这个机械臂的老师多的话,再专门写一篇动作编辑器的教程好了。

首先将机械臂与专门的动作编辑器软件通过串口连贯的形式进行连贯,而后利用凹造型的形式,设计一系列系列机械臂的动作。留神,这里每个动作实际上就代表机械臂的一种造型,能够让机械臂从任意地位静止到指定造型地位,这里的动作就相似编程时执行的不同语句 。而 不同造型之间的地位或动作切换,机械臂会主动生成顺滑的门路布局,齐全不须要咱们去计算角度。一个字,简略!真香!

色块分拣的不同动作设计如下,每个动作都能够让机械臂达到指定的一个地位,并且维持该状态。因为采纳手动凹造型的形式进行动作设计的,所以这里的动作也不惟一,每个人能够依据本人的需要设计不同的动作地位。当然你也能够在手动凹造型之后,对每个舵机的角度进行准确调整,使得动作更加准确。

而后呢,有些工作或者动作之间能够组合在一起,将它们合并成一个动作组(软件中叫“宏”),这些组合在一起的动作,能够用来实现一些特定的工作,不便其余动作或者工作进行调用,这里的动作组就相似编程时的函数

色块分拣工作的不同动作组如下:

设置完动作组当前,须要生成动作组的定义,在软件中叫 生成宏定义,其实就是给每个动作组生成一个编号,不便在 Mixly 编程或其余形式编程时进行调用:

能够点击复制,将这些宏定义临时复制到一个文本文件中:

// 抓取方块
#define MACRO01 1337761498
// 分拣红色方块
#define MACRO02 1331656684
// 分拣绿色方块
#define MACRO03 420974790
// 分拣蓝色方块
#define MACRO04 390176801
// 分拣黄色方块
#define MACRO05 711367415

设计完机械臂的动作之后,就能够在 Mixly 中进行编程了。

Mixly 程序编写

首先来看一下这个机械臂对应的 Mixly 图形模块有哪些,如下图所示。实际上这些模块的性能,就是实现对舵机的各种管制形式。

而咱们这个色块分拣我的项目的 Mixly 程序比较简单,只需对下面 色块色彩分辨 程序稍加批改即可:

  • 在初始化模块中,减少点阵屏初始化与 Ardurobo1 控制板(统称 DBSP 控制板)的初始化;
  • 点阵屏是用来显示辨认到的色彩缩写,比方红色显示 R(Red)、绿色 G(Green)等;
  • 将串口打印色彩性能变成:点阵屏显示与执行对应色彩的分拣动作组(执行宏)。

这里特地提一下 执行宏 编号 模块,它的性能就是去调用机械臂不同的动作组,让机械臂实现特定的工作。咱们能够比照一下程序中用到的宏编号,是不是和下面生成的宏定义编号截然不同?比方程序中分拣红色方块(程序中有正文)的编号为 1331656684;设计动作时,生成的分拣红色方块的宏定义编号也是 1331656684,齐全一样!

有了 执行宏 编号 这个程序模块,在 Mixly 编程中就只须要去调用机械臂的动作或动作组就好了,就像调用函数一样简略,十分不便。

编写完 Mixly 程序后,上传到 Arduino 开发板中,就能够看到文章结尾演示视频中的成果啦。

总结

明天的教程就到此结束。在这篇文章中,咱们学习了色彩辨认传感器的原理、接线办法与编程形式,另外还学习了如何利用色彩传感器去分辨不同的色彩。最初联合点阵屏模块,设计了一个色块分拣机械臂我的项目。因为这个机械臂集成了动作编辑器软件、以及 Mixly 图形化编程,因而应用起来是非常简单的,非常适合玩腻了各种智能小车的老师、同学来入门其余机器人我的项目,前面我也会在更多的我的项目中用到这个机械臂,一起来期待吧~

欢送关注

最初,欢送扫码关注公众号:铁熊玩创客,不定期更新创客制作、技术教程、创客教育等相干内容。

退出移动版