diff --git a/ur5_control.py b/ur5_control.py
index 4878725..7a8e630 100755
--- a/ur5_control.py
+++ b/ur5_control.py
@@ -190,6 +190,11 @@ def move_to_polar(start_pos, end_pos):
return rx_intermediate
+def degtorad(angle):
+ return angle/180.0 * math.pi
+def radtodeg(angle):
+ return angle*180.0 / math.pi
+
def move_to_home():
global rob
@@ -216,37 +221,35 @@ def normalize_degree(theta):
# Return angle
return normalized_theta
+# Calculate base angle and r relative to shoulder joint
+def calculate_theta(x, y, a):
+ # Calculate if we need the + or - in our equations
+ if (x>-a and y>=0) or (x>a and y<0):
+ flip = 1
+ elif (x<-a and y>=0) or (x-a and y>=0) or (x>a and y<0):
- flip = 1
- elif (x<-a and y>=0) or (x 137:
+ print("CRASH! Shoulder at", joints[1] * 180/math.pi)
+ #else:
+ #print("Shoulder at", joints[1] * 180/math.pi)
# Return adjusted joint positions
return [o+j*i for j, o, i in zip(joints, offsets, inverse)]
+# gripper angle: from vertical
+# gripper length: from joint to start of grip
+# to flip, you can use flip=True or make gripper angle negative
+def offset_gripper_angle(x, y, z, gripperangle=35, gripperlength=0.2, flip=False):
+ if flip:
+ gripperangle = -degtorad(gripperangle)
+ grippery = gripperlength - math.cos(gripperangle) * gripperlength
+ grippery -= math.sin(gripperangle) * 0.1
+ gripperx = math.sin(gripperangle) * gripperlength
+ gripperx += (1-math.cos(gripperangle)) * 0.1
+ else:
+ gripperangle = degtorad(gripperangle)
+ grippery = gripperlength - math.cos(gripperangle) * gripperlength
+ grippery -= math.sin(gripperangle) * 0.1
+ gripperx = math.sin(gripperangle) * gripperlength
+ gripperx += (1-math.cos(gripperangle)) * 0.1
+ return get_joints_from_xyz_abs(x, y, z-grippery, rx=gripperangle, l3offset=-gripperx)
+
+
+def goto_holder_index(idx, z=0.05, gripperangle=40, flip=False):
+ joint = config["position_map"][idx]
+ print("Going to cable holder index", joint["index"], "at position", joint["pos"])
+ angles = offset_gripper_angle(joint["pos"][1]/1000, joint["pos"][0]/1000, z, gripperangle=gripperangle, flip=flip)
+ #rob.movej(angles, acc=2, vel=2)
+ return angles
+ #angles = get_joints_from_xyz_abs(joint["pos"][1]/1000, joint["pos"][0]/1000, 0.05, )
+
if __name__ == "__main__":
#rob.movej((0, 0, 0, 0, 0, 0), 0.1, 0.2)
#rob.movel((x, y, z, rx, ry, rz), a, v)
init("192.168.1.145")
print("Current tool pose is: ", rob.getl())
- move_to_home()
+ #move_to_home()
home_pose = [-0.4999999077032916,
-0.2000072960336574,
@@ -338,21 +371,49 @@ if __name__ == "__main__":
# angles = get_joints_from_xyz_abs(0, -0.13, 0)
# rob.movej(angles, acc=2, vel=2)
config = None
- # joints = []
- # for i in np.linspace(-0.2, -0.7, 50):
- # joints.append(get_joints_from_xyz_abs(i, 0, 0))
- # rob.movejs(joints, acc=2, vel=2)
+ joints = []
+ for i in np.linspace(-0.2, -0.7, 50):
+ joints.append(get_joints_from_xyz_abs(i, 0, 0))
+ #rob.movejs(joints, acc=2, vel=2)
import yaml
with open('config.yml', 'r') as fileread:
#global config
config = yaml.safe_load(fileread)
+ rob.movej(goto_holder_index(26, 0.2, 0), acc=2, vel=2)
joints = []
- for joint in config["position_map"]:
- print("Going to cable holder index", joint["index"], "at position", joint["pos"])
- angles = get_joints_from_xyz_abs(joint["pos"][1]/1000, joint["pos"][0]/1000, 0)
- joints.append(angles)
- rob.movejs(joints, acc=2, vel=2)
+
+ for i in np.linspace(1, 85, 50):
+ joints.append(goto_holder_index(26, 0.2, i))
+ rob.movejs(joints, acc=0.4, vel=2)
+
+ rob.movej(goto_holder_index(24, 0.2, -10), acc=2, vel=2)
+ rob.movej(goto_holder_index(24, 0.2, -15), acc=2, vel=2)
+ rob.movej(goto_holder_index(24, 0.2, -20), acc=2, vel=2)
+ rob.movej(goto_holder_index(24, 0.2, -28), acc=2, vel=2)
+ rob.movej(goto_holder_index(24, 0.2, -35), acc=2, vel=2)
+ rob.movej(goto_holder_index(24, 0.2, -40), acc=2, vel=2)
+ rob.movej(goto_holder_index(24, 0.2, -45), acc=2, vel=2)
+ rob.movej(goto_holder_index(24, 0.2, -50), acc=2, vel=2)
+ #rob.movej(goto_holder_index(24, 0.2, 60, flip=True), acc=2, vel=2)
+ #time.sleep(2)
+ #rob.movej(goto_holder_index(24, 0.15, 35, flip=True), acc=2, vel=2)
+ #time.sleep(10)
+ # time.sleep(4)
+ # goto_holder_index(26, 0.1, 20)
+ # time.sleep(4)
+ # goto_holder_index(26, 0.1, 30)
+ # time.sleep(4)
+ # goto_holder_index(26, 0.1, 40)
+ # for joint in config["position_map"]:
+ #joint = config["position_map"][26]
+ #print("Going to cable holder index", joint["index"], "at position", joint["pos"])
+ #angles = get_joints_from_xyz_abs(joint["pos"][1]/1000, joint["pos"][0]/1000, 0.05, )# rx=math.pi / 5)
+ #joints.append(angles)
+
+ #rob.movej(angles, acc=2, vel=2)
+ #time.sleep(10)
+ #rob.movejs(joints, acc=2, vel=2)
# joints = []
# for i in np.linspace(-0.3, -0.7, 50):
# joints.append(get_joints_from_xyz_abs(i, 0, 0))