# -*-编码:utf-8 -*- # UFG-EMC Introdução a Robótica de Manipuladores # 21005-05 Marco Antonio Assfalk de Oliveira #——# Uma versão em python e robolink/dk api para os comandos IMOV # da linguagem INFORM III (Motoman/Yaskawa)。#——# Supõe: # (a) a sequencia IMOVE seja definida como targets IPOS* dentro da simulação, # inicialmente definidos com relação a posição REF;# (b) um robo 'Motoman HP20D';# (c) uma posição“家”。#——# Apresenta uma alternativa sem visualização dos IMOV prefixado com“codigo(2)”#——从robolink导入* # RoboDK的API从RoboDK导入* #机器人的数学工具箱#启动RoboDK API: RDK = robolink() #按名称获取机器人项目:robot = RDK。Item('Motoman HP20D', ITEM_TYPE_ROBOT) #按名称获取目标:家= RDK.Item(家)# Obter da simulacao os deslocamentos IMOV等效,# definidos posicoes ipo com relacao ao ponto REF iPos1 = RDK.Item(“iPos1”)iPos2 = RDK.Item(“iPos2”)iPos0 = RDK.Item(“iPos0”)iPos3 = RDK.Item(“iPos3”)Referencia = RDK.Item(“REF1”)Ref_pose = Referencia.Pose () xyz_refR = (0, 0, 0, 0, 0, 0] xyz_refR [0:2] = Ref_pose.Pos () # extrair Rx, Rz #找不到函数,设置(-180,0,0)xyz_refR [3:5] = [-180, 0,0] # extrair deslocamentos e rotacoes relativas # 1。Extrair pose e transform para xyz_ref iPos0_pose = iPos0.Pose() xyz_ref0=[0,0,0,0,0] xyz_ref0[0:2] = iPos0_pose. pos () # Extrair Rx,Ry,Rz # xyz_ref0[3],xyz_ref0[4],xyz_ref0[5] = iPos0_pose. rotationpose() #打印(iPos0_pose. rotationpose()) #无法找到函数,设置(-180,0,0)xyz_ref0 [3:5] = [-180, 0,0] dPos0 = (0, 0, 0, 0, 0, 0] iPos1_pose = iPos1.Pose () xyz_ref1 = (0, 0, 0, 0, 0, 0] xyz_ref1 [0:2] = iPos1_pose.Pos () # extrair Rx, Rz # xyz_ref1 [3:5] = iPos1_pose.rotationPose() #找不到函数,设置(-180,0,0)xyz_ref1 [3:5] = [-180, 0,0] dPos1 = (0, 0, 0, 0, 0, 0] iPos2_pose = iPos2.Pose () xyz_ref2 = (0, 0, 0, 0, 0, 0] xyz_ref2 [0:2] = iPos2_pose.Pos () # extrair Rx, Rz # xyz_ref2 [3:5] = iPos2_pose.rotationPose() #找不到函数,设置(-180,0,0)xyz_ref2 [3:5] = [-180, 0,0] dPos2 =(0, 0, 0, 0, 0, 0) # 2。 Calcular apenas as translações/rotações relativas for index in range(0,5): #print(index, dPos0[index], xyz_ref0[index]); dPos0[index] = xyz_ref0[index] - xyz_refR[index] dPos1[index] = xyz_ref1[index] - xyz_refR[index] dPos2[index] = xyz_ref2[index] - xyz_refR[index] # Move the robot to the Home point: robot.MoveJ(Home) # Move the robot to the Home point: robot.MoveJ(Referencia) # Criei um target temporário para visualizar a atualização do IMOVE no simulador # Se não for desejado, simplesmente utilize o código (2) e comentar as instruções # entre os comentários #(1) e #/(1) iTarget= RDK.AddTarget('TempTarget') # Executar a sequencia três vezes, incrementando a posição referencia em Z de 100 mm # O deslocamento foi realizado diretamente, mas um programa mais claro utilizaria uma ou # mais variáveis contendo o delta em/a redor de cada eixo dx, dy, dz, dQx, dQy, dQz # dPos0+i*[dx dy dz dQx dQy dQz] for i in range(3): # Executar i-ésima sequencia IMOVE relativo a IREF1 #(1) # IMOVE posição 1 (iPos0) # extrair xyz_ref temporários e aplicar translação ix,iy,iz,iQx,iQy,iQz = dPos0 iz=iz+i*100 # mudar posição/orientação temporária iTarget # utilizando robodk.Offset testPos=Offset(Referencia.Pose(),ix,iy,iz,iQx,iQy,iQz) iTarget.setPose(testPos) robot.MoveL(iTarget) # código (2) robot.MoveL(Offset(Ref1.Pos(), (dPos0+[0 0 i*100 0 0 0]))) # IMOVE posição 2 (iPos1) # extrair xyz_ref temporários e aplicar translação ix,iy,iz,iQx,iQy,iQz = dPos1 iz=iz+i*100 # mudar posição/orientação temporária iTarget # utilizando robodk.Offset iTarget.setPose(Offset(Referencia.Pose(),ix,iy,iz,iQx,iQy,iQz)) robot.MoveL(iTarget) # IMOVE posição 3 (iPos2) # extrair xyz_ref temporários e aplicar translação ix,iy,iz,iQx,iQy,iQz = dPos2 iz=iz+i*100 # mudar posição/orientação temporária iTarget # utilizando robodk.Offset iTarget.setPose(Offset(Referencia.Pose(),ix,iy,iz,iQx,iQy,iQz)) robot.MoveL(iTarget) #/(1) # código (2) # robot.MoveL(Offset(Ref1.Pos(), (dPos0+[0 0 i*100 0 0 0]))) # robot.MoveL(Offset(Ref1.Pos(), (dPos1+[0 0 i*100 0 0 0]))) # robot.MoveL(Offset(Ref1.Pos(), (dPos2+[0 0 i*100 0 0 0]))) # voltar para Home robot.MoveL(Home) # Limpar TempTarget iTarget.Delete() print('Fim')