任务 ========================================== 任务部分利用视觉部分的计算结果和运动部分的运动规划,控制整个项目的流程运行。本章节将详细介绍任务部分的配置。 工件代号映射表 ++++++++++++++++++++++++++ 设置完视觉和运动部分之后、运行任务流图之前,需要添加工件代号映射关系,以便任务流图调用视觉和运动设置的工件、视觉服务编号、抓取处理流程等内容,具体步骤如下。 .. |add| image:: img/add.png :width: 30px .. |delete2| image:: img/delete2.png :width: 30px .. |change| image:: img/change.png :width: 30px .. |copy| image:: img/copy.png :width: 30px .. |delete3| image:: img/delete3.png :width: 30px .. |start| image:: img/start.png :width: 30px 1. 单击Max右上角 :guilabel:`映射表与通信协议`,在弹出的 **映射表与通信协议** 窗口选择 “工件代号映射表 > 轨迹移动”页签。 2. 单击 :guilabel:`添加映射关系`,在弹出的 **添加映射关系** 窗口设置键、值和参数。 .. image:: img/map.png :align: center :width: 650px - 工件代号:用户自定义工件代号,仅支持英文字母和数字,长度不超过15个字符。可添加多个工件。 - 视觉服务编号:在下拉菜单选择视觉服务编号,编号和视觉部分的设置保持一致。 - 视觉流图文件:与视觉空间ID下的流图保持一致。 - 处理流程:在下拉菜单中选择抓取处理流程,这些抓取处理流程已在运动部分设置好。运动流程编号从0开始自动增加,可单击 |add| 或 |delete2| 新建或删除处理流程。 - 运动路径:选择在 :guilabel:`运动` 中设置好的一条路径。 - 缓存多个视觉结果:可根据需要是否勾选。 - 圆柱体:本项目无需勾选。与圆柱体相关的项目可根据需求,设置圆柱体的直径和长,无需重新注册圆柱体的抓取方式,方便使用。 3. 单击 :guilabel:`确认` 完成添加,列表中会显示已添加的映射关系,用户可对列表中的映射关系进行操作。 - |change|:修改映射关系。 - |copy|:复制并修改映射关系,注意键值不能重复。 - |delete3|:删除映射关系。 4. 单击 :guilabel:`确认` 完成映射表设置。 .. hint:: 用户可单击 :guilabel:`自动生成映射关系`,系统自动根据视觉和运动的设置生成工件代号映射表,但有多个抓取处理流程时无法自动生成映射关系。 任务流图 +++++++++++++++++ 设置完工件关系映射表之后,在 :guilabel:`任务` 中导入3D轨迹移动中的模板,请参见 :doc:`../../../basic_operation/VP_operation/configuration`。任务流图的设置分为工控机主控和机械臂主控两种方式,每种方式下含多个模板,可根据需要选择。在本章节工控机主控使用 **抓取+工业码垛异步** 模板,机械臂主控使用 **抓取异步前端** 和 **抓取异步后端** 模板。 工控机主控 ------------- 添加好基础模板之后,用户可根据需求添加或修改模块。以工业码垛项目为例,任务流图主要分为四个部分:主程序、运动规划、运动执行和其它功能。主程序控制整体流程,运行过程中会调用另外三个部分执行相应功能。下面依次介绍这四个部分。 **主程序** 主程序控制整个任务流程,主程序配置好之后如下图所示。 .. image:: img/main.png :align: center :width: 700px 下面详细介绍主程序的配置步骤。 1. 在任务流图模块当中选择“功能 > 一键更新节点机械臂属性”,系统自动根据当前设置更新机械臂路径。也可在模块的属性中设置机械臂路径。 .. image:: img/updaterobot.png :align: center :width: 450px 2. 单击 **设置运动工作空间** 模块,在右侧 **属性** 页签中设置 **抓取工作空间外部编** 和 **放置工作空间外部编号**,分别与抓取、放置的视觉ID保持一致。 .. image:: img/motionws.png :align: center :width: 450px 3. 单击 **异步函数呼叫** 模块,在右侧 **属性** 页签中选择 **函数名**。选择时注意抓取的方向,例如“运动规划_0_1”是从工作空间0抓取到工作空间1。 .. image:: img/syncall.png :align: center :width: 450px **运动规划** 运动规划主要负责机械臂路径控制,运动规划配置好之后如下图所示。 .. image:: img/mvplan.png :align: center :width: 700px 下面详细介绍运动规划的配置步骤。 1. 单击 **工业视觉结果** 模块,在右侧 **属性** 页签设置视觉服务编号,这里设置为抓取工作空间的视觉服务编号。 .. image:: img/visionresult.png :align: center :width: 450px 2. 单击 **生成抓取放置方案** 模块,在右侧 **属性** 页签设置 **组合规划配置文件路径**,这里直接选择在 :guilabel:`运动` 部分设置好的抓放组合处理流程文件路径即可。 .. image:: img/pickplaceplan.png :align: center :width: 450px 3. 单击 **工业码垛规划-生成槽** 模块,在右侧 **属性** 页签设置 **工件文件路径**,选择工件模型文件所在路径。再设置 **手动码垛注册文件路径**,这里直接选择在 :guilabel:`运动` 部分设置好的放置注册文件路径即可。 .. image:: img/generateslot.png :align: center :width: 450px .. hint:: 如果在两个料筐中来回抓取,则需按上述方法再配置一条运动规划流图。 **运动执行** 运动执行主要负责机控制械臂运动过程中的具体点位以及夹具的开合,运动执行配置好之后如下图所示。 .. image:: img/mvexe.png :align: center :width: 700px 下面详细介绍运动执行的配置步骤。 1. 根据 :guilabel:`运动` 中的路径规划,依次设置 **继续执行直到** 模块,在右侧 **属性** 页签中将 **目标点名称** 设置为与路径规划中相同的名称,模块数量可根据实际情况修改。 .. image:: img/exeuntil.png :align: center :width: 450px 2. 单击 **设置设备数字输出** 模块,在右侧 **属性** 页签设置IO动作序列,选择端口号和值。例如在本项目中,控制工具开合的端口号为1,值为1表示工具张开,值为0表示工具闭合。 .. image:: img/ioset.png :align: center :width: 350px .. hint:: 单击Max右上角的 :guilabel:`虚拟示教器`,在 **I/O控制** 页签根据机械臂实际情况设置数字输出端口号。例如在本项目中端口3控制的是工具的开合,信号0表示工具闭合,信号1表示工具张开。端口名称可自行定义,然后单击 :guilabel:`确认`。在 **设置设备数字输出** 模块设置时,选择I/O控制里的端口即可。 .. image:: img/iocontrol.png :align: center :width: 550px **其它功能** 该部分主要包含初始化、盖板规划和执行、加锁解锁的功能,主程序会调用这些功能。如下是该部分任务流图。 .. image:: img/other.png :align: center :width: 700px 1. 在“初始化”的任务流图中,完成如下设置。 a. 单击 **移动到目标关节** 模块,在右侧 **属性** 页签中设置目标关节角、位置和速度等参数,即起始点位置。 b. 单击 **创建运动工作空间编号到视觉服务编号映射** 设置映射内容,一般与视觉服务编号保持一致即可。 .. image:: img/visionmap.png :align: center :width: 400px 2. 在“盖板规划和执行”的任务流图中,单击 **延迟** 模块设置 **延迟秒数**。 3. 在“加锁解锁”的任务流图中,完成如下设置。 a. 单击 **变量读取** 设置变量参数,包括变量名、类型等。 .. image:: img/varread.png :align: center :width: 400px b. 单击 **变量写入** 设置变量默认值,例如在本项目中0表示加锁,1表示解锁。 .. image:: img/varwrite.png :align: center :width: 400px 机械臂主控 ------------- 在机械臂主控模板中,需要同时使用 **抓取异步前端** 和 **抓取异步后端** 两个模板。 其中前端模板主要负责整体抓放流程的控制,而后端完成大量的计算工作,例如机械臂抓取出筐后可以立即拍照,后端可以立刻执行计算任务,这样机械臂完成一次抓放流程之后可以直接获取计算结果进行下一次抓取,以提升执行效率。前端被机械臂呼叫,对指令的响应速度更快,但前端不负责具体的计算任务,仅从后端获取计算结果。 下图是 **抓取异步前端** 模板示意图,其中左上部分控制切换工件的流程,右上部分控制请求抓放的流程,下面的流程控制抓放节点筛选。 .. image:: img/front.png :align: center :width: 700px 下图是 **抓取异步后端** 模板示意图,其中上面是计算抓取轨迹的流程,左下部分控制工作空间的切换,右下部分控制坐标系转换。 .. image:: img/back.png :align: center :width: 700px 机械臂主控模式下,Fanuc机械臂案例和示例代码可参考 :doc:`../../../appendix/robot_connection/fanuc/example`,其他品牌的案例和代码可在 :doc:`../../../appendix/robot_connection/robot` 中选择相应的品牌查看。 .. |help| image:: img/help.png :width: 20px 在Max中,单击右上方 :guilabel:`映射表与通信协议`,在弹出窗口的 :guilabel:`机械臂基础设置` 页签下,勾选 **开启** 打开测试模式。此时右侧会出现 :guilabel:`打开文件` 和 |help|。单击 :guilabel:`打开文件` 可查看通信指令的yml文件,单击 |help| 可在浏览器中打开 :doc:`../../../appendix/robot_connection/robot_server_protocol_v2` 页面,并查看机械臂主控通信协议、指令等的内容。 .. image:: img/instruction.png :align: center :width: 650px