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