使用

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

pose_filt,关节 = robot.FilterTarget(nominal_pose, estimated_joints)

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

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

from robolink import *     # 与 RoboDK 通信的 API

from RoboDK import *       # 基本矩阵运算

 

def XYZWPR_2_Pose(xyzwpr):

    return KUKA_2_Pose(xyzwpr) # 将 X、Y、Z、A、B、C 转换为位姿

   

def Pose_2_XYZWPR(pose):

    return Pose_2_KUKA(pose) # 将位姿转换为 X、Y、Z、A、B、C

 

# 启动 RoboDK API 并检索机器人:

RDK= Robolink()

机器人= RDK.Item('', ITEM_TYPE_ROBOT)

if not robot.Valid():

    raise Exception("机器人不可用")

 

pose_tcp= XYZWPR_2_Pose([0, 0, 200, 0, 0, 0]) # 定义 TCP

 

pose_ref= XYZWPR_2_Pose([400, 0, 0, 0, 0, 0]) # 定义基准坐标系

 

# 更新机器人 TCP 和参考坐标系

robot.setTool(pose_tcp)

robot.setFrame(pose_ref)

 

# 对 SolveFK 和 SolveIK(正向/逆向运动学)非常重要

robot.setAccuracyActive(False) # 精度可开可关

 

# 在关节空间中定义一个名义目标:

关节= [0, 0, 90, 0, 90, 0]

 

# 计算关节目标的机器人标称位置:

pose_rob= robot.SolveFK(joints) # 相对于机器人基座的机器人凸缘

 

# 计算 pose_target:相对于参考坐标系的 TCP

pose_target= invH(pose_ref)*pose_rob*pose_tcp

 

print('Target not filtered:')

print(Pose_2_XYZWPR(pose_target))

 

joints_approx= joints # joints_approx 必须在 20 度以内

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

print('Target filtered:')

print(real_joints.tolist())

print(Pose_2_XYZWPR(pose_target_filt))