#这个脚本允许你加载你的UR机器人控制器中使用的相同的运动学。#你需要生成URP文件使用真正的你的控制器(不是RoboDK或者你的模拟器)#这个脚本加载RoboDK独一无二的你的机器人运动学和名义和控制器之间你可以切换从机器人运动学参数菜单面板从robolink进口操作系统导入*导入tkinter一样tk从tkinter进口filedialog进口xml.etree.ElementTree ET # Define(仅是由RoboDK)类Robolink2 (robolink):def UpdateKinematicsUR(自我,机器人,dh_ur、宽容):self._check_connection () self._send_line (UpdateKinematicsUR) self._send_item(机器人)self._send_matrix (dh_ur) self._send_array((公差))状态= self._rec_int()味精= self._rec_line () errors_before = self._rec_array () errors_after = self._rec_array () self._check_status()返回状态,味精,errors_before.list (), errors_after.list() #开始RoboDK API RDK = Robolink2 () # = RDK选择要更新的机器人机器人。ItemUserPick('Select a UR robot', ITEM_TYPE_ROBOT)如果不是robot. valid (): RDK。你的机器人没有找到。首先从RoboDK库中加载你的UR机器人”)quit() #检索URP文件root = tk.Tk() root.withdraw() #root.lift() root。attributes("-topmost", True) rdk_path = RDK.getParam('PATH_OPENSTATION') fileopen_urp = filedialog. getparam ('PATH_OPENSTATION')askopenfilename(initialdir=rdk_path, title = "选择一个在真实机器人上使用Polyscope生成的URP文件(不是使用RoboDK或UR Simulator生成的)",filetypes = (("URP文件","*. URP "),("所有文件","*.*")))))如果不是fileopen_urp: quit() #读取压缩的URP文件urp_xml =无import gzip with gzip。open(fileopen_urp, 'rb') as fid_gz: urp_xml = fid_gz.read() #从URP文件中检索运动学参数dh_alpha = None dh_a = None dh_dTheta = None dh_d = None #增加了对旧版本和新版本的支持urp_xml = urp_xml.decode('utf-8') id_1 = urp_xml.index(' = 0 and id_2 > id_1: urp_xml = urp_xml[id_1:id_2+13] xml = ET.fromstring(urp_xml) #for kin_node in xml:#.iterfind('kinematics'): #for kin_node in kin_node: for child in xml: if child。tag == 'alpha': if len(child.attrib) == 0: #新版本dh_alpha = [] for d in child: dh_alpha.append(float(d.text))) else: value = child。Attrib ['value'] dh_alpha = [float(v) for value中的v。替换(“”).split(" ")]打印(“阿尔法:”+ str (dh_alpha))如果孩子。tag == 'a': if len(child.attrib) == 0: #新版本dh_a = [] for d in child: dh_a.append(float(d.text)*1000.0) else: value = child。Attrib ['value'] dh_a = [float(v)*1000.0 for v in value。替换(“”).split(" ")]打印(',' + str (dh_a))如果孩子。tag == 'deltaTheta': if len(child.attrib) == 0: #新版本dh_dTheta = [] for child中的d: dh_dTheta.append(float(d.text))) else: value = child。attrib['value'] dh_dTheta = [float(v) for value中的v。替换(“”).split(" ")]打印(“deltaTheta:”+ str (dh_dTheta))如果孩子。tag == 'd': if len(child.attrib) == 0: #新版本dh_d = [] for child中的d: dh_d.append(float(d.text)*1000.0) else: value = child。Attrib ['value'] dh_d = [float(v)*1000.0 for v in value。replace(' ', ").split(',')] print('d: ' + str(dh_d)) #确保我们找到了关于DH表的所有信息,如果dh_alpha为None或dh_a为None或dh_dTheta为None或dh_d为None: RDK。在提供的URP文件中没有找到运动学信息。

quit() #更新RoboDK中的DH表信息dh_mat = Mat([dh_alpha, dh_a, dh_dTheta, dh_d]).tr() #虚拟/g校准的数值公差:公差= 0.001 #更新机器人运动学。RoboDK计算DHM表,给定DH参数status, msg, errors_before, errors_after = RDK。UpdateKinematicsUR(robot, dh_mat, tolerance) #如果状态>= 0:msg = '“+ MSG +”。如果errors_before[3] > 20.0: msg += ' #确保标称错误是在合理的范围内(最大错误20毫米应该是安全的)

警告!有些事情看起来不太对。你在RoboDK里选对机器人了吗?' MSG += '

选择参数在机器人面板中切换标称和UR控制器运动学。重要:该表显示DHM参数(Denavit Hartenberg Modified)' else: msg = '' + MSG + '' MSG += '

警告!出错了'打印(msg)打印(errors_before)打印(errors_after) RDK.ShowMessage(msg)