Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.30 KB | None | 0 0
  1. """Pronks ja hõbe labürint."""
  2. from PiBot import PiBot
  3.  
  4.  
  5. class Robot:
  6. """
  7. The three primitives robotic paradigm: sense, plan, act [1].
  8.  
  9. Sense - gather information using the sensors
  10. Plan - create a world model using all the information and plan the next move
  11. Act - carry out the next step of the plan using actuators
  12. [1] https://en.wikipedia.org/wiki/Robotic_paradigm
  13. """
  14.  
  15. def __init__(self):
  16. """Creating the variables needed."""
  17. print("Initializing...")
  18. # rear left: 94
  19. # rear right: 108
  20. # diagonal: 59
  21. self.robot = PiBot()
  22. self.problem_solved = False
  23. self.state = "working"
  24. self.wall_distance = self.robot.get_rear_left_straight_ir()
  25. self.wall_distance_2 = self.robot.get_rear_right_straight_ir()
  26. self.start_right = 12
  27. self.right_laser_diagonal = self.robot.get_rear_right_diagonal_ir()
  28. self.right_ir = self.robot.get_rear_right_side_ir()
  29. self.front_ir = self.robot.get_rear_left_straight_ir()
  30. self.front_ir_right = self.robot.get_rear_right_straight_ir()
  31. self.left_laser = self.robot.get_rear_left_diagonal_ir()
  32. self.rotation = self.robot.get_rotation()
  33. self.start_rotation = self.robot.get_rotation()
  34. self.stop = 0
  35. self.speed = -13
  36. self.sleep = 0.05
  37.  
  38. def moving_straight(self):
  39. """Move straight."""
  40. print("moving straight")
  41. if self.right_laser_diagonal == self.start_right:
  42. print(f'vorduvad: {self.right_laser_diagonal} {self.start_right}')
  43. self.robot.set_wheels_speed(self.speed)
  44. elif self.right_laser_diagonal > self.start_right:
  45. print(f'kaugemal seinale: {self.right_laser_diagonal} > {self.start_right}')
  46. self.robot.set_left_wheel_speed(self.speed + 2)
  47. self.robot.set_right_wheel_speed(self.speed)
  48. elif self.right_laser_diagonal < self.start_right:
  49. print(f'lahemal seinale: {self.right_laser_diagonal} < {self.start_right}')
  50. self.robot.set_left_wheel_speed(self.speed)
  51. self.robot.set_right_wheel_speed(self.speed + 2)
  52.  
  53. def turn_left(self):
  54. """Turn left."""
  55. print("turning left")
  56. self.robot.set_wheels_speed(0)
  57. self.robot.sleep(3)
  58. start_rotation = self.rotation
  59. print('------------------------------------------')
  60. print(f"start {start_rotation}")
  61. rotation = self.rotation
  62. while start_rotation - 75 < rotation:
  63. print(f"current {rotation}")
  64. rotation = self.robot.get_rotation()
  65. self.robot.set_left_wheel_speed(-self.speed)
  66. self.robot.set_right_wheel_speed(self.speed)
  67. self.robot.sleep(self.sleep)
  68. print('------------------------------------------')
  69.  
  70. def turn_right(self):
  71. """Turn right."""
  72. print("Going away from the wall.")
  73. self.robot.set_left_wheel_speed(self.speed)
  74. self.robot.set_right_wheel_speed(-self.speed)
  75. self.robot.sleep(self.sleep)
  76.  
  77. def u_curve(self):
  78. """U curve."""
  79. print("U curve.")
  80. print("moving straight")
  81. self.robot.set_wheels_speed(self.speed)
  82. self.robot.sleep(0.7)
  83. self.robot.set_wheels_speed(0)
  84. self.robot.sleep(3)
  85. start_rotation = self.rotation
  86. print('------------------------------------------')
  87. print(f"start {start_rotation}")
  88. rotation = self.rotation
  89. while start_rotation + 60 > rotation:
  90. print(f"current {rotation}")
  91. rotation = self.robot.get_rotation()
  92. self.robot.set_left_wheel_speed(self.speed)
  93. self.robot.set_right_wheel_speed(-self.speed)
  94. self.robot.sleep(self.sleep)
  95. print('------------------------------------------')
  96. self.robot.set_wheels_speed(self.speed)
  97. self.robot.sleep(0.5)
  98.  
  99. def too_far_from_wall(self):
  100. """Too far from the wall."""
  101. print("Going closer to the wall.")
  102. self.robot.set_left_wheel_speed(-self.speed)
  103. self.robot.set_right_wheel_speed(self.speed)
  104. self.robot.sleep(self.sleep)
  105. self.robot.set_wheels_speed(self.speed)
  106.  
  107. def stop_robot(self):
  108. """Stop."""
  109. print("stopped")
  110. self.robot.set_left_wheel_speed(0)
  111. self.robot.set_right_wheel_speed(0)
  112.  
  113. def sense(self):
  114. """Update all the sensors."""
  115. print("Sensing...")
  116. self.right_laser_diagonal = self.robot.get_rear_right_diagonal_ir()
  117. print(f' parem: {self.right_laser_diagonal}')
  118. self.front_ir = self.robot.get_rear_left_straight_ir()
  119. self.front_ir_right = self.robot.get_rear_right_straight_ir()
  120. print(f' otse: {self.front_ir}')
  121. print(f' otse parem: {self.front_ir_right}')
  122. self.rotation = self.robot.get_rotation()
  123. self.right_ir = self.robot.get_rear_right_side_ir()
  124. print(f' kõige parem: {self.right_ir}')
  125. self.left_laser = self.robot.get_rear_left_diagonal_ir()
  126. print(f' vasak: {self.left_laser}')
  127.  
  128. def plan(self):
  129. """Make sure, what I need to do as my next action."""
  130. print("Sensing...")
  131. if self.front_ir >= self.wall_distance or self.front_ir_right >= self.wall_distance_2:
  132. self.state = "turn left"
  133. elif self.front_ir < self.wall_distance or self.front_ir < self.wall_distance_2:
  134. self.state = "following wall"
  135. if self.right_ir < 30:
  136. self.state = 'U curve'
  137. if self.left_laser < 20 and self.robot.get_front_middle_laser() > 1:
  138. self.state = "stop"
  139.  
  140. def act(self):
  141. """All differesnt actions possible."""
  142. print("Acting...")
  143. if self.state == "following wall":
  144. self.moving_straight()
  145. elif self.state == "turn left":
  146. self.turn_left()
  147. elif self.state == "turn right":
  148. self.turn_right()
  149. elif self.state == 'U curve':
  150. self.u_curve()
  151. elif self.state == "too far from the wall":
  152. self.too_far_from_wall()
  153. elif self.state == "stop":
  154. self.stop_robot()
  155.  
  156. def main(self):
  157. """Call on all the steps."""
  158. start_rotation = self.rotation
  159. print('------------------------------------------')
  160. print(f"start {start_rotation}")
  161. print(f'sein 1: {self.wall_distance}')
  162. print(f'sein 2: {self.wall_distance_2}')
  163. rotation = self.rotation
  164. while start_rotation + 155 > rotation:
  165. print(f"current {rotation}")
  166. rotation = self.robot.get_rotation()
  167. self.robot.set_left_wheel_speed(self.speed)
  168. self.robot.set_right_wheel_speed(-self.speed + 1)
  169. self.robot.sleep(self.sleep)
  170. print('------------------------------------------')
  171. while not self.problem_solved:
  172. if self.state == "stop":
  173. break
  174. self.sense()
  175. self.plan()
  176. self.act()
  177. self.robot.sleep(self.sleep) # 20 Hz
  178. if self.problem_solved:
  179. print("Solved! Good job, robot!")
  180. else:
  181. print("Unable to solve! :(")
  182.  
  183.  
  184. if __name__ == "__main__":
  185. robot = Robot()
  186. robot.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement