【中学生创客.虚拟机器人】4.3色彩感知

第三节 色彩感知

一、任务初探

本课机器人的起始位置及任务说明如下。

1.起始位置为灰色小方块位置,且起始方向为箭头所示方向;

2.传送机将两种不同颜色零件从右向左源源不断地送来,机器人要将蓝色零件放入左边的蓝色箱子内,将红色零件放入右边的红色箱子。各完成 3 个及以上算成功完成任务。

图 4-3-1 场地任务示意图

思考:

1.工厂中传送带送来的零件可能是不同类型的,如果用不同的颜色代表不同类型的零件,要求将这些零件进行分拣装入不同的箱子中,机器人又该如何区别这些零件呢,需要借用什么配件呢?

2.在完成上节课的任务中,随着机器人的工作,箱子中总是存在某个角落零件数量越来越多,其他角落相对较空的,有时我们会发现零件会掉到箱子外面来,有什么方法可以改善这种情况呢?

二、实践验证

(一)搭建机器人

完成本课任务的机器人可以在“机器人_工厂流水线_4_1”上修改,针对以上两个思考问题我们可以这样考虑。

1.本课的机器人除了能检测到零件到达以外,还必须具备识别不同颜色零件的功能,因此我们可以在夹子上再搭建一个灰度传感器来实现。同时要考虑灰度传感器安装的位置角度要求。能不能装在夹子双臂的内侧,能不能与障碍传感器装在同一个高度呢?两个传感器检测的先后顺序又如何?

2.在上节课的任务中,随着机器人的工作,蓝色箱子右边某个角落零件数量越来越多,  左边区域和中间区域相对较空的,有时我们会发现零件会堆叠,还会掉到箱子外面来。这是存在一定几率的。零件最后的位置应该是以零件初始掉落的位置为中心的一片区域。所以我们可以考虑让零件掉落的初始位置接近整个箱子的中心区域,这样随着零件的增多,相对而言掉到箱子外面的几率少些。如何实现让零件掉落的初始位置接近整个箱子的中心区域,一要考虑机械臂旋转过来的角度,二要考虑机械臂本身的长度。

最终效果图如图 4-3-2。其中原有的四个直流电机、三个伺服电机、两个灰度传感器、障碍传感器的名称及其端口号与上节课一致。新增的“灰度传感器_检测零件颜色”的端口设置为 34。另在机械臂上增加了根安装柱(长度可自行调试决定)。

图 4-3-2 机器人完整效果图

(二)设计程序

1.任务动作分析并绘制流程图

利用模块化程序设计的思想,我们还是先从大局考虑,机器人完成整个任务需要以下过程。先做好夹零件前的准备工作,等待零件过来,如果零件到了则夹取零件后识别颜色分别放到对应的箱子然后归位,如果零件没有过来则等待。然后一直重复“等待零件过来,判断零件是否已经到达,若到达,再判断是什么颜色后放入对应箱子最后归位,若没到达则继续。

图4-3-3 整体流程图

等待”这样的过程。这是一个永远循环的过程。流程图见图 4-3-3。然后在此基础上再对每个模块进行逐步求精。

其中“夹取前的准备工作”模块的流程图与上节课一致,这里就不再详细给出了。无论是哪种颜色的零件,都需要完成夹紧零件然后抬起的动作, 所以“夹取零件”模块是共有的。

放入蓝色箱子并归位”模块可分解为这样几个步骤。机械臂旋转至蓝色箱子方向,机械臂上方放下使得零件可以在蓝色箱子中间上方,夹子松开零件,机械臂上方抬起,机械臂转回传送带方向,机械臂放下使得夹子刚好对准到零件的中间高度上。“放入红色箱子并归位”模块步骤类似,机械臂旋转至红色箱子方向,机械臂上方放下使得零件可以在红色箱子中间上方,夹子松开零件,机械臂上方抬起,机械臂转回传送带方向,机械臂放下使得夹子刚好对准到零件的中间高度上。“放入红色箱子并归位”模块流程图如图 4-3-4 所示。“放入蓝色箱子并归位”模块流程图省略。

 

2.程序编写

