Advertisement
Guest User

mazePERF

a guest
Dec 19th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.72 KB | None | 0 0
  1. """MAZE 1."""
  2. import rospy
  3. from PiBot import PiBot
  4.  
  5.  
  6. class Robot:
  7. """
  8. The three primitives robotic paradigm: sense, plan, act [1].
  9.  
  10. Sense - gather information using the sensors
  11. Plan - create a world model using all the information and plan the next move
  12. Act - carry out the next step of the plan using actuators
  13. [1] https://en.wikipedia.org/wiki/Robotic_paradigm
  14. """
  15.  
  16. def __init__(self):
  17. """Begin robot."""
  18. print("Initializing...")
  19. self.robot = PiBot()
  20. self.start_timestamp = rospy.get_time()
  21. self.problem_solved = False
  22. self.robot.set_grabber_height(100)
  23. self.robot.close_grabber(100)
  24. if self.robot.is_simulation():
  25. self.speed = 15
  26. else:
  27. self.speed = 12
  28. self.no_speed = 0
  29.  
  30. def move_straight(self):
  31. """Moving forward."""
  32. self.robot.set_left_wheel_speed(-self.speed)
  33. self.robot.set_right_wheel_speed(-self.speed)
  34.  
  35. def move_backwards(self):
  36. """Moving backwards."""
  37. self.robot.set_left_wheel_speed(self.speed)
  38. self.robot.set_right_wheel_speed(self.speed)
  39.  
  40. def stop(self):
  41. """Stop function."""
  42. self.robot.set_left_wheel_speed(self.no_speed)
  43. self.robot.set_right_wheel_speed(self.no_speed)
  44.  
  45. def turn_left(self):
  46. """Turn left function."""
  47. self.robot.set_left_wheel_speed(-self.speed)
  48. self.robot.set_right_wheel_speed(self.speed)
  49.  
  50. def turn_right(self):
  51. """Turn right function."""
  52. self.robot.set_left_wheel_speed(self.speed)
  53. self.robot.set_right_wheel_speed(-self.speed)
  54.  
  55. def drive_to_wall(self):
  56. """Drive hard."""
  57. left_side = self.robot.get_rear_left_side_ir()
  58. left_straight = self.robot.get_rear_left_straight_ir()
  59. right_straight = self.robot.get_rear_right_straight_ir()
  60. print("driving to wall and turning left")
  61. while True:
  62. # sõidab seinani ja pöörab vasakule
  63. left_straight = self.robot.get_rear_left_straight_ir()
  64. right_straight = self.robot.get_rear_right_straight_ir()
  65. left_side = self.robot.get_rear_right_side_ir()
  66. # driving till sees a wall and turns (90degrees)
  67. if left_straight < 0.045 or right_straight < 0.045:
  68. self.stop()
  69. rospy.sleep(2)
  70. break
  71. elif left_side < 0.05:
  72. self.stop()
  73. self.wall_follower()
  74. break
  75. else:
  76. self.move_straight()
  77.  
  78. def wall_follower(self):
  79. """Follow wall."""
  80. left_side = self.robot.get_rear_left_side_ir()
  81. print("wall follower")
  82. while True:
  83. left_side = self.robot.get_rear_left_side_ir()
  84. left_straight = self.robot.get_rear_left_straight_ir()
  85. right_straight = self.robot.get_rear_right_straight_ir()
  86. left_diagonal = self.robot.get_rear_left_diagonal_ir()
  87. print(left_side)
  88. # peatub kui näeb seina
  89. if left_straight < 0.06 and right_straight < 0.06:
  90. self.stop()
  91. break
  92. # kui sein on liiga kaugel, pöörab sitaks seina poole
  93. elif left_side >= 0.07:
  94. self.robot.set_left_wheel_speed(-8)
  95. self.robot.set_right_wheel_speed(-13)
  96. # kui sein on kaugel, pöörab seina poole
  97. elif left_side >= 0.04:
  98. self.robot.set_left_wheel_speed(-11)
  99. self.robot.set_right_wheel_speed(-14)
  100. # diagonal panic
  101. elif left_diagonal < 0.03:
  102. print("LEFT DIAGONAL ON")
  103. print(left_diagonal)
  104. self.turn_left()
  105. # kui sein liiga lähedal, siis pöörab sealt eemale
  106. elif left_side <= 0.02:
  107. self.robot.set_left_wheel_speed(-12)
  108. self.robot.set_right_wheel_speed(-6)
  109. elif left_side <= 0.03:
  110. self.robot.set_left_wheel_speed(-14)
  111. self.robot.set_right_wheel_speed(-11)
  112. else:
  113. self.robot.set_left_wheel_speed(-15)
  114. self.robot.set_right_wheel_speed(-14)
  115.  
  116. def corner_move(self):
  117. """When robot get into corner. Move A."""
  118. print("doing corner move")
  119. right_encoder = self.robot.get_right_wheel_encoder()
  120. encoder = right_encoder
  121. # turns right 90 degrees
  122. while right_encoder >= encoder - 500:
  123. right_encoder = self.robot.get_right_wheel_encoder()
  124. self.turn_right()
  125. # drive 1 sec backwards
  126. self.move_backwards()
  127. rospy.sleep(1)
  128. right_encoder = self.robot.get_right_wheel_encoder()
  129. encoder = right_encoder
  130. # turns left 180 degrees
  131. while right_encoder <= encoder + 1000:
  132. right_encoder = self.robot.get_right_wheel_encoder()
  133. self.turn_left()
  134. self.stop()
  135.  
  136. def corner_move2(self):
  137. """When robot get into corner. Move A."""
  138. print("doing corner move 2")
  139. right_encoder = self.robot.get_right_wheel_encoder()
  140. encoder = right_encoder
  141. # turns left 90 degrees
  142. while right_encoder <= encoder + 500:
  143. right_encoder = self.robot.get_right_wheel_encoder()
  144. self.turn_left()
  145. self.stop()
  146.  
  147.  
  148. if __name__ == "__main__":
  149. robot = Robot()
  150. if robot.robot.is_simulation():
  151. robot.drive_to_wall()
  152. while True:
  153. robot.corner_move()
  154. robot.wall_follower()
  155. else:
  156. while True:
  157. robot.wall_follower()
  158. robot.corner_move2()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement