O código a seguir é um exemplo de script Python que usa a API do RoboDK para filtrar um ponto (ponto de pose ou ponto joint), usando o comando FilterTarObter:
pose_filt, joints = robot.FilterTarObter(nominal_pose, estimated_joints)
Esse exemplo é útil se um aplicativo de terceiros (que não seja o RoboDK) gerar o programa do robô usando pontos 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 frame de referência
# Atualizar o TCP do robô e o frame 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 ponto nominal no espaço da articulação:
articulações= [0, 0, 90, 0, 90, 0]
# Calcular a posição nominal do robô para o ponto da articulação:
pose_rob= robot.SolveFK(joints) # flange do robô em relação à base do robô
# Calcular pose_ponto: o TCP em relação ao frame de referência
pose_tarObter= invH(pose_ref)*pose_rob*pose_tcp
print('TarObter not filtered:')
print(Pose_2_XYZWPR(pose_tarObter))
joints_approx= joints # joints_approx deve estar dentro de 20 graus
pose_tarObter_filt, real_joints= robot.FilterTarObter(pose_tarObter, joints)
print('TarObter filtered:')
print(real_joints.tolist())
print(Pose_2_XYZWPR(pose_tarObter_filt))