code: def set_attitude(roll_angle = 0.0, pitch_angle = 0.0,
                   yaw_angle = None, yaw_rate = 0.0, use_yaw_rate = False,
                   thrust = 0.5, duration = 0):
      
      send_attitude_target(roll_angle, pitch_angle,
                           yaw_angle, yaw_rate, False,
                           thrust)
      start = time.time()
      while time.time() - start < duration:
          send_attitude_target(roll_angle, pitch_angle,
                               yaw_angle, yaw_rate, False,
                               thrust)
          time.sleep(0.1)
      # Reset attitude, or it will persist for 1s more due to the timeout
      send_attitude_target(0, 0,
                           0, 0, True,
                           thrust)
docs: Note that from AC3.3 the message should be re-sent more often than every
      second, as an ATTITUDE_TARGET order has a timeout of 1s.
      In AC3.2.1 and earlier the specified attitude persists until it is canceled.
      The code below should work on either version.
      Sending the message multiple times is the recommended way.