【中学生创客.虚拟机器人】4.2疯狂拣取
第二节 疯狂拣取
一、任务初探
这节课我们的机器人面对的不是工作台上一个静止的零件,而是传送带上源源不断送来的大量零件。机器人的起始位置及任务说明如下。
1.起始位置为灰色小方块位置,且起始方向为箭头所示方向;
2.传送机将零件从右向左源源不断地送来,机器人要将零件从传送带上拿起放入左边的蓝色箱子内。完成 5 个及以上算成功完成任务。
图 4-2-1 场地任务示意图
二、知识汲取
为了完成“场景_工厂流水线_4_1”中任务,我们编写的程序“程序_工厂流水线_4_1” 图标已经很多。在调试时,你是否能快速定位你所需要修改的图标位置呢?是不是比前面的程序复杂多了?随着任务难度的增加,程序势必越来越复杂,不仅看起来累,更不利于程序的调试和维护。在此向大家推荐采用模块化设计。
(一)模块化设计
以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。
我们在进行任务分析绘制流程图时就可以采用模块化流程设计。如绘制完成“场景_工厂流水线_4_1”任务的流程图时,我们不急着去考虑机械臂、夹子装置的伺服电机该如何转动。而是先从整体大局出发,绘制出整体流程图,如图 4-2-2 所示。“走轨迹”和“抓取零件放置蓝色区域”就是以功能块为单位进行划分的模块。然后再逐步求精,考虑利用两个灰度传感器“走轨迹”和“抓取零件放置蓝色区域”的具体步骤,分别绘制出“走轨迹”和“抓取零件放置 蓝色区域”这两个模块的流程图,如图
模块化程序设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。这里我们介绍用子程序将模块的流程描述出来。
(一)子程序
为了简化程序,我们可以把某段重复的程序或具有某个独立功能的程序段单独列出,编写成子程序。即子程序是一段独立的程序, 可以被多次执行,减少编程的工作量,并提高程序的可读性。主程序在执行过程中如果需要某一子程序,通过调用指令来调用该子程序,子程序执行完后又返回到主程序,继续执行后面的程序段。
1.创建子程序
在程序编辑界面单击【模型】面板下的【控制】标签,拖一个子程序图标到编辑区,在其属性面板修改子程序的名称, 如图 4-2-6 所示,以便于识别不同的子程序。子程序里面的程序编写方法与主程序一样。“走轨迹”子程序完成程序如图 4-2-7 所示。“抓取零件放置蓝色区域” 子程序这里省略。
2.调用子程序
拖一个调用子程序图标(如图 4-2-8 所示)到需要调用子程序的位置,然后在其属性面板选择要调用的函数,如图 4-2-9 所示。
除了主程序可以调用子程序,子程序也可以调用其他子程序,甚至可自身调用。图 4-2-10 所示为 完成“场景_工厂流水线_4_1”任务的主程序调用“走轨迹”子程序和“抓取零件放置蓝色区域”子程序。
小提示:控制程序中的子程序不能设置参数,参数的传递可以使用全局变量完成。
三、实践验证
(一)搭建机器人
本任务的机器人可以在“机器人_工厂流水线_4_1”在修改,需要考虑以下细节。
1.由于本任务中的零件不再是静止的,而是从右向左慢慢传送过来。我们的夹子需要等待在传送带上方,零件传送过来时可以直接装入夹子双臂的怀抱。所以夹子要朝向右边, 即零件来的方向,初始状态张开。
2.夹子需要在零件到达时才夹紧,所以需要一个障碍传感器来检测零件是否已经进入夹子中。思考障碍传感器应该装在哪位位置呢?直角安装柱的上方,下方还是内侧,为什么? 3.机器人要不断地把零件放入箱子中,按我们上节课的思路来思考该任务。机器人拿到零件后要左转,然后放下零件,再右转恢复原来的位置,重复这样的动作。能不能让机器人不进行转身就能完成这一系列动作呢?在上一节中我们搭建的机械臂虽可进行抬起放下等动作,但它的活动空间也仅是竖直二维空间。我们可以考虑在机械臂与主控制器连接处增加一个伺服电机,实现机械臂的活动空间从二维竖直空间延伸到三维空间。
最终效果图如图 4-2-11 所示。其中四个直流电机和两个灰度传感器的名称及其端口号与上节课相同。障碍传感器和伺服电机端口号详见表 4-2-1。障碍传感器的检测距离可自行设置一个合适的值。最后以“机器人_工厂流水线_4_2”为文件名保存。
图 4-2-11 机器人完整效果图
表 4-2-1 障碍传感器和伺服电机属性端口
名称 |
端口 |
伺服电机_底 |
91 |
伺服电机_下 |
92 |
大伺服电机_左 |
93 |
大伺服电机_右 |
94 |
障碍传感器 |
33 |
(二)设计程序
1.任务动作分析并绘制流程图
利用模块化程序设计的思想,我们还是先大局考虑,机器人完成整个任务需要以下过程。 先做好夹零件前的准备工作,再等待零件过来,如果零件到了则夹取零件放置到蓝色箱子然
夹取前的准备工作 |
图4-2-12 整体流程图
“夹取前的准备工作”模块主要是调整机械臂上方的角度使得夹子刚好对准到零件的中间高度,当然在这之前可要根据我们搭建的机械臂长度决定机器人是否需要再靠近传送带。 我们可以先考虑进去。流程
“夹取零件放进箱子并归位”模块可分解为这样几个步骤。夹子夹紧零件,机械臂抬起, 机械臂旋转至箱子方向,机械臂上方放下使得零件可以在箱子上方,夹子松开零件,机械臂上方抬起,机械臂转回传送带方向,机械臂放下使得夹子刚好对准到零件的中间高度上。流程图
2.程序编写
点击【编写程序】进入程序编辑窗口,单击【新建】按钮新建程序,选择机器人为“机器人_工厂流水线_4_2”。由于“夹取前的准备工作”模块相对比较简单,这里就不为此单独创建一个子程序了,直接放入主程序中。另为“夹取零件放进箱子并归位”模块创建了名“夹取零件放进箱子并归位”的子程序。
主程序如图 4-2-15 所示,程序的参考值如表 4-2-2 所示。“夹取零件放进箱子并归位” 子程序见图 4-2-16,该子程序的参考值如表 4-2-3 所示,其中各伺服电机具体角度和驱动总时间需要调试得到,表中的值仅供参考。另外在放下零件后增加了一个延时模块,让夹子张开后等待一段时间以确保零件掉入箱内。
表 4-2-2 主程序各图标参考值
序号 |
功能模块图标 |
参考值 |
备注 |
1 |
多直流电机驱动 |
(具体值请自行调试) |
前进靠近传送带 |
2 |
延时 |
(具体值请自行调试) |
|
3 |
停止所有直流电机 |
|
|
4 |
多伺服时间驱动 |
驱动总时间(毫秒)1000, 端口 92 , 值 178 |
机械臂放下等待零件 |
5 |
永远循环 |
|
|
6 |
判断条件为障碍传感器 |
端口 33 , 值 1 |
零件到达了吗? |
7 |
子程序调用 |
夹取零件放进箱子并归位 |
值为 1 时(条件成立) |
8 |
停止所有直流电机 |
|
值为 0 时(条件不成立) |
表 4-2-3 “夹取零件放进箱子并归位”子程序各图标参考值
序号 |
功能模块图标 |
参考值 |
备注 |
1 |
多伺服时间驱动 |
驱动总时间(毫秒)1000,端口 93 , 值 90 端口 94 , 值 90 |
夹紧零件 |
2 |
多伺服时间驱动 |
驱动总时间(毫秒)500, 端口 92 , 值 90 |
机械臂抬起 |
3 |
多伺服时间驱动 |
驱动总时间(毫秒)500, 端口 91 , 值 -120 |
机械臂旋转至箱子方向 |
4 |
多伺服时间驱动 |
驱动总时间(毫秒)600, 端口 92 , 值 165 |
机械臂放下 |
5 |
多伺服时间驱动 |
驱动总时间(毫秒)1000,端口 93 , 值 0 端口 94 , 值 0 |
松开零件 |
6 |
延时 |
(具体值请自行设置) |
夹子张开后停顿一段时间,确保零件掉入箱 内 |
7 |
多伺服时间驱动 |
驱动总时间(毫秒)600, 端口 92 , 值 90 |
机械臂抬起 |
8 |
多伺服时间驱动 |
驱动总时间(毫秒)500, 端口 91 , 值 0 |
机械臂旋转至传送带方向 |
9 |
多伺服时间驱动 |
驱动总时间(毫秒)600, 端口 92 , 值 178 |
机械臂放下就位等待零件 |
最后将该程序以“程序_工厂流水线_4_2”为文件名保存起来。
(三)进入仿真
单击【开始仿真】并选择【新建仿真】,并以此选择任务(场景_工厂流水线_4_2)、机器人(机器人_工厂流水线_4_2)、程序(程序_工厂流水线_4_2),将该仿真以“工厂流水线_4_2”为文件名保存,单击【保存进入】按钮进入到仿真界面。
在调试时,不要一看到机器人无法任务,甚至根本连零件都无法夹起时,就认为自己的程序思路完全错误。不要着急,借用调试小技巧,结合流程图中该步骤的功能一步步去突破, 修改程序中各图标的初始值,最终使机器人出色地完成任务。这样是不是很有成就感呢。
调试过程中如果出现问题可以从以下几个方面进行分析。
1.零件从夹子的前方或后方过去,无法刚好进入夹子的怀抱,尝试调整机器人的前进距离。
2.零件进入夹子后夹子没有执行夹紧的动作,可能是零件进入夹子位置不是正中间, 靠向离障碍传感器远的一边,导致障碍传感器没有检测到,尝试改变障碍传感器检测的距离参数或者旋转安装的角度使其靠内点,确保障碍传感器能检测零件。当然也可以微调机器人前进的距离,使得零件过来刚好对准夹子正中间位置(可在仿真环境中多方位视角查看)。请记住,细节决定成败。机器人前进的距离,障碍传感器检测的距离、安装的位置角度,机械臂放下的角度三者要配合好。
3.机械臂抬起位置或旋转方向不是你所期望的,请尝试调整伺服电机的角度来理解方向以及寻找最合适的目标角度值。
四、课后提升
1. 尝试完成本课任务,观察随着箱子中零件量的增多,会出现什么情况,有什么方法可以改善呢?
<< 上一篇
下一篇 >>
网友留言(0 条)