Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.33 KB | None | 0 0
  1. """Objektid."""
  2. from PiBot import PiBot
  3. import math
  4. import time
  5.  
  6. robot = PiBot()
  7.  
  8. speed = 8
  9. sleep = 0.05
  10. robot.set_grabber_height(100)
  11. buffer = 0.1
  12.  
  13.  
  14. def smooth_straight(angular_speed):
  15. """Robot moves straight and tries to maintain given angular speed"""
  16. start_time = time.time()
  17. start_e_right = robot.get_right_wheel_encoder()
  18. start_e_left = robot.get_left_wheel_encoder()
  19.  
  20. time_from_start = 0
  21.  
  22. power = 13
  23. increment = 1
  24. robot.set_wheels_speed(power)
  25.  
  26. while time_from_start < 10:
  27. delta_time = time.time() - start_time - time_from_start
  28. time_from_start = time.time() - start_time
  29.  
  30. degrees_from_start_r = robot.get_right_wheel_encoder() - start_e_right
  31. degrees_from_start_l = robot.get_left_wheel_encoder() - start_e_left
  32.  
  33. speed_right = degrees_from_start_r / time_from_start
  34. speed_left = degrees_from_start_l / time_from_start
  35.  
  36. if speed_right > angular_speed:
  37. robot.set_right_wheel_speed(power - increment)
  38. if speed_right < angular_speed:
  39. robot.set_right_wheel_speed(power + increment)
  40.  
  41. if speed_left > angular_speed:
  42. robot.set_left_wheel_speed(power - increment)
  43. if speed_left < angular_speed:
  44. robot.set_left_wheel_speed(power + increment)
  45. # robot.sleep(sleep)
  46. print(f"time_from_start = {time_from_start}")
  47. print(f"delta_time = {delta_time}")
  48. print(f"speed_right = {speed_right}")
  49. print(f"speed_left = {speed_left}")
  50. print(f"degrees_from_start_r = {degrees_from_start_r}")
  51. print(f"degrees_from_start_l = {degrees_from_start_l}")
  52. print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
  53.  
  54.  
  55. def smooth_left(angular_speed):
  56. """Robot turns left and tries to maintain given angular speed"""
  57. time_from_start = 0
  58. power = 13
  59. increment = 5
  60. start_time = time.time()
  61. start_rotation = robot.get_rotation()
  62. robot.set_right_wheel_speed(power)
  63. robot.set_left_wheel_speed(-power)
  64.  
  65. while time_from_start < 10:
  66. delta_time = time.time() - start_time - time_from_start
  67. time_from_start = time.time() - start_time
  68. rotation_from_start = robot.get_rotation() - start_rotation
  69.  
  70. rotation_speed = rotation_from_start / time_from_start
  71.  
  72. if rotation_speed > angular_speed:
  73. robot.set_right_wheel_speed(power - increment)
  74. robot.set_left_wheel_speed(-power + increment)
  75. if rotation_speed < angular_speed:
  76. robot.set_right_wheel_speed(power + increment)
  77. robot.set_left_wheel_speed(-power - increment)
  78.  
  79. # robot.sleep(sleep)
  80. print(f"time_from_start = {time_from_start}")
  81. print(f"delta_time = {delta_time}")
  82. print(f"rotation_speed = {rotation_speed}")
  83. print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
  84.  
  85.  
  86. def smooth_left2(angular_speed):
  87. """Robot moves straight and tries to maintain given angular speed"""
  88. start_time = time.time()
  89. start_e_right = robot.get_right_wheel_encoder()
  90. start_e_left = robot.get_left_wheel_encoder()
  91.  
  92. time_from_start = 0
  93. delta_time = 0
  94.  
  95. power = 13
  96. robot.set_right_wheel_speed(power)
  97. robot.set_left_wheel_speed(-power)
  98.  
  99. while time_from_start < 10:
  100. time_from_start = time.time() - start_time
  101.  
  102. degrees_from_start_r = robot.get_right_wheel_encoder() - start_e_right
  103. degrees_from_start_l = robot.get_left_wheel_encoder() - start_e_left
  104.  
  105. speed_right = degrees_from_start_r / time_from_start
  106. speed_left = degrees_from_start_l / time_from_start
  107.  
  108. if speed_right > angular_speed:
  109. robot.set_right_wheel_speed(power - 2)
  110. if speed_right < angular_speed:
  111. robot.set_right_wheel_speed(power + 2)
  112.  
  113. if speed_left > angular_speed:
  114. robot.set_left_wheel_speed(-power + 2)
  115. if speed_left < angular_speed:
  116. robot.set_left_wheel_speed(-power - 2)
  117. robot.sleep(sleep)
  118. print(f"time_from_start = {time_from_start}")
  119. print(f"delta_time = {delta_time}")
  120. print(f"speed_right = {speed_right}")
  121. print(f"speed_left = {speed_left}")
  122. print(f"degrees_from_start_r = {degrees_from_start_r}")
  123. print(f"degrees_from_start_l = {degrees_from_start_l}")
  124. print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
  125.  
  126.  
  127. def anti_left():
  128. """Robot spins/ turns backwards left."""
  129. global speed
  130. robot.set_left_wheel_speed(speed)
  131. robot.set_right_wheel_speed(-speed)
  132. robot.sleep(sleep)
  133.  
  134.  
  135. def left():
  136. """Robot spins/ turns left."""
  137. global speed
  138. robot.set_left_wheel_speed(-speed)
  139. robot.set_right_wheel_speed(speed)
  140. robot.sleep(sleep)
  141.  
  142.  
  143. def straight():
  144. """Robot moves straight."""
  145. robot.set_wheels_speed(speed)
  146. robot.sleep(sleep)
  147.  
  148.  
  149. def solve_triangle(a, b, angle):
  150. """Find side and angle of current triangle."""
  151. side = math.sqrt(a ** 2 + b ** 2 + 2 * a * b * math.cos(angle))
  152. return side
  153.  
  154.  
  155. def position_finder(master_list):
  156. """Scan the list and find the objects."""
  157. print("alustan position finderit")
  158. global buffer
  159. two_objects_list = []
  160. for i in master_list:
  161. if len(two_objects_list) == 2:
  162. two_objects_list.sort(key=lambda x: x[1])
  163. return two_objects_list
  164. elif i[0] > buffer:
  165. two_objects_list.append(i)
  166.  
  167.  
  168. def make_master_list():
  169. """Spin around and make a list of, what u see."""
  170. global buffer
  171. b = robot.get_front_middle_laser()
  172. a = robot.get_front_middle_laser()
  173. list_of_everything = []
  174. while abs(robot.get_rotation()) < 360:
  175. xx = 360 - robot.get_rotation()
  176. print(f"Delta middle laser = {abs(a - b)}")
  177. print(f"Delta encoder = {xx}")
  178. print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
  179. left()
  180. list_of_everything.append([abs(a - b), xx, b])
  181. a = b
  182. b = robot.get_front_middle_laser()
  183. print("ring sai täis")
  184. print(list_of_everything)
  185. robot.set_wheels_speed(0)
  186. return list_of_everything
  187.  
  188.  
  189. def turn_back(two_object_list):
  190. """Turn back to the rotation, where the object is."""
  191. print("alustasin turn backi")
  192. place = two_object_list[0][1]
  193. while (360 - (robot.get_rotation())) < place:
  194. anti_left()
  195. print(f" rotation = {360 - robot.get_rotation()}")
  196. robot.set_wheels_speed(0)
  197. print("Asukoht lukus")
  198.  
  199.  
  200. def encoder_finder(distance):
  201. """How many degrees needed to spin."""
  202. robot.close_grabber(0)
  203. a = robot.get_left_wheel_encoder()
  204. b = robot.WHEEL_DIAMETER
  205. c = 3.14 * b
  206. d = distance / c
  207. e = d * 360
  208. while robot.get_left_wheel_encoder() < a + e:
  209. straight()
  210. robot.set_wheels_speed(0)
  211.  
  212.  
  213. def move_to_object(two_object_list):
  214. """Robot goes to object and corrects itself."""
  215. print("alustan move to object")
  216. distance = two_object_list[0][2]
  217. robot.close_grabber(0)
  218. encoder_finder(distance)
  219. # while robot.get_front_middle_laser() > 0.1:
  220. # straight()
  221. # print(robot.get_front_middle_laser())
  222. robot.set_wheels_speed(0)
  223. print("kohal!!!")
  224.  
  225.  
  226. def turn_to_correct_angle(two_object_list):
  227. """When next to the object turn to the correct angle."""
  228. angle = two_object_list[0][1] - two_object_list[1][1]
  229. needed_angle = 60 - angle
  230. start_rotation = robot.get_rotation()
  231. while start_rotation + needed_angle < robot.get_rotation():
  232. anti_left()
  233.  
  234.  
  235. def back_to_correct_place(two_object_list):
  236. """Back out to the correct location until laser sees same distance as length between two objects."""
  237. first_length = two_object_list[0][2]
  238. second_length = two_object_list[1][2]
  239. angle = two_object_list[0][1] - two_object_list[1][1]
  240. correct_length = solve_triangle(first_length, second_length, angle)
  241. encoder_finder(correct_length)
  242.  
  243.  
  244. list_of_everything = make_master_list()
  245. list_of_objects = position_finder(list_of_everything)
  246.  
  247. print(f"first object positions = {list_of_objects[0]}")
  248. print(f"first object positions = {list_of_objects[1]}")
  249. turn_back(list_of_objects)
  250. move_to_object(list_of_objects)
  251. turn_to_correct_angle(list_of_objects)
  252. back_to_correct_place(list_of_objects)
  253.  
  254. # smooth_straight(180)
  255. # smooth_left(130)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement