Advertisement
Alekal

Untitled

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