【中学生创客.虚拟机器人】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 条)