Advertisement
Alekal

Untitled

Dec 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.02 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. print("Acting...")
  56. rospy.sleep(0.3)
  57. while self.drive is True:
  58. print(self.sense())
  59. print('LEFT DIAGONAL: ' + str(self.robot.get_rear_left_diagonal_ir()))
  60. print('LEFT middle: ' + str(self.mid))
  61. print('RIGHT DIAGONAL: ' + str(self.robot.get_rear_right_diagonal_ir()))
  62. # if self.left > 0.9 and self.right > 0.9:
  63. # self.problem_solved = True
  64. # self.robot.set_wheels_speed(0)
  65. # self.main()
  66. if self.mid < 0.05:
  67. self.robot.set_wheels_speed(20)
  68. print("Should start turning")
  69. rospy.sleep(0.7)
  70. self.robot.set_wheels_speed(0)
  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. self.calculate_real_speed()
  74. self.robot.set_left_wheel_speed(-self.left_speed)
  75. self.robot.set_right_wheel_speed(-self.right_speed)
  76. if self.robot.get_rear_left_diagonal_ir() != self.robot.get_rear_right_diagonal_ir() != 0.05:
  77. if self.left < self.right:
  78. print('Turn right a little bit')
  79. self.robot.set_left_wheel_speed(-20)
  80. self.robot.set_right_wheel_speed(-self.right_speed)
  81. elif self.left > self.right:
  82. print('Turn left a little bit')
  83. self.robot.set_left_wheel_speed(-self.left_speed)
  84. self.robot.set_right_wheel_speed(-20)
  85. rospy.sleep(0.05)
  86.  
  87. def turn_right(self):
  88. print("here")
  89. atm_enc = abs(self.robot.get_left_wheel_encoder())
  90. while abs(self.robot.get_left_wheel_encoder()) > atm_enc + 505:
  91. print('LEFT DIAGONAL: ' + str(self.robot.get_rear_left_diagonal_ir()))
  92. print('LEFT middle: ' + str(self.mid))
  93. print('RIGHT DIAGONAL: ' + str(self.robot.get_rear_right_diagonal_ir()))
  94. print('Turn right')
  95. self.robot.set_left_wheel_speed(-self.left_speed)
  96. self.robot.set_right_wheel_speed(-self.right_speed)
  97. rospy.sleep(0.05)
  98. self.robot.set_right_wheel_speed(15)
  99. self.robot.set_left_wheel_speed(20)
  100. rospy.sleep(0.05)
  101. self.drive = True
  102.  
  103. def main(self):
  104. while self.problem_solved is False:
  105. if self.drive is False:
  106. self.turn_right()
  107. elif self.drive is True:
  108. self.sense()
  109. self.act()
  110. rospy.sleep(0.05)
  111. if self.problem_solved:
  112. print("Solved! Good job, robot!")
  113. exit()
  114. else:
  115. print("Unable to solve! :(")
  116.  
  117.  
  118. if __name__ == "__main__":
  119. robot = Robot()
  120. robot.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement