【中学生创客.虚拟机器人】4.1智能抓取
第一节 智能抓取
一、任务初探
本课我们的机器人将走入工厂生产车间,起始位置为灰色小方块位置,起始方向为箭头所示方向,现需要完成以下任务,如图 4-1-1 所示。
1.从起始位置出发,沿黑色轨迹道路来到工作台前方;
2.抓取工作台上放置好的零件,将其放置到左边蓝色区域内。
在前面的课程中,主控制器装配上直流电机和轮子构成了机器人最基本的结构。在相应程序的控制下机器人具备了类似人类腿脚的功能:前进、后退、左转、右转等。投入到生产车间流水线中的机器人,想要让它做到像人的手一样灵活地抓取、放置零件,又需要哪些部件呢?
二、知识汲取
我们用手去抓取零件时,主要涉及到伸出、抓住、抬起、转向等几个动作。想要让机器人也拥有这样的“三维手臂”,势必需要驱动装置。我们先来学习这个驱动装置。
(一)伺服电机
1.伺服电机说明
伺服电机是一种驱动轴可旋转到指定角度且可保持在此角度的驱动部件,伺服电机不能像直流电机那样能连续旋转, 其旋转角度为-180°~ +179°。如图 4-1-2 为某一伺服电机, 圆形安装点为其驱动轴。
小提示:伺服电机有 2 种安装点,方形安装点用于安装,圆形安装点为驱动轴。驱动伺服电机时,其圆形安装点上安装的部件可转动。伺服电机在仿真开始时总是处于 0°的角度。
伺服电机可用于控制机械手臂、仿生类机器人(昆虫、动物)、类人机器人或其它完成特定动作的机械结构,通常情况下需要多个伺服电机配合使用。
4-1-3 四种不同类型的伺服电机
在虚拟环境中拥有各种不同的伺服电机,如图 4-1-3 所示的四款伺服电机(此图圆形安装轴和方形安装点均未显示)主要是形状和大小的差异,可根据需要选择使用相应的伺服电机。
2.伺服电机相关的编程模块
与伺服电机相关的编程模块有“驱动”类中的“伺服电机驱动”、“多伺服电机驱动”、
“多伺服步进驱动”、“多伺服总时间驱动”四个模块,如图 4-1-4 所示。
图 4-1-4 伺服电机相关编程模块及说明
“伺服电机驱动”和“多伺服电机驱动”是基本驱动模块,它们的区别在于设置驱动单个伺服还是多个伺服电机,往往要配上相应的延时模块,使其在延时一段时间后达到目标角度。“伺服电机驱动”模块容器设置和“多伺服电机驱动”属性面板设置可根据图 4-1-4 说明完成,较简单,这里不再详细说明。
“多伺服步进驱动”和“多伺服总时间驱动”是高级驱动模块,它们的区别类似于我们平时看到的时钟指针走动的模式区别,步进是指针一格一格走,每走一格的时间是一样的, 有停顿感,总时间驱动就是指针连续平滑匀速地转动。
“多伺服步进驱动”需要在属性面板中设置其驱动参数(图 4-1-5):步进量(角度)、间隔时间(毫秒)、伺服电机列表。步进量(角度)设置所选择的伺服电机每次改变的角度差值,间隔时间(毫秒)设置两次步进之间的等待时间,伺服电机列表处选择需要驱动的伺服电机,值输入目标角度。
执行时间=(最大角度差/步进量)×间隔时间
图 4-1-5 多伺服步进驱动属性面板 图 4-1-6 多伺服时间驱动属性面板
“多伺服步进驱动”同时驱动所有选择的伺服电机,直到所有伺服电机到达目标角度。 角度差较小的伺服电机先达到目标角度,并保持不动,等待角度差较大伺服电机到达目标角度。多个伺服电机到达目标角度时间是不一样的。
“多伺服总时间驱动”可以将一个或多个伺服电机从当前角度在指定时间内自动匀速驱动到目标角度。此模块会根据属性面板设置好驱动参数(图 4-1-6)(驱动总时间(毫秒)、伺服电机列表、值)自动计算每次驱动时,每个伺服电机的步进量和间隔时间。一般情况下, 多个不同差值的伺服电机驱动时,角度差值较大伺服电机旋转速度较快,角度差值较小的伺服电机旋转速度较慢,整体效果为多个伺服电机同时到达目标角度。
三、实践验证
(一)搭建机器人
从前面的任务中我们可以明确本课的机器人必须要具备的功能是能沿黑线轨迹前进和抓取零件放置好。其中沿黑色轨迹道路前进可在前方安装两个灰度传感器来实现,原理与我们在第三章第二节穿越悬浮桥中过土路是类似的,这里不再详细描述其搭建过程。
给机器人搭建怎样的装置才能让机器人完成抓取放置零件的动作呢。任务中的零件是“工”型的,如图 4-1-7 所示。抓取这个零件我们可以搭建一个夹子装置,实现把零件夹紧或松开。这个夹子装置靠安装块搭建出一个机械臂。这个机械臂的抬起放下需要伺服电机来驱动,起到类似人手肘关节的作用。最终效果图见图 4-1-8。灰度传感器和伺服电机属性端口设置见表 4-1-1。
表 4-1-1 灰度传感器和伺服电机属性端口
名称 |
端口 |
伺服电机_下 |
91 |
大伺服电机_左 |
92 |
大伺服电机_右 |
93 |
灰度传感器_左 |
31 |
灰度传感器_右 |
32 |
小技巧:安装柱的安装点是方形的,要将其安装到伺服电机的圆形输出轴上时,必须要先单击安装柱的方形安装点,再单击伺服电机的圆形安装点,才能正确安装。此时,安装柱可以相对转动。注意安装柱的初始位置要事先旋转调整好。
最后将我们搭建好的机器人以“机器人_工厂流水线_4_1”为文件名保存起来。
(二)设计程序
1.任务动作分析并绘制流程图
机器人出发后,沿着黑色轨迹道路来到工作台前,我们可以把工作台前的那条横的黑线
(即两个灰度传感器同时看到黑色)作为机器人沿轨迹走的终止条件,然后机械臂往前伸, 机器人往前移动,夹紧零件,然后抬起机械臂,转身,松开夹子放下零件。完整流程图见图4-1-9。其中双灰度传感器走轨迹流程图在第三章第二节已详细画过,这里不再详细描述。
2.程序编写
点击【编写程序】进入程序编辑窗口,单击【新建】按钮新建程序,选择机器人为“机器人_工厂流水线_4_1”。由于任务中涉及到利用两个灰度传感器沿黑色轨迹道路前进,我们先要在场景中对黑色轨迹和边上白色区域进行取颜色值,获得黑色的颜色值为 0,白色的颜色为 198。我们可以取中间值 100 作为两个颜色的分界值。接下来我们就可以根据流程图进行程序的编写,设置各图标初始值。完整程序如图 4-1-10 所示,结合图 4-1-9 流程图来理解。其中条件循环终止后各图标的参考值见表 1-2。
序号 |
图标 |
参考值 |
备注 |
1 |
停止所有直流电机 |
|
|
2 |
多伺服时间驱动 |
驱动总时间(毫秒):1000 端口 91 值 175 |
机械臂前伸 |
3 |
多直流电机驱动 |
(具体值请自行调试) |
前进靠近工作台 |
4 |
延时 |
(具体值请自行调试) |
|
5 |
停止所有直流电机 |
|
|
6 |
多伺服时间驱动 |
驱动总时间(毫秒):800 端口 92 值 90 端口 93 值 90 |
夹子抓紧零件 |
7 |
多伺服时间驱动 |
驱动总时间(毫秒):500 端口 91 值 90 |
机械臂抬起 |
8 |
多直流电机驱动 |
(具体值请自行调试) |
左转转向蓝色区域 |
9 |
延时 |
(具体值请自行调试) |
|
10 |
停止所有直流电机 |
|
|
11 |
多伺服时间驱动 |
驱动总时间(毫秒):1000 端口 91 值 170 |
机械臂放下 |
12 |
多伺服时间驱动 |
驱动总时间(毫秒):800 端口 92 值 0 端口 93 值 0 |
夹子松开零件 |
最后将该程序以“程序_工厂流水线_4_1”为文件名保存。提示:
(1)两个灰度传感器同时检测到黑色,即灰度传感器_左(31 端口)<100 并且灰度传感器_右(32 端口)<100。只要有一个灰度传感器还检测到白色,说明继续走轨迹,即灰度传感器_左(31 端口)>100 或者灰度传感器_右(32 端口)>100。
(2)在图 4-1-10 中关于伺服电机相关编程模块这里都是用多伺服总时间驱动,在属性面板中设置好驱动参数(驱动总时间(毫秒)、伺服电机列表、目标角度值)。这里也可以尝试用其他伺服电机相关编程模块。
(3)在各图标中各直流电机的值、具体的延时时间、伺服电机驱动总时间和目标角度值先大致设置个初始值,需要经过不断的调试得到最佳值。以上伺服电机驱动总时间和目标角度值仅供参考。
(三)进入仿真
单击【开始仿真】并选择【新建仿真】,并以此选择任务(场景_工厂流水线_4_1)、机器人(机器人_工厂流水线_4_1)、程序(程序_工厂流水线_4_1),为了便于下一次进入仿真不再重复刚才的步骤,可以将该仿真进行保存(工厂流水线_4_1),最后单击【保存进入】按钮进入到仿真界面。
观察机器人的运行情况,若不能很好的完成任务,可借助调试小技巧,修改程序中各图标的初始值,不断调试获得最佳效果。
小技巧:为了看清楚“机械臂往前伸”时伺服电机_下(端口 91)的目标值 175 是否刚好可以对准零件,我们可以断开多伺服总时间驱动模块图标和前进多直流电机驱动模块图标之间的流程线。如图 4-1-11 所示,然后保存调试,这样机器人运行完成“机械臂往前伸”这个动作时就停止了,我们就可以很好的观察。通过多次调试就可以得到“机械臂往前伸”时伺服电机_下(端口 91)目标角度的最佳值。最后将这两个图标用流程线连接。同学们可以尝试这个方法来获得各直流电机值、延时时间及伺服电机角度最佳值哦。
四、课后提升
1.请同学们分别用“伺服电机驱动”、“多伺服电机驱动”、“多伺服步进驱动”、“多伺服总时间驱动”四种不同方式驱动本课中“机器人_工厂流水线_4_1”,让大伺服电机_左和大伺服电机_右分别驱动到 90 度,伺服电机_下驱动到 175 度,感受这些驱动方式的不同。 2.尝试搭建机器人编写程序完成本课“场景_工厂流水线_4_1”任务,并思考在本课例
子中机器人抓取零件后是通过机器人左转然后放置零件,有什么办法可以让机器人方向保持不变就能完成放置零件动作呢?
<< 上一篇
下一篇 >>
网友留言(0 条)