点击【编写程序】进入程序编辑窗口,单击【新建】按钮新建程序,选择机器人为“机器人_工厂流水线_4_3”。由于“夹取前的准备工作”模块和“夹取零件”模块相对比较简单,这里就不为此单独创建一个子程序了,直接放入主程序中。另“放入蓝色箱子并归位”模块、“放入红色箱子并归位”分别创建了名“放入蓝色箱子并归位”子程序和“放入红色箱子并归位”子程序。

由于主程序中还涉及灰度传感器检测零件的颜色判断“是蓝色零件吗”?需要在场景中对两个零件取颜色值。获得蓝色零件的颜色值为 73,红色零件的颜色值为 61。主程序如图4-3-5 所示,其中永远循环图标循环体内第一个判断模块各图标参考值如表 4-3-1 所示,第二个判断模块各图标参考值如表 4-3-2 所示。“放入蓝色箱子并归位”子程序和“放入红色箱子并归位”子程序见图 4-3-6。“放入红色箱子并归位”子程序的参考值见表 4-3-3。“放入蓝色箱子并归位”子程序的参考值此处省略。


表 4-3-1 永远循环图标循环体内第一个判断模块各图标参考值

序号

功能模块图标

参考值

备注

 

1

 

IF 判断

 

端口 33,值 1

障碍传感器检测到零件了吗?值为 1 ,执行序号 2-4 步骤

值为 0 ,执行序号 5 步骤

2

多伺服时间驱动

驱动总时间(毫秒)300

端口 93 , 值 90

端口 94 , 值 90

夹紧零件

 

3

 

多伺服时间驱动

驱动总时间(毫秒)500

端口 92 , 值 90

 

机械臂抬起

4

进入第二个判断模块

 

判断零件颜色并分别放入对应箱子

5

停止所有直流电机

 

无零件继续等待

 

表 4-3-2 永远循环图标循环体内第二个判断模块各图标参考值

序号

功能模块图标

参考值

备注

 

1

 

IF 判断

端口 34 , 值 67

灰度传感器_检测零件颜色值大于

67 吗?

2

子程序调用

放进蓝色箱子并归位

值为 1 时

3

子程序调用

放进红色箱子并归位

值为 0 时

 

表 4-3-3“放入红色箱子并归位”子程序参考值

序号

功能模块图标

参考值

备注

 

1

 

多伺服时间驱动

驱动总时间(毫秒)500

端口 91 , 值 120

 

机械臂旋转至红色箱子方向

 

2

 

多伺服时间驱动

驱动总时间(毫秒)500

端口 92 , 值 165

 

机械臂放下

 

3

 

多伺服时间驱动

驱动总时间(毫秒)1000端口 93   , 值 0

端口 94 , 值 0

 

松开零件

 

4

 

延时

 

(具体值请自行设置)

夹子张开后停顿一段时间,确保零

件掉入箱内

 

5

 

多伺服时间驱动

驱动总时间(毫秒)600,

端口 92 , 值 90

 

机械臂抬起

6

多伺服时间驱动

驱动总时间(毫秒)500,

端口 91 , 值 0

机械臂旋转至传送带方向

 

7

 

多伺服时间驱动

驱动总时间(毫秒)600,

端口 92 , 值 175

 

机械臂放下就位等待零件

最后将该程序以“程序_工厂流水线_4_3”为文件名保存起来。

(三)进入仿真

单击【开始仿真】并选择【新建仿真】,并以此选择任务(场景_工厂流水线_4_3)、机器人(机器人_工厂流水线_4_3)、程序(程序_工厂流水线_4_3),将该仿真以“工厂流水线

_4_3”为文件名保存,单击【保存进入】按钮进入到仿真界面。调试过程中如果出现问题可从以下几个方面进行分析。

1.零件还没完全进入夹子的怀抱就开始执行夹紧零件动作,导致无法夹到零件机械臂空抬现象,那是因为障碍传感器过早检测到零件,可以尝试将障碍传感器角度调整使其靠内侧点。

2.若颜色识别不对,可查看灰度传感器安装的位置和取值是否恰当。其他的问题可参考上节课的分析。

三、课后提升

1.观察“放入红色箱子并归位”和“放入蓝色箱子并归位”子程序,你会发现很多步骤动作是一模一样的。考虑将重复动作提取,瘦身该程序。

2. 尝试完成本课任务,在此基础上若希望每个箱子放入的零件至少 3 个后停止工作, 退回原处,程序该如何修改?

网友留言(0 条)

发表评论

验证码