Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.47 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 = 45
  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 = -12
  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 - 90 < 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. self.robot.set_left_wheel_speed(self.speed)
  81. self.robot.set_right_wheel_speed(self.speed)
  82. self.robot.sleep(0.1)
  83.  
  84. def too_far_from_wall(self):
  85. """Too far from the wall."""
  86. print("Going closer to the wall.")
  87. self.robot.set_left_wheel_speed(-self.speed)
  88. self.robot.set_right_wheel_speed(self.speed)
  89. self.robot.sleep(self.sleep)
  90. self.robot.set_wheels_speed(self.speed)
  91.  
  92. def stop_robot(self):
  93. """Stop."""
  94. print("stopped")
  95. self.robot.set_left_wheel_speed(0)
  96. self.robot.set_right_wheel_speed(0)
  97.  
  98. def sense(self):
  99. """Update all the sensors."""
  100. print("Sensing...")
  101. self.right_laser_diagonal = self.robot.get_rear_right_diagonal_ir()
  102. print(f' parem: {self.right_laser_diagonal}')
  103. self.front_ir = self.robot.get_rear_left_straight_ir()
  104. self.front_ir_right = self.robot.get_rear_right_straight_ir()
  105. print(f' otse: {self.front_ir}')
  106. print(f' otse parem: {self.front_ir_right}')
  107. self.rotation = self.robot.get_rotation()
  108.  
  109. def plan(self):
  110. """Make sure, what I need to do as my next action."""
  111. print("Sensing...")
  112. if self.right_laser_diagonal < 40:
  113. self.state = 'U curve'
  114. if self.front_ir >= self.wall_distance or self.front_ir_right >= self.wall_distance_2:
  115. self.state = "turn left"
  116. elif self.front_ir < self.wall_distance or self.front_ir < self.wall_distance_2:
  117. self.state = "following wall"
  118. if self.front_ir < 10 and self.front_ir_right < 10 and self.right_laser_diagonal < 40:
  119. self.state = "stop"
  120.  
  121. def act(self):
  122. """All differesnt actions possible."""
  123. print("Acting...")
  124. if self.state == "following wall":
  125. self.moving_straight()
  126. elif self.state == "turn left":
  127. self.turn_left()
  128. elif self.state == "turn right":
  129. self.turn_right()
  130. elif self.state == 'U curve':
  131. self.u_curve()
  132. elif self.state == "too far from the wall":
  133. self.too_far_from_wall()
  134. elif self.state == "stop":
  135. print("stopped")
  136. self.stop_robot()
  137.  
  138. def main(self):
  139. """Call on all the steps."""
  140. self.robot.sleep(2)
  141. start_rotation = self.rotation
  142. print('------------------------------------------')
  143. print(f"start {start_rotation}")
  144. print(f'sein 1: {self.wall_distance}')
  145. print(f'sein 2: {self.wall_distance_2}')
  146. rotation = self.rotation
  147. while start_rotation + 175 > rotation:
  148. print(f"current {rotation}")
  149. rotation = self.robot.get_rotation()
  150. self.robot.set_left_wheel_speed(self.speed)
  151. self.robot.set_right_wheel_speed(-self.speed + 1)
  152. self.robot.sleep(self.sleep)
  153. print('------------------------------------------')
  154. while not self.problem_solved:
  155. self.sense()
  156. self.plan()
  157. self.act()
  158. self.robot.sleep(self.sleep) # 20 Hz
  159. if self.problem_solved:
  160. print("Solved! Good job, robot!")
  161. else:
  162. print("Unable to solve! :(")
  163.  
  164.  
  165. if __name__ == "__main__":
  166. robot = Robot()
  167. robot.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement