通过

以下代码是一个Python脚本示例,使用FilterTarget命令,利用RoboDKAPI过滤目标(位姿目标或关节目标):

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

如果第三方应用程序(RoboDK除外)使用位姿目标生成机器人程序,本示例将非常有用。

Note:如果程序是使用API自动生成的,则不需要这样做。

fromrobolinkimport*#APItocommunicatewithRoboDK

fromrobodkimport*#basicmatrixoperations

 

defXYZWPR_2_Pose(xyzwpr):

returnKUKA_2_Pose(xyzwpr)#ConvertX,Y,Z,A,B,Ctoapose

 

defPose_2_XYZWPR(pose):

returnPose_2_KUKA(pose)#ConvertaposetoX,Y,Z,A,B,C

 

#StarttheRoboDKAPIandretrievetherobot:

RDK=Robolink()

robot=RDK.Item('',ITEM_TYPE_ROBOT)

ifnotrobot.Valid():

raiseException("Robotnotavailable")

 

pose_tcp=XYZWPR_2_Pose([0,0,200,0,0,0])#DefinetheTCP

 

pose_ref=XYZWPR_2_Pose([400,0,0,0,0,0])#DefinetheRefFrame

 

#UpdatetherobotTCPandreferenceframe

robot.setTool(pose_tcp)

robot.setFrame(pose_ref)

 

#VeryimportantforSolveFKandSolveIK(Forward/Inversekinematics)

robot.setAccuracyActive(False)#AccuracycanbeONorOFF

 

#Defineanominaltargetinthejointspace:

joints=[0,0,90,0,90,0]

 

#Calculatethenominalrobotpositionforthejointtarget:

pose_rob=robot.SolveFK(joints)#robotflangewrttherobotbase

 

#Calculatepose_target:theTCPwithrespecttothereferenceframe

pose_target=invH(pose_ref)*pose_rob*pose_tcp

 

print('Targetnotfiltered:')

print(Pose_2_XYZWPR(pose_target))

 

joints_approx=joints#joints_approxmustbewithin20deg

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

print('Targetfiltered:')

print(real_joints.tolist())

print(Pose_2_XYZWPR(pose_target_filt))