样例程序1:MM_S1_Vis_Basic
程序解读
以下为MM_S1_Vis_Basic样例程序的代码及相关解释说明。
DEF MM_S1_Vis_Basic ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Vision project and get
; vision result
; Mech-Mind, 2023-12-25
;---------------------------------------------------
;set current tool no. to 1
BAS(#TOOL,1)
;set current base no. to 0
BAS(#BASE,0)
;move to robot home position
PTP HOME Vel=100 % DEFAULT
;initialize communication parameters (initialization is required only once)
MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
;move to image-capturing position
LIN camera_capture Vel=1 m/s CPDAT1 Tool[1] Base[0]
;trigger NO.1 Mech-Vision project
MM_Start_Vis(1,0,2,init_jps)
;get vision result from NO.1 Mech-Vision project
MM_Get_VisData(1,pos_num,status)
;check whether vision result has been got from Mech-Vision successfully
IF status<> 1100 THEN
;add error handling logic here according to different error codes
;e.g.: status=1003 means no point cloud in ROI
;e.g.: status=1002 means no vision result
halt
ENDIF
;save first vision point data to local variables
MM_Get_Pose(1,Xpick_point,label,toolid)
;calculate pick approach point based on pick point
tool_offset={X 0,Y 0,Z -100,A 0,B 0,C 0}
Xpick_app=Xpick_point:tool_offset
;move to intermediate waypoint of picking
PTP pick_waypoint CONT Vel=50 % PDAT1 Tool[1] Base[0]
;move to approach waypoint of picking
LIN pick_app Vel=1 m/s CPDAT2 Tool[1] Base[0]
;move to picking waypoint
LIN pick_point Vel=0.3 m/s CPDAT3 Tool[1] Base[0]
;add object grasping logic here, such as "$OUT[1]=TRUE"
halt
;move to departure waypoint of picking
LIN pick_app Vel=1 m/s CPDAT2 Tool[1] Base[0]
;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[1] Base[0]
;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT4 Tool[1] Base[0]
;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT5 Tool[1] Base[0]
;add object releasing logic here, such as "$OUT[1]=FALSE"
halt
;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT4 Tool[1] Base[0]
;move back to robot home position
PTP HOME Vel=100 % DEFAULT
END
上述样例程序代码对应的流程如下图所示。
下表为上述程序的逻辑解读。用户单击指令名称的超链接便可查看该指令的详细说明。
流程 | 代码及说明 | ||
---|---|---|---|
设置坐标系 |
因此,上述两条指令表示,设置当前所选的工具坐标系和基础坐标系。 |
||
移动到Home点 |
因此,整条指令表示机器人以点到点方式移动到示教的Home点。 |
||
初始化通信参数 |
机器人通过MM_Init_Socket指令,根据XML_Kuka_MMIND.xml文件中的配置信息,与视觉系统建立TCP协议通信连接。
|
||
移动到拍照点 |
因此,整条指令表示机器人以直线移动方式移动到示教的拍照点。 |
||
触发运行Mech-Vision工程 |
因此,整条指令表示机器人触发视觉系统运行编号为1的Mech-Vision工程,且期望Mech-Vision工程返回所有视觉点。 |
||
获取视觉结果 |
因此,整条指令表示机器人获取Mech-Vision工程1返回的视觉结果。
因此,上述语句表示,当状态码status为1100时,则机器人成功获取到所有视觉结果;否则视觉系统发生异常,程序执行IF与ENDIF之间的代码。用户可根据具体异常状态码做相应的处理。此样例中对所有异常状态码做了相同处理,即通过halt指令暂停程序的执行。 |
||
转存视觉结果 |
因此,整条指令表示将第一个视觉点的工具位姿、标签和末端工具编号分别转存至指定变量。
因此,上述两条语句表示计算抓取接近点的位置。在后续抓取流程中,机器人需经过该点位置。 |
||
移动到中间过渡点 |
机器人以点到点方式移动至拍照点与抓取接近点之间的某个过渡点(pick_waypoint)。
|
||
移动到抓取接近点 |
机器人直线移动到抓取点上方100mm处,即到达抓取接近点。此处pick_app与上文中Xpick_app表示同一位置。
|
||
移动到抓取点 |
机器人以直线移动方式从抓取接近点移动到抓取点。此处pick_point与上文中Xpick_point表示同一位置。 |
||
设置DO执行抓取 |
机器人移动到抓取点后,通过设置DO指令(例如“$OUT[1]=TRUE”),控制末端工具进行抓取。用户需根据实际场景增加设置DO的操作。
|
||
移动到抓取离开点 |
机器人移动到抓取点上方的100mm处,即到达抓取离开点。此处pick_app与上文中Xpick_app表示同一位置。
|
||
移动到中间过渡点 |
机器人移动至抓取离开点与放置接近点之间的某个过渡点(drop_waypoint)。
|
||
移动到放置接近点 |
机器人从中间过渡点移动到放置接近点(drop_app)。
|
||
移动到放置点 |
机器人从放置接近点移动到放置点(drop)。
|
||
设置DO执行放置 |
机器人移动到放置点后,通过设置DO指令(例如“$OUT[1]=FALSE”),控制末端工具进行放置。用户需根据实际场景增加设置DO的操作。
|
||
移动到放置离开点 |
机器人从放置点移动到放置离开点(drop_app)。
|
||
移动到Home点 |
机器人从放置离开点重新移动到Home点。
|