Advertisement
Alekal

Untitled

Dec 20th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.21 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.  
  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.         while True:
  52.             print(self.sense())
  53.             print('LEFT DIAGONAL: ' + str(self.robot.get_rear_left_diagonal_ir()))
  54.             print('LEFT middle: ' + str(self.mid))
  55.             print('RIGHT DIAGONAL: ' + str(self.robot.get_rear_right_diagonal_ir()))
  56.             if self.left > 0.9 and self.right > 0.9:
  57.                 self.problem_solved = True
  58.                 self.robot.set_wheels_speed(0)
  59.                 self.main()
  60.             if self.mid < 0.05:
  61.                 self.robot.set_wheels_speed(0)
  62.                 rospy.sleep(0.2)
  63.                 print("Should start turning")
  64.                 print(self.robot.get_front_left_ir())
  65.                 print(self.robot.get_front_right_ir())
  66.             if self.mid == 0.05 and self.robot.get_rear_left_diagonal_ir() == self.robot.get_rear_right_diagonal_ir():
  67.                 self.calculate_real_speed()
  68.                 self.robot.set_left_wheel_speed(-self.left_speed)
  69.                 self.robot.set_right_wheel_speed(-self.right_speed)
  70.             if self.robot.get_rear_left_diagonal_ir() != 0.05 or self.robot.get_rear_right_diagonal_ir() != 0.05:
  71.                 if self.left < self.right:
  72.                     print('Turn right a little bit')
  73.                     self.robot.set_left_wheel_speed(-20)
  74.                     self.robot.set_right_wheel_speed(-self.right_speed)
  75.                 elif self.left > self.right:
  76.                     print('Turn left a little bit')
  77.                     self.robot.set_left_wheel_speed(-self.left_speed)
  78.                     self.robot.set_right_wheel_speed(-20)
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.     # def turn_left(self):
  88.     #     left_side = self.robot.get_front_left_ir()
  89.     #     right_side = self.robot.get_front_right_ir()
  90.     #     left_enc = self.robot.get_left_wheel_encoder()
  91.     #     if left_side > right_side:
  92.     #         print("left turn")
  93.     #         while self.robot.get_left_wheel_encoder() < left_enc + 505:
  94.     #             self.robot.set_left_wheel_speed(-15)
  95.     #             self.robot.set_right_wheel_speed(15)
  96.     #     print("finished turning")
  97.     #     self.robot.set_wheels_speed(0)
  98.     #     rospy.sleep(2)
  99.     #     self.main()
  100.     #
  101.     # def turn_right(self):
  102.     #     left_side = self.robot.get_front_left_ir()
  103.     #     right_side = self.robot.get_front_right_ir()
  104.     #     left_enc = self.robot.get_left_wheel_encoder()
  105.     #     if left_side < right_side:
  106.     #         print("right turn")
  107.     #         while self.robot.get_left_wheel_encoder() < left_enc + 505:
  108.     #             self.robot.set_left_wheel_speed(15)
  109.     #             self.robot.set_right_wheel_speed(-15)
  110.     #     print("finished turning")
  111.     #     self.robot.set_wheels_speed(0)
  112.     #     rospy.sleep(2)
  113.     #     self.main()
  114.  
  115.     def main(self):
  116.         while self.problem_solved is False:
  117.             self.sense()
  118.             self.act()
  119.             rospy.sleep(0.05)  # 20 Hz
  120.         if self.problem_solved:
  121.             print("Solved! Good job, robot!")
  122.             exit()
  123.         else:
  124.             print("Unable to solve! :(")
  125.  
  126.  
  127. if __name__ == "__main__":
  128.     robot = Robot()
  129.     robot.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement