以下代码是一个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))