Esempio n. 1
0
        public static void SIM_InjectPosition(double lat, double lng, double alt, SMission?mission, bool refreshMission)
        {
            mode = APMModes.Quadrotor.ROTOR_AUTO;

            dronePosition.altFromGround = alt;
            dronePosition.heading       = 57;
            GPSHdop           = 0.9;
            dronePosition.lat = lat;
            dronePosition.lng = lng;

            dronePosition.alt = alt;
            satCount          = 18;

            if (OnDroneReady != null)
            {
                OnDroneReady(true);
            }

            if (refreshMission)
            {
                if (mission.HasValue)
                {
                    missionItems = mission.Value.Items.ToArray();

                    if (OnMissionUpdated != null)
                    {
                        OnMissionUpdated(12, 12);
                    }
                }
            }
        }
Esempio n. 2
0
        public static void ChangeFlightMode(APMModes.Quadrotor mode)
        {
            MAVLink.mavlink_set_mode_t cmd = new MAVLink.mavlink_set_mode_t();
            cmd.target_system = sysID;
            cmd.base_mode     = 1;         // Not sure what this is
            cmd.custom_mode   = (uint)mode;

            byte[] commandBytes = mavlink.GenerateMAVLinkPacket(MAVLink.MAVLINK_MSG_ID.SET_MODE, cmd);
            SendPacket(commandBytes);
            System.Threading.Thread.Sleep(10);
            SendPacket(commandBytes);
        }
Esempio n. 3
0
        public static String ModeToString(APMModes.Quadrotor mode)
        {
            switch (mode)
            {
            case Quadrotor.ROTOR_STABILIZE:
                return("Stabilize");

            case Quadrotor.ROTOR_ACRO:
                return("Acro");

            case Quadrotor.ROTOR_ALT_HOLD:
                return("Alt Hold");

            case Quadrotor.ROTOR_AUTO:
                return("Auto");

            case Quadrotor.ROTOR_GUIDED:
                return("Guided");

            case Quadrotor.ROTOR_LOITER:
                return("Loiter");

            case Quadrotor.ROTOR_RTL:
                return("RTL");

            case Quadrotor.ROTOR_CIRCLE:
                return("Circle");

            case Quadrotor.ROTOR_LAND:
                return("Land");

            case Quadrotor.ROTOR_TOY:
                return("Toy");

            case Quadrotor.ROTOR_SPORT:
                return("Sport");

            case Quadrotor.ROTOR_AUTOTUNE:
                return("Autotune");

            case Quadrotor.ROTOR_POSHOLD:
                return("Pos Hold");

            case Quadrotor.ROTOR_TES:
                return("Third Eye");
            }

            return("Error");
        }
Esempio n. 4
0
 public static void UpdateLastFlightMode(APMModes.Quadrotor mode)
 {
     lastMode = mode;
 }
Esempio n. 5
0
        private static void HandlePacket(object packet)
        {
            if (packet.GetType() == typeof(MAVLink.mavlink_heartbeat_t))
            {
                MAVLink.mavlink_heartbeat_t parsed = (MAVLink.mavlink_heartbeat_t)packet;
                droneState = (MAVLink.MAV_STATE)parsed.system_status;

                //MAVLink.MAV_MODE
                mode = (APMModes.Quadrotor)parsed.custom_mode;
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_global_position_int_t))
            {
                MAVLink.mavlink_global_position_int_t gps = (MAVLink.mavlink_global_position_int_t)packet;
//              dronePosition.lat = (double)gps.lat / 10000000;
//              dronePosition.lng = (double)gps.lon / 10000000;
//              dronePosition.alt = (double)gps.alt / 1000;
                dronePosition.altFromGround = (double)gps.relative_alt / 1000;
                dronePosition.heading       = (double)gps.hdg / 100;
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_gps_raw_int_t))
            {
                MAVLink.mavlink_gps_raw_int_t gps = (MAVLink.mavlink_gps_raw_int_t)packet;
                GPSHdop           = (double)gps.eph / 100;
                dronePosition.lat = (double)gps.lat / 10000000;
                dronePosition.lng = (double)gps.lon / 10000000;

                dronePosition.alt = (double)gps.alt / 1000;
                satCount          = gps.satellites_visible;
                IsDroneReady();
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_mission_count_t))
            {
                MAVLink.mavlink_mission_count_t paramValue = (MAVLink.mavlink_mission_count_t)packet;
                missionWaypointsCount = paramValue.count;
                missionItems          = new SMissionItem[missionWaypointsCount];
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_mission_item_t))
            {
                MAVLink.mavlink_mission_item_t paramValue = (MAVLink.mavlink_mission_item_t)packet;
                SMissionItem missionItem = new SMissionItem();
                missionItem.command = (MAVLink.MAV_CMD)paramValue.command;

//              if (missionItem.command == MAVLink.MAV_CMD.TAKEOFF)
//                  // || (missionItem.command == MAVLink.MAV_CMD.RETURN_TO_LAUNCH))
//              {
//                  missionItem.lat = dronePosition.lat;
//                  missionItem.lng = dronePosition.lng;
//              }
//              else
                {
                    missionItem.lat = paramValue.x;
                    missionItem.lng = paramValue.y;
                }
                missionItem.p1 = paramValue.param1;
                missionItem.p2 = paramValue.param2;
                missionItem.p3 = paramValue.param3;
                missionItem.p4 = paramValue.param4;

                missionItem.alt = paramValue.z;

                // Is this the home?
                missionItem.IsHome = (paramValue.seq == 0);

                missionItems[paramValue.seq] = missionItem;
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_mission_request_t))
            {
                MAVLink.mavlink_mission_request_t missionReq = (MAVLink.mavlink_mission_request_t)packet;

                SetMissionItem(missionReq.seq);
                IsDroneReady();
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_param_value_t))
            {
                MAVLink.mavlink_param_value_t paramValue = (MAVLink.mavlink_param_value_t)packet;
                string name = ASCIIEncoding.ASCII.GetString(paramValue.param_id);
                name = name.Trim().Replace("\0", "");
                double val = paramValue.param_value;
                if (OnParamUpdate != null)
                {
                    OnParamUpdate(name, val, paramValue.param_index);
                }
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_ekf_status_report_t))
            {
                MAVLink.mavlink_ekf_status_report_t ekf = (MAVLink.mavlink_ekf_status_report_t)packet;
                // Check that all estimations are good
                EKFStatus = (float)Math.Max(ekf.pos_vert_variance, Math.Max(ekf.compass_variance, Math.Max(ekf.pos_horiz_variance, Math.Max(ekf.pos_vert_variance, ekf.terrain_alt_variance))));
                EKFFlags  = ekf.flags;
                IsDroneReady();
            }
        }