code: def turn_to_angle(self, speed, angle_target_degrees, brake=True, block=True):
          
          assert self.odometry_thread_id, "odometry_start() must be called to track robot coordinates"
  
          # Make both target and current angles positive numbers between 0 and 360
          if angle_target_degrees < 0:
              angle_target_degrees += 360
  
          angle_current_degrees = math.degrees(self.theta)
  
          if angle_current_degrees < 0:
              angle_current_degrees += 360
  
          # Is it shorter to rotate to the right or left
          # to reach angle_target_degrees?
          if angle_current_degrees > angle_target_degrees:
              turn_right = True
              angle_delta = angle_current_degrees - angle_target_degrees
          else:
              turn_right = False
              angle_delta = angle_target_degrees - angle_current_degrees
  
          if angle_delta > 180:
              angle_delta = 360 - angle_delta
              turn_right = not turn_right
  
          log.debug("%s: turn_to_angle %s, current angle %s, delta %s, turn_right %s" %
              (self, angle_target_degrees, angle_current_degrees, angle_delta, turn_right))
          self.odometry_coordinates_log()
  
          if turn_right:
              self.turn_right(speed, angle_delta, brake, block)
          else:
              self.turn_left(speed, angle_delta, brake, block)
  
          self.odometry_coordinates_log()
docs: Rotate in place to `angle_target_degrees` at `speed`