package org.droidplanner.services.android.impl.core.drone.variables; import com.MAVLink.ardupilotmega.msg_camera_feedback; import com.MAVLink.ardupilotmega.msg_mount_status; import org.droidplanner.services.android.impl.core.drone.DroneInterfaces.DroneEventsType; import org.droidplanner.services.android.impl.core.drone.DroneVariable; import org.droidplanner.services.android.impl.core.drone.autopilot.MavLinkDrone; import org.droidplanner.services.android.impl.core.survey.CameraInfo; import org.droidplanner.services.android.impl.core.survey.Footprint; import com.o3dr.services.android.lib.coordinate.LatLong; import com.o3dr.services.android.lib.drone.attribute.AttributeType; import com.o3dr.services.android.lib.drone.property.Altitude; import com.o3dr.services.android.lib.drone.property.Attitude; import com.o3dr.services.android.lib.drone.property.Gps; import java.util.ArrayList; import java.util.List; public class Camera extends DroneVariable { private CameraInfo camera = new CameraInfo(); private List<Footprint> footprints = new ArrayList<Footprint>(); private double gimbal_pitch; public Camera(MavLinkDrone myDrone) { super(myDrone); } public void newImageLocation(msg_camera_feedback msg) { footprints.add(new Footprint(camera, msg)); myDrone.notifyDroneEvent(DroneEventsType.FOOTPRINT); } public List<Footprint> getFootprints(){ return footprints; } public Footprint getLastFootprint() { return footprints.get(footprints.size() - 1); } public CameraInfo getCamera() { return camera; } public Footprint getCurrentFieldOfView() { final Altitude droneAltitude = (Altitude) myDrone.getAttribute(AttributeType.ALTITUDE); double altitude = droneAltitude.getAltitude(); final Gps droneGps = (Gps) myDrone.getAttribute(AttributeType.GPS); LatLong position = droneGps.getPosition(); //double pitch = myDrone.getOrientation().getPitch() - gimbal_pitch; final Attitude attitude = (Attitude) myDrone.getAttribute(AttributeType.ATTITUDE); double pitch = attitude.getPitch(); double roll = attitude.getRoll(); double yaw = attitude.getYaw(); return new Footprint(camera, position, altitude, pitch, roll, yaw); } public void updateMountOrientation(msg_mount_status msg_mount_status) { gimbal_pitch = 90 - msg_mount_status.pointing_a / 100; } }