import sys import urx from urx.robotiq_two_finger_gripper import Robotiq_Two_Finger_Gripper import time import math3d as m3d import json # roy = nodes # siegfried = struts print("") print("") print('Hello from ur10test.py!') print("") with open('../assembly/python-urx/setup.json') as f: data = json.load(f) # print(data) # set values setup=data["setup"] globalSetup=data["setup"]["parameters"] reference_roy=globalSetup["nodePickupRobotHome"] reference_siegfried=globalSetup["edgePickupRobotHome"] strut90_siegfried_j=globalSetup["edge90PickupRobotHome"] latticePitch=globalSetup["latticePitch"] sleepTime=globalSetup["sleep"] sleepTime1=globalSetup["sleep1"] # reference locations are 40 mm above pickup points reference_roy_j = (reference_roy["x"], reference_roy["y"], reference_roy["z"], reference_roy["rx"], reference_roy["ry"], reference_roy["rz"]) reference_siegfried_j = (reference_siegfried["x"], reference_siegfried["y"], reference_siegfried["z"], reference_siegfried["rx"], reference_siegfried["ry"], reference_siegfried["rz"]) strut90_siegfried_j = (strut90_siegfried_j["x"], strut90_siegfried_j["y"], strut90_siegfried_j["z"], strut90_siegfried_j["rx"], strut90_siegfried_j["ry"], strut90_siegfried_j["rz"]) roy = urx.Robot("192.168.1.52") roy.set_tcp((0, 0, 0.1, 0, 0, 0)) roy.set_payload(2, (0, 0, 0.1)) siegfried = urx.Robot("192.168.1.53") siegfried.set_tcp((0, 0, 0.1, 0, 0, 0)) siegfried.set_payload(2, (0, 0, 0.1)) time.sleep(0.2) #leave some time to robot to process the setup commands # placement location reference (top view) # [S1] [S2] # #[S3] [N1] [S4] [N2] [S5] # # [S6] [S7] for node in setup["nodes"]: print("Build Node:") print(node) v = globalSetup["v"] a = globalSetup["a"] # move to reference locations and get current transformation matrices roy.movej(reference_roy_j, acc = a, vel = v) roy_trans = roy.get_pose() time.sleep(sleepTime) v = globalSetup["v1"] a = globalSetup["a1"] # move to pickup locations from reference roy_trans.pos.z -= globalSetup["nodeRelativeDistance"]["z"] roy.set_pose(roy_trans, acc = a, vel = v) time.sleep(sleepTime) # close and open grippers roy.send_program('set_tool_digital_out(0, True)') #close node tool time.sleep(sleepTime1) # roy.send_program('set_tool_digital_out(0, False)') #open node tool # time.sleep(sleepTime1) # move to pickup locations from reference roy_trans.pos.z += globalSetup["nodeRelativeDistance"]["z"] roy.set_pose(roy_trans, acc = a, vel = v) time.sleep(sleepTime) # move roy (nodes) to programming location from reference, drops to program, then lifts to reference height roy_trans.pos.x += globalSetup["programmingRelativeDistance"]["x"] roy_trans.pos.y += globalSetup["programmingRelativeDistance"]["y"] roy.set_pose(roy_trans, acc = a, vel = v) roy_trans.pos.z -= globalSetup["programmingRelativeDistance"]["z"] roy.set_pose(roy_trans, acc = a, vel = v) time.sleep(1) # programming time! roy_trans.pos.z += globalSetup["programmingRelativeDistance"]["z"] roy.set_pose(roy_trans, acc = a, vel = v) # move roy (nodes) to node from reference location roy_trans.pos.x += ((globalSetup["nodeRelativeDistance"]["x"])-globalSetup["programmingRelativeDistance"]["x"])+node["x"]*latticePitch["x"] roy_trans.pos.y += ((globalSetup["nodeRelativeDistance"]["y"])-globalSetup["programmingRelativeDistance"]["y"])+node["y"]*latticePitch["y"] roy.set_pose(roy_trans, acc = a, vel = v) roy_trans.pos.z -= (globalSetup["nodeRelativeDistance"]["z"])-node["z"]*latticePitch["z"] roy.set_pose(roy_trans, acc = a, vel = v) roy.send_program('set_tool_digital_out(0, False)') #open node tool time.sleep(sleepTime1) roy_trans.pos.z += (globalSetup["nodeRelativeDistance"]["z"]) roy.set_pose(roy_trans, acc = a, vel = v) time.sleep(sleepTime) v = globalSetup["v"] a = globalSetup["a"] # move to reference locations and get current transformation matrices roy.movej(reference_roy_j, acc = a, vel = v) roy_trans = roy.get_pose() time.sleep(sleepTime) print("") for edge in setup["edges"]: print("Build Edge:") print(edge) v = globalSetup["v"] a = globalSetup["a"] # move to reference locations and get current transformation matrices siegfried.movej(reference_siegfried_j, acc = a, vel = v) siegfried_trans = siegfried.get_pose() time.sleep(sleepTime) v = globalSetup["v1"] a = globalSetup["a1"] # move to pickup locations from reference siegfried_trans.pos.z -= globalSetup["nodeRelativeDistance"]["z"] siegfried.set_pose(siegfried_trans, acc = a, vel = v) time.sleep(sleepTime) # close and open grippers siegfried.send_program('set_tool_digital_out(0, True)') #close strut tool time.sleep(sleepTime1) # siegfried.send_program('set_tool_digital_out(0, False)') #open strut tool # time.sleep(sleepTime1) # move to pickup locations from reference siegfried_trans.pos.z += globalSetup["nodeRelativeDistance"]["z"] siegfried.set_pose(siegfried_trans, acc = a, vel = v) time.sleep(sleepTime) # placement location reference (top view) # [S1] [S2] # #[S3] [N1] [S4] [N2] [S5] # # [S6] [S7] #move siegfried (struts) to S1, then to build level 0.5, from reference location if edge["rz"]>0.1 : print("not rotated") siegfried_trans.pos.x += ((globalSetup["edgeRelativeDistance"]["y"]))+edge["y"]*latticePitch["y"] siegfried_trans.pos.y += ((globalSetup["edgeRelativeDistance"]["x"]))+edge["x"]*latticePitch["x"] siegfried.set_pose(siegfried_trans, acc = a, vel = v) siegfried_trans.pos.z -= (globalSetup["edgeRelativeDistance"]["z"]-0.008)-edge["z"]*latticePitch["z"] siegfried.set_pose(siegfried_trans, acc = a, vel = v) siegfried.send_program('set_tool_digital_out(0, False)') #open strut tool time.sleep(sleepTime1) siegfried_trans.pos.z += (globalSetup["nodeRelativeDistance"]["z"]) siegfried.set_pose(siegfried_trans, acc = a, vel = v) else: print("rotated") v = globalSetup["v"] a = globalSetup["a"] #move siegfried (struts) to S4, then to build level 0.5, from reference location #uses movej for the rotation and to get close to the build plate, to avoid sketchiness siegfried.movej(strut90_siegfried_j, acc = a, vel = v) siegfried_trans = siegfried.get_pose() time.sleep(sleepTime) v = globalSetup["v1"] a = globalSetup["a1"] siegfried_trans.pos.y -= latticePitch["x"]*(edge["x"]+0.5) siegfried.set_pose(siegfried_trans, acc = a, vel = v) siegfried_trans.pos.z -= (globalSetup["edgeRelativeDistance"]["z"]-0.008) siegfried.set_pose(siegfried_trans, acc = a, vel = v) siegfried.send_program('set_tool_digital_out(0, False)') #open strut tool time.sleep(sleepTime1) #use movej to go back to origin point after moving back up siegfried_trans.pos.z += (globalSetup["nodeRelativeDistance"]["z"]) siegfried.set_pose(siegfried_trans, acc = a, vel = v) v = globalSetup["v"] a = globalSetup["a"] # move to reference locations and get current transformation matrices siegfried.movej(reference_siegfried_j, acc = a, vel = v) siegfried_trans = siegfried.get_pose() time.sleep(sleepTime) print ("roy's current pose: ", roy.getj()) print ("siegfried's current pose: ", siegfried.getj())