nanoik_v2.py (2917B)
1 from math import pi 2 from trianglesolver import solve, degree 3 import turtle 4 5 # eez = 0.5 6 # eex = -0.2 7 8 # lnk1 = 0.33 9 # lnk2 = 0.29 10 11 # eezL = 0.5625 12 # eezR = 0.5575 13 14 # foot_dist = 0.14 15 16 ikResult = [] 17 18 # stage 1 variables 19 20 a1 = 0 21 b1 = 0 22 c1 = 0 23 24 A1 = 0 25 B1 = 0 26 C1 = 0 27 28 # stage 2 variables 29 30 a2 = 0 31 b2 = 0 32 c2 = 0 33 34 A2 = 0 35 B2 = 0 36 C2 = 0 37 38 # stage 3 variables 39 40 meta_a = 0 41 meta_b = 0 42 meta_c = 0 43 44 def solveKinematicsSide(eez, eex, lnk1, lnk2): 45 if eex < 0: 46 ikResult = solveKinematicsNeg(eez, eex, lnk1, lnk2) 47 else: 48 ikResult = solveKinematicsPos(eez, eex, lnk1, lnk2) 49 50 return [ikResult[0], ikResult[1], ikResult[2]] 51 52 def solveKinematicsPos(eez, eex, lnk1, lnk2): 53 # stage 1 54 a,b,c,A,B,C = solve(a=eez, c=abs(eex), B=90*degree) 55 56 b1 = b 57 A1 = A / degree 58 C1 = C / degree 59 60 # stage 2 61 a,b,c,A,B,C = solve(a=lnk2, b=b1, c=lnk1) 62 63 A2 = A / degree 64 B2 = B / degree 65 C2 = C / degree 66 67 # stage 3 68 meta_a = (C1 + A2) 69 meta_b = (180 - B2) 70 meta_c = (C2 - C1) 71 72 # drawRadar(meta_a, meta_b, meta_c, lnk1, lnk2, "red") 73 74 return [meta_a, meta_b, meta_c] 75 76 def solveKinematicsNeg(eez, eex, lnk1, lnk2): 77 # stage 1 78 a,b,c,A,B,C = solve(a=abs(eex), c=eez, B=90*degree) 79 80 b1 = b 81 A1 = A / degree 82 C1 = C / degree 83 84 # stage 2 85 a,b,c,A,B,C = solve(a=lnk2, b=b1, c=lnk1) 86 87 A2 = A / degree 88 B2 = B / degree 89 C2 = C / degree 90 91 # stage 3 92 meta_a = ((C1 + A2) - 90) 93 meta_b = (180 - B2) 94 meta_c = (A1 + C2) 95 96 # drawRadar(meta_a, meta_b, meta_c, lnk1, lnk2, "red") 97 98 return [meta_a, meta_b, meta_c] 99 100 def solveKinematicsFront(eezL, eezR, foot_dist): 101 # stage 1 102 a,b,c,A,B,C = solve(a=foot_dist, c=(eezR + 0.115), B=90*degree) 103 104 b1 = b 105 A1 = A / degree 106 C1 = C / degree 107 108 # stage 2 109 a,b,c,A,B,C = solve(a=foot_dist, b=b1, c=(eezL + 0.115)) 110 111 A2 = A / degree 112 C2 = C / degree 113 114 # stage 3 115 116 foot_angle = 180 - (A1 + C2) 117 118 # drawRadarFront(foot_angle_R, foot_angle_L, eezL, eezR, foot_dist, "green") 119 120 return foot_angle 121 122 def drawRadarSide(meta_a, meta_b, meta_c, lnk1, lnk2, pencol): 123 board = turtle.Turtle() 124 125 turtle.resetscreen() 126 board.color(pencol) 127 128 board.right(90) # draw base 129 board.forward(40) 130 131 board.left(meta_a) 132 board.forward(lnk1 * 3) 133 134 board.right(meta_b) 135 board.forward(lnk2 * 3) 136 137 board.left(meta_c) 138 board.forward(40) 139 140 def drawRadarFront(foot_angle, eezL, eezR, foot_dist, pencol): 141 board = turtle.Turtle() 142 143 turtle.resetscreen() 144 board.color(pencol) 145 146 board.left(90) 147 board.forward(40) 148 149 board.left(90 - foot_angle) 150 board.forward((0.115 + eezR) * 3) 151 152 board.right(90) 153 board.forward(foot_dist * 3) 154 155 board.right(90) 156 board.forward((0.115 + eezL) * 3) 157 158 board.right(90 - foot_angle) 159 board.forward(40) 160 161 # print(solveKinematics(eez, eex, lnk1, lnk2)) 162 # print(solveKinematicsFront(eezL, eezR, foot_dist))