コード例 #1
0
ファイル: MainMenu.cs プロジェクト: Tricky12321/P5.Projekt
 public static void FixTime(int TimeInterval = 1)
 {
     string[] entries = Directory.GetFileSystemEntries(".", "*_INS*.csv", SearchOption.AllDirectories);
     foreach (var FilePath in entries)
     {
         double TimerIntervalMS = TimeInterval * 100;
         Load   load            = new Load(FilePath);
         if (load.GetCSVType() == CSVTypes.INS)
         {
             load.HandleCSV();
             DataMapper.DataMapper SingleDataMapper = load.data;
             int iteration                    = 1;
             List <DataEntry> datas           = new List <DataEntry>(SingleDataMapper.AllDataEntries);
             double           test            = datas.Max(X => X.INS_Accelerometer.TimeOfData);
             double           CurrentTimerVal = TimerIntervalMS * iteration;
             while (test > CurrentTimerVal)
             {
                 double min         = TimerIntervalMS * (iteration - 1);
                 double max         = TimerIntervalMS * iteration;
                 var    dataEntries = datas.Where(X =>
                                                  X.INS_Accelerometer.TimeOfData <max &&
                                                                                  X.INS_Accelerometer.TimeOfData> min).ToList();
                 int got = dataEntries.Count();
                 if (got > 0)
                 {
                     double SectionTimer = ((dataEntries.Max(X => X.INS_Accelerometer.TimeOfData) - min) / got);
                     double entryTimer   = SectionTimer + min;
                     foreach (var entry in dataEntries)
                     {
                         entry.INS_Accelerometer.TimeOfData = Math.Round(entryTimer, 5);
                         entry.INS_Gyroscope.TimeOfData     = Math.Round(entryTimer, 5);
                         entryTimer += SectionTimer;
                         if (entryTimer > max)
                         {
                         }
                     }
                 }
                 CurrentTimerVal = TimerIntervalMS * ++iteration;
             }
             CSVWriterController INSWriter = new CSVWriterController(FilePath, SingleDataMapper, load.GetCSVType());
             string POZYX_FilePath         = FilePath.Replace("_INS.csv", "_POZYX.csv");
             if (File.Exists(POZYX_FilePath) && POZYX_FilePath.Contains("_POZYX.csv"))
             {
                 Console.WriteLine($"FOUND POZYX FILE, {POZYX_FilePath}");
                 load = new Load(POZYX_FilePath);
                 load.HandleCSV();
                 var PozyxDatamapper = load.data;
                 var PozyxData       = PozyxDatamapper.AllDataEntries.ToList();
                 int count           = PozyxDatamapper.AllDataEntries.Count();
                 for (int i = 0; i < count; i++)
                 {
                     PozyxData[i].PoZYX.TimeOfData = datas[i].INS_Gyroscope.TimeOfData;
                 }
                 CSVWriterController PozyxWriter = new CSVWriterController(POZYX_FilePath, PozyxDatamapper, load.GetCSVType());
             }
         }
     }
 }
