in resources/search_sample.py [0:0]
def OrbitAnimal(cx, cy, radius, speed, altitude, camera_angle, animal):
"""
@param cx: The x position of our orbit starting location
@param cy: The x position of our orbit starting location
@param radius: The radius of the orbit circle
@param speed: The speed the drone should more, it's hard to take photos when flying fast
@param altitude: The altidude we want to fly at, dont fly too high!
@param camera_angle: The angle of the camera
@param animal: The name of the animal, used to prefix the photos
"""
x = cx - radius
y = cy
# set camera angle
client.simSetCameraOrientation(0, airsim.to_quaternion(
camera_angle * math.pi / 180, 0, 0)) # radians
# move the drone to the requested location
print("moving to position...")
client.moveToPositionAsync(
x, y, z, 1, 60, drivetrain=airsim.DrivetrainType.MaxDegreeOfFreedom, yaw_mode=airsim.YawMode(False, 0)).join()
pos = client.getMultirotorState().kinematics_estimated.position
dx = x - pos.x_val
dy = y - pos.y_val
yaw = airsim.to_eularian_angles(
client.getMultirotorState().kinematics_estimated.orientation)[2]
# keep the drone on target, it's windy out there!
print("correcting position and yaw...")
while abs(dx) > 1 or abs(dy) > 1 or abs(yaw) > 0.1:
client.moveToPositionAsync(
x, y, z, 0.25, 60, drivetrain=airsim.DrivetrainType.MaxDegreeOfFreedom, yaw_mode=airsim.YawMode(False, 0)).join()
pos = client.getMultirotorState().kinematics_estimated.position
dx = x - pos.x_val
dy = y - pos.y_val
yaw = airsim.to_eularian_angles(
client.getMultirotorState().kinematics_estimated.orientation)[2]
print("yaw is {}".format(yaw))
print("location is off by {},{}".format(dx, dy))
o = airsim.to_eularian_angles(
client.getMultirotorState().kinematics_estimated.orientation)
print("yaw is {}".format(o[2]))
# let's orbit around the animal and take some photos
nav = drone_orbit.OrbitNavigator(photo_prefix=animal, radius=radius, altitude=altitude, speed=speed, iterations=1, center=[
cx - pos.x_val, cy - pos.y_val], snapshots=30, image_dir="./drone_images/")
nav.start()