样例程序21:MM_S21_Vis_As_Uframe

您正在查看预发布版本(V2.2.0)的文档。如果您想查阅其他版本的文档,可以点击页面右上角“切换版本”按钮进行切换。

■ 如果您不确定当前使用的产品是哪个版本,请随时联系梅卡曼德技术支持

程序简介

功能说明

机器人触发Mech-Vision工程运行以获取视觉结果,结果作为坐标系,执行抓取和放置动作流程。

文件路径

Mech-Vision和Mech-Viz软件安装目录下Communication Component/Robot_Interface/KUKA/sample/MM_S21_Vis_As_Uframe

所需工程

Mech-Vision工程

使用前提

  1. 已完成标准接口通信配置

  2. 已完成自动标定

此样例程序仅是示例程序。用户需根据实际情况在此基础上进行修改,请勿直接使用该程序。

程序解读

以下为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

上述样例程序代码对应的流程如下图所示。

sample21

下表为新增功能的逻辑解读。用户单击指令名称的超链接便可查看该指令的详细说明。

流程 代码及说明

转存视觉结果

;save first base point data to local variables
MM_Get_Pose(1,Xpick_point,label,toolid)
  • MM_Get_Pose:转存视觉结果的指令。

  • 1:将转存第一个视觉点。

  • Xpick_point:该变量将保存第一个视觉点的工具位姿,即抓取点的工具位姿。

  • label:该变量将保存第一个视觉点对应的标签。

  • toolid:该变量将保存第一个视觉点对应的末端工具编号。

因此,整条指令表示将第一个视觉点的工具位姿、标签和末端工具编号分别转存至指定变量。

;Convert the visual points to the workpiece coordinates
BASE_DATA[10]=Xpick_point
  • 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
  • tool_offset={X 0,Y 0,Z -100,A 0,B 0,C 0}:计算抓取接近点(Z轴抬升100mm)。

  • Xpick_app=Xpick_point:tool_offset:位姿叠加:抓取点 + 偏移量 = 接近点。

该页面是否有帮助?

可以通过以下方式反馈意见:

我们重视您的隐私

我们使用 cookie 为您在我们的网站上提供最佳体验。继续使用该网站即表示您同意使用 cookie。如果您拒绝,将使用一个单独的 cookie 来确保您在访问本网站时不会被跟踪或记住。