コード例 #2
0
ファイル: MainMenu.cs プロジェクト: Tricky12321/P5.Projekt
        private static void RunDynamicCalibration()
        {
            string filePath = Directory.GetCurrentDirectory() + "/Test/";

            string[] fileNamesArray = Directory.GetFileSystemEntries(filePath, "*_INS.csv", SearchOption.AllDirectories);
            for (int i = 0; i < fileNamesArray.Count(); i++)
            {
                Console.WriteLine($"{fileNamesArray[i]} : Number {i}");
            }

            int number = 0;

            while (!(int.TryParse(Console.ReadLine(), out number) && number < fileNamesArray.Count() && number >= 0))
            {
                Console.WriteLine("Wrong input!");
            }

            string fileName      = fileNamesArray[number];
            Load   csvController = new Load("Combined_ins.csv");

            csvController.HandleCSV();
            dataMapper = csvController.data;
            dataMapper.CalculateRollingAverage(200);
            dataMapper.dataEntries = dataMapper.RollingAverageDataEntry;
            CalculateLasseStuff(false, true);

            csvController = new Load(fileName);
            csvController.HandleCSV();
            dataMapper = csvController.data;
            dataMapper.CalculateRollingAverage(200);
            var backup = dataMapper.dataEntries;

            dataMapper.dataEntries = dataMapper.RollingAverageDataEntry;
            CalculateLasseStuff();
            //var test = csvController.AccDataList[20];
            dataMapper.dataEntries = backup;
            var tesadsasdas = csvController.data.GetAccelerationXYZFromCSV();
            //TODO: HERE!
            ClusteringDynamicCalibration Clustering = new ClusteringDynamicCalibration("SlopeDivVariance_Slope_COMBINED.csv", "SlopeDivVariance_Slope.csv");
            DynamicCalibration           dyn        = new DynamicCalibration(tesadsasdas, Clustering);
            //dyn.CalibrateResidualSumOfSquares(2.0);
            //dyn.CalibrateAccelerationPointCoefficient();

            List <TimePoint> accelerationList = dyn.AccelerationList;
            List <TimePoint> velocityList     = dyn.CalculateDynamicVelocityList(dyn.NaiveVelocityList);
            List <TimePoint> distanceList     = dyn.CalculatePosition(velocityList);

            while (Console.ReadLine() != "q")
            {
                Console.WriteLine("What do you want to print? (acc, vel, dis or toCSV)");

                string input = Console.ReadLine();
                switch (input)
                {
                case "acc":
                    accelerationList.ForEach(x => Console.WriteLine($"\"{x.Time.ToString().Replace(',', '.')}\",\"{x.Value.ToString().Replace(',', '.')}\""));
                    break;

                case "vel":
                    velocityList.ForEach(x => Console.WriteLine($"\"{x.Time.ToString().Replace(',', '.')}\",\"{x.Value.ToString().Replace(',', '.')}\""));
                    break;

                case "dis":
                    distanceList.ForEach(x => Console.WriteLine($"\"{x.Time.ToString().Replace(',', '.')}\",\"{x.Value.ToString().Replace(',', '.')}\""));
                    break;

                case "toCSV":
                    string FileName = fileName.Replace(".csv", string.Empty).Split('/').Last();
                    CSVWriterController csvWriter = new CSVWriterController(FileName + "_acc");
                    csvWriter.DynamicToCSV(accelerationList);
                    csvWriter.FileName = FileName + "_vel";
                    csvWriter.DynamicToCSV(velocityList);
                    csvWriter.FileName = FileName + "_dic";
                    csvWriter.DynamicToCSV(distanceList);
                    Console.WriteLine("Done writing to files!");
                    break;

                default:
                    Console.WriteLine("acc, vel, dis or toCSV?");
                    break;
                }
            }
        }
