Advertisement
Alekal

Untitled

Dec 19th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.48 KB | None | 0 0
  1. import rospy
  2. from PiBot import PiBot
  3. class Robot:
  4. """
  5. The three primitives robotic paradigm: sense, plan, act [1].
  6. Sense - gather information using the sensors
  7. Plan - create a world model using all the information and plan the next move
  8. Act - carry out the next step of the plan using actuators
  9. [1] https://en.wikipedia.org/wiki/Robotic_paradigm
  10. """
  11. def __init__(self):
  12. print("Initializing...")
  13. self.robot = PiBot()
  14. self.start_timestamp = rospy.get_time()
  15. self.problem_solved = False
  16. self.left_speed = 0
  17. self.right_speed = 0
  18. self.speed = 14
  19. self.mid = self.robot.get_rear_left_straight_ir()
  20. self.left = self.robot.get_rear_left_side_ir()
  21. self.right = self.robot.get_rear_right_side_ir()
  22. self.left_encoder = self.robot.get_left_wheel_encoder()
  23. self.right_encoder = self.robot.get_right_wheel_encoder()
  24. self.drive = True
  25. # def calculate_real_speed(self):
  26. # left_encoder_0 = self.robot.get_left_wheel_encoder()
  27. # right_encoder_0 = self.robot.get_right_wheel_encoder()
  28. # drive = True
  29. # while drive:
  30. # left_encoder_new = self.robot.get_left_wheel_encoder()
  31. # right_encoder_new = self.robot.get_right_wheel_encoder()
  32. # left_error = left_encoder_new - left_encoder_0
  33. # right_error = right_encoder_new - right_encoder_0
  34. # error = right_error - left_error
  35. # left_encoder_0 = self.robot.get_left_wheel_encoder()
  36. # right_encoder_0 = self.robot.get_right_wheel_encoder()
  37. # self.left_speed = (int(self.speed + round((error / 2) / self.speed)))
  38. # self.right_speed = (int(self.speed - round((error / 2) / self.speed)))
  39. # return self.left_speed, self.right_speed
  40.  
  41. def sense(self):
  42. self.mid = self.robot.get_rear_left_straight_ir()
  43. self.left = self.robot.get_rear_left_side_ir()
  44. self.right = self.robot.get_rear_right_side_ir()
  45. return (self.mid, self.left,
  46. self.right)
  47.  
  48. def act(self):
  49. print("Acting...")
  50. rospy.sleep(0.5)
  51. left_encoder_start = self.robot.get_left_wheel_encoder()
  52. right_encoder_start = self.robot.get_right_wheel_encoder()
  53. self.drive = True
  54. while self.drive is True:
  55. print(self.sense())
  56. print('LEFT DIAGONAL: ' + str(self.robot.get_rear_left_diagonal_ir()))
  57. print('LEFT middle: ' + str(self.mid))
  58. print('RIGHT DIAGONAL: ' + str(self.robot.get_rear_right_diagonal_ir()))
  59. # left_encoder = self.robot.get_left_wheel_encoder()
  60. # right_encoder = self.robot.get_right_wheel_encoder()
  61. # left_encoder_change = left_encoder - left_encoder_start
  62. # right_encoder_change = right_encoder - right_encoder_start
  63. # problem = right_encoder_change - left_encoder_change
  64. # left_encoder_start = self.robot.get_left_wheel_encoder()
  65. # right_encoder_start = self.robot.get_right_wheel_encoder()
  66. # self.robot.set_left_wheel_speed(-int(self.speed + round((problem / 2) / self.speed)))
  67. # self.robot.set_right_wheel_speed(-int(self.speed + round((problem / 2) / self.speed)))
  68. if self.mid < 0.05 and self.robot.get_rear_right_straight_ir() < 0.05:
  69. self.robot.set_wheels_speed(0)
  70. rospy.sleep(0.2)
  71. self.drive = False
  72. if self.mid == 0.05 and self.robot.get_rear_left_diagonal_ir() == self.robot.get_rear_right_diagonal_ir():
  73. left_encoder = self.robot.get_left_wheel_encoder()
  74. right_encoder = self.robot.get_right_wheel_encoder()
  75. left_encoder_change = left_encoder - left_encoder_start
  76. right_encoder_change = right_encoder - right_encoder_start
  77. problem = right_encoder_change - left_encoder_change
  78. left_encoder_start = self.robot.get_left_wheel_encoder()
  79. right_encoder_start = self.robot.get_right_wheel_encoder()
  80. self.robot.set_left_wheel_speed(-int(self.speed + round((problem / 2) / self.speed)))
  81. self.robot.set_right_wheel_speed(-int(self.speed + round((problem / 2) / self.speed)))
  82. if self.robot.get_rear_left_diagonal_ir() != 0.05 or self.robot.get_rear_right_diagonal_ir() != 0.05:
  83. if self.left < self.right:
  84. print('Turn right a little bit')
  85. self.robot.set_left_wheel_speed(-18)
  86. self.robot.set_right_wheel_speed(-self.right_speed)
  87. elif self.left > self.right:
  88. print('Turn left a little bit')
  89. self.robot.set_left_wheel_speed(-self.left_speed)
  90. self.robot.set_right_wheel_speed(-18)
  91.  
  92. # def turning(self):
  93. # left_encoder_start = self.robot.get_left_wheel_encoder()
  94. # right_encoder_start = self.robot.get_right_wheel_encoder()
  95. # if self.robot.get_front_right_ir() > self.robot.get_front_left_ir():
  96. # self.robot.set_left_wheel_speed(self.speed)
  97. # self.robot.set_right_wheel_speed(self.speed)
  98. # rospy.sleep(0.2)
  99. # left_encoder = self.robot.get_left_wheel_encoder()
  100. # right_encoder = self.robot.get_right_wheel_encoder()
  101. # left_encoder_change = left_encoder - left_encoder_start
  102. # right_encoder_change = right_encoder - right_encoder_start
  103. # problem = right_encoder_change - left_encoder_change
  104. # left_encoder_start = self.robot.get_left_wheel_encoder()
  105. # right_encoder_start = self.robot.get_right_wheel_encoder()
  106. # self.robot.set_left_wheel_speed(-int(self.speed + round((problem / 2) / self.speed)))
  107. # self.robot.set_right_wheel_speed(int(self.speed - round((problem / 2) / self.speed)))
  108. # rospy.sleep(1.2)
  109. # self.drive = True
  110. # if self.robot.get_front_right_ir() < self.robot.get_front_left_ir():
  111. # self.robot.set_left_wheel_speed(self.speed)
  112. # self.robot.set_right_wheel_speed(self.speed)
  113. # rospy.sleep(0.2)
  114. # left_encoder = self.robot.get_left_wheel_encoder()
  115. # right_encoder = self.robot.get_right_wheel_encoder()
  116. # left_encoder_change = left_encoder - left_encoder_start
  117. # right_encoder_change = right_encoder - right_encoder_start
  118. # problem = right_encoder_change - left_encoder_change
  119. # left_encoder_start = self.robot.get_left_wheel_encoder()
  120. # right_encoder_start = self.robot.get_right_wheel_encoder()
  121. # self.robot.set_left_wheel_speed(int(self.speed - round((problem / 2) / self.speed)))
  122. # self.robot.set_right_wheel_speed(-int(self.speed + round((problem / 2) / self.speed)))
  123. # rospy.sleep(1.2)
  124. # self.drive = True
  125.  
  126. def main(self):
  127. self.robot.set_grabber_height(100)
  128. while not self.problem_solved:
  129. if self.drive is True:
  130. self.sense()
  131. self.act()
  132. # if self.drive is False:
  133. # self.turning()
  134. rospy.sleep(0.05) # 20 Hz
  135. if self.problem_solved:
  136. print("Solved! Good job, robot!")
  137. exit()
  138. else:
  139. print("Unable to solve! :(")
  140.  
  141.  
  142. if __name__ == "__main__":
  143. robot = Robot()
  144. robot.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement