The following code is an example Python script that uses the RoboDK API to filter a target (pose target or joint target), using theFilterTargetcommand:
pose_filt, joints = robot.FilterTarget(nominal_pose, estimated_joints)
This example is useful if a 3rdparty application (other than RoboDK) generates the robot program using pose targets.
fromrobolinkimport*# API to communicate with RoboDK
fromrobodkimport*# basic matrix operations
defXYZWPR_2_Pose(xyzwpr):
returnKUKA_2_Pose(xyzwpr)# Convert X,Y,Z,A,B,C to a pose
defPose_2_XYZWPR(pose):
returnPose_2_KUKA(pose)# Convert a pose to X,Y,Z,A,B,C
# Start the RoboDK API and retrieve the robot:
RDK=Robolink()
robot=RDK.Item('',ITEM_TYPE_ROBOT)
ifnotrobot.Valid():
raiseException("Robot not available")
pose_tcp=XYZWPR_2_Pose([0,0,200,0,0,0])# Define the TCP
pose_ref=XYZWPR_2_Pose([400,0,0,0,0,0])# Define the Ref Frame
# Update the robot TCP and reference frame
robot.setTool(pose_tcp)
robot.setFrame(pose_ref)
#非常破碎nt for SolveFK and SolveIK (Forward/Inverse kinematics)
robot.setAccuracyActive(False)# Accuracy can be ON or OFF
# Define a nominal target in the joint space:
joints=[0,0,90,0,90,0]
# Calculate the nominal robot position for the joint target:
pose_rob=robot.SolveFK(joints)# robot flange wrt the robot base
# Calculate pose_target: the TCP with respect to the reference frame
pose_target=invH(pose_ref)*pose_rob*pose_tcp
print('Target not filtered:')
print(Pose_2_XYZWPR(pose_target))
joints_approx=joints# joints_approx must be within 20 deg
pose_target_filt,real_joints=robot.FilterTarget(pose_target,joints)
print('Target filtered:')
print(real_joints.tolist())
print(Pose_2_XYZWPR(pose_target_filt))