样例程序21:MM_S21_Vis_As_Uframe
程序解读
以下为MM_S21_Vis_As_Uframe样例程序的代码及相关解释说明。
| 与MM_S1_Vis_Basic样例相比,本样例仅新增了通过循环获取所有规划路径并进行抓取与放置的功能(加粗部分的代码)。因此,下文不再重复解释与MM_S1_Vis_Basic样例相同部分的代码(详情请参考MM_S1_Vis_Basic样例说明)。 |
&ACCESS RVO
&REL 20
&PARAM DISKPATH = KRC:\R1\KUKA_MM\sample
DEF MM_S21_Vis_As_Uframe ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Vision project and get
; vision result
; Mech-Mind, 2026-12-29
;---------------------------------------------------
;set current tool no. to 1
BAS(#TOOL,1)
;set current base no. to 0
BAS(#BASE,0)
;move to robot home position
;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.44,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
;ENDFOLD
;initialize communication parameters (initialization is required only once)
MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
;move to image-capturing position
;FOLD LIN camera_capture Vel=1 m/s CPDAT1 Tool[1] Base[0] ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=camera_capture; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT4; Kuka.VelocityPath=1; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT1
FDAT_ACT = Fcamera_capture
BAS(#CP_PARAMS, 1.0)
LIN Xcamera_capture
;ENDFOLD
;trigger NO.1 Mech-Vision project
MM_Start_Vis(1,0,2,init_jps,status)
IF status <> 1102 THEN
;add error handling logic here according to different error codes
MM_LOG("Status ERROR")
HALT
ENDIF
;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 base point data to local variables
MM_Get_Pose(1,Xpick_point,label,toolid)
;Convert the visual points to the workpiece coordinates
BASE_DATA[10]=Xpick_point
;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
;FOLD PTP pick_waypoint CONT Vel=50 % PDAT1 Tool[1] Base[0];%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=pick_waypoint; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=50; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP
;ENDFOLD
$BWDSTART = FALSE
PDAT_ACT = PPDAT1
FDAT_ACT = Fpick_waypoint
BAS(#PTP_PARAMS, 50.0)
PTP Xpick_waypoint C_Dis
;ENDFOLD
;move to approach waypoint of picking
;FOLD LIN pick_app Vel=1 m/s CPDAT2 Tool[1]:Tool1 Base[10] ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=pick_app; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=1; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT2
FDAT_ACT = Fpick_app
BAS(#CP_PARAMS, 1.0)
SET_CD_PARAMS (0)
LIN Xpick_app
;ENDFOLD
;move to picking waypoint
;FOLD LIN pick_point Vel=0.3 m/s CPDAT3 Tool[1]:Tool1 Base[10] ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=pick_point; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT3; Kuka.VelocityPath=0.3; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT3
FDAT_ACT = Fpick_point
BAS(#CP_PARAMS, 0.3)
SET_CD_PARAMS (0)
LIN Xpick_point
;ENDFOLD
;add object grasping logic here, such as "$OUT[1]=TRUE"
halt
;move to departure waypoint of picking
;FOLD LIN pick_app Vel=1 m/s CPDAT2 Tool[1]:Tool1 Base[10] ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=pick_app; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=1; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT2
FDAT_ACT = Fpick_app
BAS(#CP_PARAMS, 1.0)
SET_CD_PARAMS (0)
LIN Xpick_app
;ENDFOLD
;move to intermediate waypoint of placing
;FOLD PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=drop_waypoint; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT2; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP
;ENDFOLD
$BWDSTART = FALSE
PDAT_ACT = PPDAT2
FDAT_ACT = Fdrop_waypoint
BAS(#PTP_PARAMS, 100.0)
PTP Xdrop_waypoint C_Dis
;ENDFOLD
;move to approach waypoint of placing
;FOLD LIN drop_app Vel=1 m/s CPDAT4 Tool[1]:Tool1 Base[1] ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=drop_app; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT4; Kuka.VelocityPath=1; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT4
FDAT_ACT = Fdrop_app
BAS(#CP_PARAMS, 1.0)
SET_CD_PARAMS (0)
LIN Xdrop_app
;ENDFOLD
;move to placing waypoint
;FOLD LIN drop Vel=0.3 m/s CPDAT5 Tool[1]:Tool1 Base[1] ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=drop; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT5; Kuka.VelocityPath=0.3; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT5
FDAT_ACT = Fdrop
BAS(#CP_PARAMS, 0.3)
SET_CD_PARAMS (0)
LIN Xdrop
;ENDFOLD
;add object releasing logic here, such as "$OUT[1]=FALSE"
halt
;move to departure waypoint of placing
;FOLD LIN drop_app Vel=1 m/s CPDAT4 Tool[1]:Tool1 Base[1] ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=drop_app; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT4; Kuka.VelocityPath=1; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=LIN
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT4
FDAT_ACT = Fdrop_app
BAS(#CP_PARAMS, 1.0)
LIN Xdrop_app
;ENDFOLD
;move back to robot home position
;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.44,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
;ENDFOLD
END
上述样例程序代码对应的流程如下图所示。
下表为新增功能的逻辑解读。用户单击指令名称的超链接便可查看该指令的详细说明。
| 流程 | 代码及说明 |
|---|---|
转存视觉结果 |
因此,整条指令表示将第一个视觉点的工具位姿、标签和末端工具编号分别转存至指定变量。
|