校准机器人后,我们有两个选项可使用已校准机器人的绝对精度来生成程序:
● 过滤现有程序:修改程序中的所有机器人目标,以提高机器人的准确性。可以手动完成,也可以使用API。
● 使用RoboDK进行离线编程可生成准确的程序(已过滤生成的程序,包括使用API生成的程序)。
要手动过滤现有程序,请执行以下操作:将机器人程序文件拖放到RoboDK的主屏幕中(或选择“文件”➔打开),然后选择仅过滤。该程序将被过滤并保存在同一文件夹中。过滤器摘要将提及使用过滤算法是否存在任何问题。如果要在RoboDK中进行仿真,我们还可以选择导入程序。如果程序具有任何依赖项(工具框架或基本框架定义,子程序等),它们必须位于导入第一个程序的相同目录中。
一旦将程序导入RoboDK中,就可以以绝对精度或绝对精度重新生成程序。在RoboDK的主要精度设置(工具➔选件➔准确性),我们可以决定是否要始终使用精确的运动学来生成程序,是否要每次询问或是否要使用当前的机器人运动学。可以通过右键单击机器人并激活/禁用“使用精确运动学”标签来更改当前的机器人运动学。如果处于活动状态,我们将看到一个绿色的点,如果未处于活动状态,我们将看到一个红色的点。
给定已校准的机器人,可以使用RoboDK过滤完整的程序,而使用 筛选程序 呼叫:
机器人。筛选程序(file_program)
库的“宏”部分中提供了一个名为FilterProgram的宏示例。以下代码是使用RoboDK API过滤程序的Python脚本示例。
从 机器人链接 进口 * #与RoboDK通信的API
从 罗布德克 进口 * #基本矩阵运算
进口 操作系统 #路径操作
#获取当前工作目录
CWD = 操作系统。路径。目录名(操作系统。路径。真实路径(__文件__))
#启动RoboDK(如果未运行)并链接到API
RDK = Robolink()
#可选:提供以下参数以在后台运行
#RDK = 机器人链接(args ='/ NOSPLASH / NOSHOW / HIDDEN')
#获取已校准的测站(.rdk文件)或机械手文件(.robot):
#提示:校准后,右键单击机器人,然后选择“另存为.robot”
标定档案= CWD + '/KUKA-KR6.rdk'
#获取程序文件:
file_program= CWD + '/Prog1.src'
#加载RDK文件或机械手文件:
calib_item= RDK。添加文件(标定档案)
如果 不 calib_item。有效():
提高 例外(“加载时出错” + 标定档案)
#检索机械手(如果只有一个机械手,则不会弹出窗口):
机器人 = RDK。ItemUserPick(“选择要过滤的机器人”, ITEM_TYPE_ROBOT)
如果 不 机器人。有效():
提高 例外(“未选择机器人或不可用”)
#激活精度
机器人。setAccuracyActive(1个)
#过滤程序:这将自动保存程序副本
#根据机器人品牌使用重命名的文件
状态, 摘要 = 机器人。筛选程序(file_program)
如果 状态 == 0:
打印(“程序过滤成功”)
打印(摘要)
calib_item。删除()
RDK。关闭RoboDK()
其他:
打印(“程序筛选失败!错误代码:%i” % 状态)
打印(摘要)
RDK。ShowRoboDK()
以下代码是一个示例Python脚本,该脚本使用RoboDK API来过滤目标(姿势目标或联合目标), FilterTarget命令:
pose_filt,关节= robot.FilterTarget(nominal_pose,estimated_joints)
如果第三方应用程序(不是RoboDK)使用姿势目标生成机器人程序,则此示例很有用。
注意:如果使用API自动生成程序,则不需要这样做。
从 机器人链接 进口 * #与RoboDK通信的API
从 罗布德克 进口 * #基本矩阵运算
定义 XYZWPR_2_Pose(y):
返回 KUKA_2_Pose(y)#将X,Y,Z,A,B,C转换为姿势
定义 姿势_2_XYZWPR(姿势):
返回 姿势_2_KUKA(姿势)#将姿势转换为X,Y,Z,A,B,C
#启动RoboDK API并检索机械手:
RDK = 机器人链接()
机器人 = RDK。项目('', ITEM_TYPE_ROBOT)
如果 不 机器人。有效():
提高 例外(“机器人不可用”)
pose_tcp= XYZWPR_2_Pose([0, 0, 200, 0, 0, 0])#定义TCP
pose_ref= XYZWPR_2_Pose([400, 0, 0, 0, 0, 0])#定义参考框架
#更新机械手TCP和参考框架
机器人。setTool(pose_tcp)
机器人。setFrame(pose_ref)
#对于SolveFK和SolveIK(正向/反向运动学)非常重要
机器人。setAccuracyActive(假) #精度可以为开或关
#在关节空间中定义名义目标:
关节 = [0, 0, 90, 0, 90, 0]
#计算关节目标的机器人标称位置:
pose_rob= 机器人。SolveFK(关节)#机器人法兰与机器人底座
#计算pose_target:相对于参考帧的TCP
pose_target= v(pose_ref)*pose_rob*pose_tcp
打印(“目标未过滤:”)
打印(姿势_2_XYZWPR(pose_target))
joints_approx= 关节 #joints_approx必须在20度以内
pose_target_filt, real_joints = 机器人。FilterTarget(pose_target, 关节)
打印(“目标已过滤:”)
打印(real_joints。列出())
打印(姿势_2_XYZWPR(pose_target_filt))