Ejemplo n.º 1
0
        public static bool LoadMissions(string folder)
        {
            DirectoryInfo d      = new DirectoryInfo(folder);
            bool          loaded = true;

            Missions = new Dictionary <string, SMission>();

            foreach (var file in d.GetFiles("*.waypoints"))
            {
                SMission mission = new SMission(Path.GetFileNameWithoutExtension(file.Name));
                loaded = loaded && LoadMission(file.FullName, mission);
                if (loaded)
                {
                    Missions.Add(mission.Name, mission);
                }
            }

            return(loaded);
        }
Ejemplo n.º 2
0
        public static bool LoadMission(string filename, SMission mission)
        {
            if (!File.Exists(filename))
            {
                return(false);
            }

            StreamReader reader = new StreamReader(filename);
            string       header = reader.ReadLine();

            // Ignore the first line
            if (header == null || !header.Contains("QGC WPL"))
            {
                return(false);
            }

            while (!reader.EndOfStream)
            {
                string line = reader.ReadLine();

                // Ignore comments
                if (line.StartsWith("#"))
                {
                    continue;
                }

                string[] items = line.Split(new[] { '\t', ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);

                if (items.Length <= 9)
                {
                    continue;
                }

                try
                {
                    SMissionItem missionItem = new SMissionItem();

                    // First point is home
                    if (items[0] == "0")
                    {
                        missionItem.IsHome = true;
                    }

                    // I'm not sure why we do this, but this is what mission planner does
                    if (items[2] == "3")
                    {
                        // abs MAV_FRAME_GLOBAL_RELATIVE_ALT=3
                        missionItem.frame = (MAVLink.MAV_FRAME.LOCAL_NED);
                    }
                    else
                    {
                        missionItem.frame = (MAVLink.MAV_FRAME.GLOBAL);
                    }
                    missionItem.command = (MAVLink.MAV_CMD)Enum.Parse(typeof(MAVLink.MAV_CMD), items[3], false);
                    missionItem.p1      = float.Parse(items[4], new CultureInfo("en-US"));

                    missionItem.alt = (float)(double.Parse(items[10], new CultureInfo("en-US")));
                    missionItem.lat = (double.Parse(items[8], new CultureInfo("en-US")));
                    missionItem.lng = (double.Parse(items[9], new CultureInfo("en-US")));

                    missionItem.p2 = (float)(double.Parse(items[5], new CultureInfo("en-US")));
                    missionItem.p3 = (float)(double.Parse(items[6], new CultureInfo("en-US")));
                    missionItem.p4 = (float)(double.Parse(items[7], new CultureInfo("en-US")));

                    mission.Items.Add(missionItem);
                }
                catch
                {
                    return(false);
                }
            }
            reader.Close();
            return(true);
        }