实现抓放
在本教程中,你将先了解本案例实现的抓取和放置流程、然后了解如何完成抓取和放置流程配置。
通信方案说明
在上述流程中,“机器人触发相机拍照并获取规划路径”需要机器人与视觉系统使用标准接口通信方式,并且标准接口与视觉系统的配合方式为“使用Mech-Viz获取规划路径”。
使用该配合方式时,你需要配置好Mech-Vision工程(已在“视觉工程配置”章节配置)和Mech-Viz工程,并编写机器人程序。请参考“抓取放置流程配置”完成Mech-Viz工程的配置和机器人程序的编写。
抓取和放置流程配置
要实现抓取和放置逻辑流程,需要依次完成如下配置:
配置Mech-Viz工程进行路径规划和仿真
在Mech-Viz创建工程可以为机器人提供如下功能:
-
路径规划:规划机器人的抓取路径。注意规划的路径不包含放置的路径。放置路径需在机器人程序中添加。
-
碰撞检测:Mech-Viz在路径规划时进行碰撞检测,为机器人提供无碰撞的抓取路径。
-
仿真运行:Mech-Viz可以可视化仿真机器人的抓取流程,方便进行调试。
配置Mech-Viz工程的流程如下图所示。
Mech-Vision案例库中的“单品类拆垛”案例内置了Mech-Viz工程“Viz-Single-Case Depalletizing”。在开始下方配置前,请打开Mech-Viz,在菜单栏选择
,选择本地“单品类拆垛”方案中的“Viz-Single-Case Depalletizing”文件夹。配置场景物体
配置场景物体的目的是还原真实现场场景,以此来辅助用户规划机器人运动路径。具体操作方法请参考配置场景物体。
在确保抓取动作可行性的基础上,应对实际作业环境进行更为严格的还原,本方案中场景物体设置情况如下。
配置末端工具
配置末端工具的目的是在三维仿真空间中能够显示末端工具的模型,并用于碰撞检测。具体操作方法请参考配置末端工具。
关联工件与末端工具
在配置完末端工具后,需要在工件库中将工件与用于抓取的末端工具关联,这样配置的末端工具才可以用于抓取工具。本案例抓取的工件为纸箱,不需要工件模型进行匹配,因此只需要在工件库中创建一个无点云匹配模板的工件(默认工件)。
-
在工程资源树的工件节点下单击设置按钮以打开工件库。
-
在请选择工件配置流程窗口,单击无匹配识别卡片。该操作将自动创建一个默认工件并添加一个默认抓取点。
-
在设置抓取点选项卡中的抓取配置区域,勾选启用Mech-Viz中所有末端工具选项,实现末端工具与工件的绑定。
碰撞模型简化
在制作末端工具模型时,为了减少制作末端工具碰撞模型所需的操作时间,不必在创建凸包时完全复原模型,可以根据模型的实际情况有选择地忽略一些细节。
模型简化思路:夹具与机器人连接部分的螺孔和其他细节特征可以被去除。由于吸盘原本模型是长方体,此处不需要简化。
模型简化示例如下图。
搭建工作流程
“单品类拆垛”案例内置的Mech-Viz工程“Viz-Single-Case Depalletizing”已搭建了工作流程。工作流程中每个步骤的说明如下。
步骤 | 说明 | 用途 |
---|---|---|
定义Home点 |
仅用于仿真,不发送给机器人 |
|
消息分支 |
等待机器人程序发送指令开始拍照 |
|
调用Mech-Vision视觉结果 |
/ |
|
检查是否有视觉结果 |
/ |
|
规划抓取接近点 |
发送给机器人 |
|
规划抓取点 |
发送给机器人 |
|
规划抓取离开点 |
发送给机器人 |
|
定义中间过渡点 |
仅用于仿真,不发送给机器人 |
配置碰撞检测参数
Mech-Viz能够通过碰撞检测功能来防止机器人在运动过程中发生不必要的碰撞。本应用需要开启点云碰撞检测功能。具体操作请参考碰撞检测配置。
-
本应用需要开启点云碰撞检测功能,参与碰撞检测的点云形式为“点云立方体”。点云碰撞检测功能主要检查夹具与点云的碰撞,机器人关节碰撞检测可根据实际需求开启,以缩短规划时间。
-
工件碰撞检测主要检查被抓工件与场景物体的碰撞,对于纸箱场景一般不需要开启。
-
常见问题解决方法:需要开启问题一,并根据现场的点云情况设置Z向点云移除范围拓展和XY向点云移除范围拓展。注意,XY向点云移除范围拓展不可设置过大,否则可能导致抓取时吸盘压到旁边的纸箱。
配置机器人参数和编写机器人程序
ABB标准接口样例程序MM_S9_Viz_RunInAdvance可以基本满足本案例所需要的功能。你可以在样例程序基础上进行修改。关于样例程序MM_S9_Viz_RunInAdvance的详细解释,请参考样例程序解读。
基于样例程序,请在机器人端完成如下操作:
-
示教Home点(初始位)。
将机器人移动到示教的初始位。初始位应远离待抓取物体及周边设备,且不遮挡相机视野。完成后,记录此时的机器人位姿到变量home。
-
指定工控机IP地址和端口号。将MM_INIT_SKT指令中的IP地址和端口号修改为工控机实际IP地址和端口号。
修改前 修改后(示例) MM_Init_Socket "127.0.0.1",50000,300;
MM_Init_Socket "192.168.10.111",50000,300;
-
示教机器人拍照位。
将机器人移动到示教的相机拍照位。拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。完成后,记录此时的机器人位姿到变量camera_capture。
-
设置DO端口信号,以打开吸盘吸取纸箱。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后(示例) !add object grasping logic here, such as "setdo DO_1, 1;" Stop;
!add object grasping logic here, such as "setdo DO_1, 1;" setDo do0, 1; !Stop;
-
示教放置过渡点和放置点。
将机器人移动到示教的过渡点及放置点,并分别记录机器人位姿到变量drop_waypoint和drop。
-
设置DO端口信号,以关闭吸盘放置纸箱。注意,DO指令应根据现场实际使用的DO端口号设置。
修改前 修改后(示例) !add object releasing logic here, such as "setdo DO_1, 0;" Stop;
!add object releasing logic here, such as "setdo DO_1, 0;" setDo do0, 0; setDo do4, 1; Stop;
运行测试机器人抓放效果
执行如下步骤测试机器人抓放效果:
-
将示教器上选择
。 -
确认选中MM_S9_Viz_RunInAdvance后,点击确定。
-
用手适度按压住上电按钮,直到示教器状态栏显示电机处于上电状态。
-
按下示教器面板上的运行按钮。
如果机器人可以成功抓取和放置纸箱,则说明机器人程序符合要求。
参考:修改后的样例程序
最终修改后的样例程序如下:
PROC Sample_9()
!set the acceleration parameters
AccSet 50, 50;
!set the velocity parameters
VelSet 50, 1000;
!move to robot home position
MoveAbsJ home\NoEOffs,v500,fine,gripper1;
!initialize communication parameters (initialization is required only once)
MM_Init_Socket "192.168.10.111",50000,300;
!move to image-capturing position
MoveL camera_capture,v1000,fine,gripper1;
!open socket connection
MM_Open_Socket;
!trigger Mech-Viz project
MM_Start_Viz 2,snap_jps;
!set branch exit port
MM_Set_Branch 1,1;
LOOP:
!get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData 1, pose_num, vis_pose_num, status;
!check whether planned path has been got from Mech-Viz successfully
IF status <> 2100 THEN
!add error handling logic here according to different error codes
!e.g.: status=2038 means no point cloud in ROI
Stop;
ENDIF
!save waypoints of the planned path to local variables one by one
MM_Get_JPS 1,jps{1},label{1},speed{1};
MM_Get_JPS 2,jps{2},label{2},speed{2};
MM_Get_JPS 3,jps{3},label{3},speed{3};
!follow the planned path to pick
!move to approach waypoint of picking
MoveAbsJ jps{1},v500,fine,gripper1;
!move to picking waypoint
MoveAbsJ jps{2},v300,fine,gripper1;
!add object grasping logic here, such as "setdo DO_1, 1;"
setDo do0, 1;
!Stop;
!trigger Mech-Viz project but not to trigger camera capturing
MM_Start_Viz 2,snap_jps;
!move to departure waypoint of picking
MoveAbsJ jps{3},v500,fine,gripper1;
!move to intermediate waypoint of placing
MoveJ drop_waypoint,v500,z50,gripper1;
!move to approach waypoint of placing
MoveL RelTool(drop,0,0,-100),v500,fine,gripper1;
!set branch exit port and trigger camera capturing when robot moves out of camera’s field of view
MM_Set_Branch 1,1;
!move to placing waypoint
MoveL drop,v300,fine,gripper1;
!add object releasing logic here, such as "setdo DO_1, 0;"
!Stop;
setDo do0, 0;
setDo do4, 1;
!move to departure waypoint of placing
MoveL RelTool(drop,0,0,-100),v500,fine,gripper1;
setDo do4, 0;
!move back to robot home position
MoveAbsJ home\NoEOffs,v500,fine,gripper1;
GOTO LOOP;
END_LOOP:
!close socket connection
MM_Close_Socket;
ENDPROC
ENDMODULE
至此,你已完成了3D视觉引导机器人单品类纸箱拆垛应用的部署。