コード例 #3
0
ファイル: MainMenu.cs プロジェクト: Tricky12321/P5.Projekt
        public static void LogData(string[] Input)
        {
            List <string> InputList = new List <string>(Input);

            if (!(Input.Length > 1))
            {
                Console.WriteLine("Invalid input, use help to get data");
                return;
            }
            switch (Input[1])
            {
            case "fixtimer":
                if (MenuController.Confirm("Are you sure you want to replace everything?", false))
                {
                    if (Input.Length == 3)
                    {
                        int Seperation = Convert.ToInt32(Input[2]);
                        FixTime(Seperation);
                    }
                    else
                    {
                        FixTime();
                    }
                }
                break;

            case "weka":
                if (MenuController.Confirm("Are you sure you want to replace everything?", false))
                {
                    string[] entries = Directory.GetFileSystemEntries(".", "*.csv", SearchOption.AllDirectories);
                    foreach (var FilePath in entries)
                    {
                        string FileContents = File.ReadAllText(FilePath);
                        string Output       = Regex.Replace(FileContents, @"\d+,\d+", delegate(Match match)
                        {
                            string v = match.ToString().Replace(",", ".");
                            return(v);
                        });
                        File.WriteAllText(FilePath, Output);
                    }
                }
                break;

            case "latex":
                if (MenuController.Confirm("Are you sure you want to replace everything?", false))
                {
                    string[] entries = Directory.GetFileSystemEntries(".", "*.csv", SearchOption.AllDirectories);
                    foreach (var FilePath in entries)
                    {
                        string FileContents = File.ReadAllText(FilePath);
                        string Output       = Regex.Replace(FileContents, @"\d+,\d+", delegate(Match match)
                        {
                            string v = match.ToString().Replace(",", ".");
                            return(v);
                        });

                        Output = Regex.Replace(Output, @"""\d+""\,", delegate(Match match)
                        {
                            string substringed = match.ToString().Substring(1, match.Length - 3);
                            double newNum      = Convert.ToDouble(substringed) / 1000f;
                            return(newNum.ToString().Replace(",", ".") + ",");
                        });

                        Output = Regex.Replace(Output, @"""(|-)\d+(|\.|\,)\d*""", delegate(Match match)
                        {
                            string v = match.ToString().Replace(@"""", "");
                            return(v);
                        });

                        Output = Regex.Replace(Output, @"""(|-)\d+(\.|\,)\d+""", delegate(Match match)
                        {
                            string v = match.ToString().Replace(@"""", "");
                            return(v);
                        });

                        File.WriteAllText(FilePath, Output);
                    }
                }
                break;

            case "combine":
                if (true)
                {
                    StringBuilder FileContents = new StringBuilder();
                    string[]      entries      = Directory.GetFileSystemEntries(".", "*INS.csv", SearchOption.AllDirectories);
                    foreach (var FilePath in entries)
                    {
                        FileContents.Append(File.ReadAllText(FilePath));
                    }
                    FileContents.Replace("Timer,AX,AY,AZ,GX,GY,GZ,A\n", "");
                    File.WriteAllText("Combined_ins.csv", "Timer,AX,AY,AZ,GX,GY,GZ,A\n" + FileContents.ToString());
                }
                break;

            case "ra":
                if (Input.Length == 3)
                {
                    try
                    {
                        dataMapper.CalculateRollingAverage(Convert.ToInt32(Input[2]));
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("Invalid format!");
                    }
                }
                else
                {
                    dataMapper.CalculateRollingAverage(10);
                }
                break;

            case "load":
                if (Input.Length == 3)
                {
                    Load load = new Load(Input[2] + ".csv");
                    load.HandleCSV();
                    dataMapper = load.data;
                }
                break;

            case "calibrate":

                if (dataMapper == null)
                {
                    Console.WriteLine("No Data Mapper has been created!");
                }
                else
                {
                    if (Input.Length == 3)
                    {
                        int Timer = 0;
                        try
                        {
                            Timer = Convert.ToInt32(Input[2]) * 1000;
                            dataMapper.CalibrateINS(Timer);
                        }
                        catch (FormatException ex)
                        {
                            Console.WriteLine("Not a number givin!");
                        }
                    }
                    else
                    {
                        dataMapper.CalibrateINS();
                    }
                }
                break;

            case "start":
                if (dataMapper == null)
                {
                    Console.WriteLine("No Data Mapper has been created!");
                }
                else
                {
                    if (InputList.Count == 3)
                    {
                        if (Input[2] == "nem")
                        {
                            dataMapper.StartReading();
                            if (MenuController.Confirm("Stop?", true))
                            {
                                dataMapper.StopReading();
                            }
                        }
                        else
                        {
                            try
                            {
                                MapperTimer = Convert.ToInt32(InputList[2]);
                                Thread TimerThread = new Thread(dataMapperTimer);
                                dataMapper.StartReading();
                                TimerThread.Start();
                                Console.WriteLine($"Started Datamapper for {MapperTimer} sec");
                                TimerThread.Join();
                            }
                            catch (Exception)
                            {
                                Console.WriteLine("Invalid format!");
                            }
                        }
                    }
                    else
                    {
                        dataMapper.StartReading();
                        Console.WriteLine("Started Datamapper");
                    }
                }
                break;

            case "stop":
                if (dataMapper == null)
                {
                    Console.WriteLine("No Data Mapper has been created!");
                }
                else
                {
                    dataMapper.StopReading();
                    Console.WriteLine("Stopped data logging");
                }
                break;

            case "clear":
                if (dataMapper == null)
                {
                    Console.WriteLine("No Data Mapper has been created!");
                }
                else
                {
                    dataMapper.ClearEntries();
                    Console.WriteLine("Cleared the DataList");
                }
                break;

            case "save":
                if (dataMapper == null)
                {
                    Console.WriteLine("No Data Mapper has been created!");
                }
                else
                {
                    if (InputList.Count == 3)
                    {
                        string FileName = InputList[2];
                        if (File.Exists(FileName + "_INS.csv") || File.Exists(FileName + "_POZYX.csv"))
                        {
                            if (MenuController.Confirm("This file already exists, Overwrite?", false))
                            {
                                CSVWriterController csvWriter = new CSVWriterController(dataMapper, FileName);
                                csvWriter.Execute();
                                Console.WriteLine($"Saved to {FileName}");
                            }
                            else
                            {
                                Console.WriteLine("Cancelled!");
                            }
                        }
                        else
                        {
                            CSVWriterController csvWriter = new CSVWriterController(dataMapper, FileName);
                            csvWriter.Execute();
                            Console.WriteLine($"Saved to {FileName}");
                        }
                    }
                }
                break;

            case "new":
                if (Input.Length == 2)
                {
                    dataMapper = new DataMapper.DataMapper();
                }
                else
                {
                    switch (Input[2])
                    {
                    case "ins":
                        dataMapper = new DataMapper.DataMapper(false, true);
                        break;

                    case "pozyx":
                        dataMapper = new DataMapper.DataMapper(true, false);
                        break;

                    default:
                        break;
                    }
                }

                Console.WriteLine("Created new DataMapper!");
                break;

            case "kalman":
                dataMapper.GenerateKalman();
                Console.WriteLine("Generated data kalman filtered data of INS data.");
                break;

            case "segment":
                string SegmentFile = "Segmented.csv";
                if (File.Exists(SegmentFile))
                {
                    File.Delete(SegmentFile);
                }
                ConcurrentQueue <DataEntry> OutputSegments = dataMapper.SegmentData();
                using (var test = File.AppendText(SegmentFile))
                {
                    test.WriteLine("Timer,AX,AY,AZ,GX,GY,GZ,Angle");
                    int i = 0;
                    foreach (var item in OutputSegments)
                    {
                        Console.WriteLine($"{i++}");
                        string output = $"\"{item.INS_Accelerometer.TimeOfData}\",\"{item.INS_Accelerometer.X}\",\"{item.INS_Accelerometer.Y}\",\"{item.INS_Accelerometer.Z}\",\"{item.INS_Gyroscope.X}\",\"{item.INS_Gyroscope.Y}\",\"{item.INS_Gyroscope.Z}\",\"{item.INS_Angle}\"";
                        Console.WriteLine($"{output}");
                        test.WriteLine(output);
                    }
                }
                Console.WriteLine($"Done segmenting data! {OutputSegments.Count}");
                break;

            case "variance":
                ConcurrentQueue <Tuple <DataEntry, double, double> > varianceData = dataMapper.CalculateVariance();
                string VarianceFile = "Variance.csv";

                if (File.Exists(VarianceFile))
                {
                    File.Delete(VarianceFile);
                }

                using (var test = File.AppendText(VarianceFile))
                {
                    test.WriteLine("Timer,AX,AY,AZ,GX,GY,GZ,Angle,Variance,Slope");
                    foreach (var item in varianceData)
                    {
                        string output = $"\"{item.Item1.INS_Accelerometer.TimeOfData}\",\"{item.Item1.INS_Accelerometer.X}\",\"{item.Item1.INS_Accelerometer.Y}\",\"{item.Item1.INS_Accelerometer.Z}\",\"{item.Item1.INS_Gyroscope.X}\",\"{item.Item1.INS_Gyroscope.Y}\",\"{item.Item1.INS_Gyroscope.Z}\",\"{item.Item1.INS_Angle}\",\"{item.Item2}\",\"{item.Item3}\"";
                        test.WriteLine(output);
                    }
                }
                Console.WriteLine("Done!");
                break;

            case "acc":
                CalculateLasseStuff();
                Console.WriteLine("Done!");
                break;

            default:
                Console.WriteLine("Invalid input format, use help command!");
                break;
            }
        }