Filtrar alvos com a API

O código a seguir é um exemplo de script Python que usa a API do RoboDK para filtrar um alvo (alvo de pose ou alvo de articulação), usando o comando FilterTarget:

pose_filt, joints = robot.FilterTarget(nominal_pose, estimated_joints)

Esse exemplo é útil se um aplicativo de terceiros (que não seja o RoboDK) gerar o programa do robô usando alvos de pose.

from robolink import *     # API para se comunicar com o RoboDK

from robodk import *       # operações básicas de matriz

 

def XYZWPR_2_Pose(xyzwpr):

    return KUKA_2_Pose(xyzwpr) # Converta X,Y,Z,A,B,C em uma pose

   

def Pose_2_XYZWPR(pose):

    return Pose_2_KUKA(pose) # Converta uma pose em X,Y,Z,A,B,C

 

# Inicie a API do RoboDK e recupere o robô:

RDK= Robolink()

robô= RDK.Item('', ITEM_TYPE_ROBOT)

se não for robot.Valid():

    raise Exception("Robot not available")

 

pose_tcp= XYZWPR_2_Pose([0, 0, 200, 0, 0, 0, 0]) # Define o TCP

 

pose_ref= XYZWPR_2_Pose([400, 0, 0, 0, 0, 0, 0]) # Define o quadro de referência

 

# Atualizar o TCP do robô e o quadro de referência

robot.setTool(pose_tcp)

robot.setFrame(pose_ref)

 

# Muito importante para SolveFK e SolveIK (cinemática direta/inversa)

robot.setAccuracyActive(False) # A precisão pode ser ativada ou desativada

 

# Definir um alvo nominal no espaço da articulação:

articulações= [0, 0, 90, 0, 90, 0]

 

# Calcular a posição nominal do robô para o alvo da articulação:

pose_rob= robot.SolveFK(joints) # flange do robô em relação à base do robô

 

# Calcular pose_alvo: o TCP em relação ao quadro de referência

pose_target= invH(pose_ref)*pose_rob*pose_tcp

 

print('Target not filtered:')

print(Pose_2_XYZWPR(pose_target))

 

joints_approx= joints # joints_approx deve estar dentro de 20 graus

pose_target_filt, real_joints= robot.FilterTarget(pose_target, joints)

print('Target filtered:')

print(real_joints.tolist())

print(Pose_2_XYZWPR(pose_target_filt))