Beispiel #1
0
 //Methods:
 public async void asyncModelFit(enumModelType selModel_para, List<mrft_point> mrft_results_para)
 {
     double[,] mrft_results=new double[mrft_results_para.Count,3];
     for (int i = 0; i < mrft_results_para.Count; i++)
     {
         mrft_results[i, 0] = mrft_results_para[i].Beta;
         mrft_results[i, 1] = mrft_results_para[i].get_last_bag().Amp;
         mrft_results[i, 2] = mrft_results_para[i].get_last_bag().Duration;
     }
     await ModelFit(MLModelFitDone,selModel_para, mrft_results);
 }
Beispiel #2
0
 private async Task ModelFit(Action<double[], double[], double[], double[]> callback, enumModelType selModel_para, double[,] MRFT_points_para)
 {
     matlab.Execute(@"cd 'C:\Users\msa\Downloads\Quadcopter development\Codings\MATLAB\external\'");
     System.Array rMRFTdata = new double[MRFT_points_para.GetUpperBound(0)+1,3];
     System.Array cMRFTdata = new double[MRFT_points_para.GetUpperBound(0) + 1, 3];
     MRFT_points_para.CopyTo(rMRFTdata, MRFT_points_para.Length);
     MRFT_points_para.CopyTo(cMRFTdata, MRFT_points_para.Length);
     matlab.Execute("opt_qr");
     bool IsDone = false;
     while (!IsDone)
     {
         string chkFilePath = @"C:\Users\msa\Downloads\Quadcopter development\Codings\MATLAB\external\doneModelFit.txt";
         IsDone = File.Exists(chkFilePath);
         System.Threading.Thread.Sleep(100);
     }
     System.Array Model_parameters = new double[4];
     System.Array cModel_parameters = new double[4];
     System.Array w_plot = new double[500];
     System.Array cw_plot = new double[500];
     System.Array mag_plot = new double[500];
     System.Array cmag_plot = new double[500];
     System.Array phase_plot = new double[500];
     System.Array cphase_plot = new double[500];
     matlab.GetFullMatrix("w_plot", "global", ref w_plot, ref cw_plot);
     matlab.GetFullMatrix("mag_plot", "global", ref mag_plot, ref cmag_plot);
     matlab.GetFullMatrix("phase_plot", "global", ref phase_plot, ref cphase_plot);
     matlab.GetFullMatrix("Model_parameters", "global", ref Model_parameters, ref cModel_parameters);
     double[] _Model_parameters = new double[4];
     double[] _w_plot = new double[500];
     double[] _mag_plot = new double[500];
     double[] _phase_plot = new double[500];
     w_plot.CopyTo(_w_plot, 0);
     mag_plot.CopyTo(_mag_plot, 0);
     phase_plot.CopyTo(_phase_plot, 0);
     Model_parameters.CopyTo(_Model_parameters, 0);
     // Invoke the callback method asynchronously.
     await Task.Run(() => MLModelFitDone(_Model_parameters,_w_plot, _mag_plot, _phase_plot));
 }
Beispiel #3
0
 private async Task PIDParametricTune(Action<double[]> callback, double[] _rModelPara,
     enumPIDOptimType PIDOptimIndex_para, enumModelType modelType_para)
 {
     matlab.Execute(@"cd 'C:\Users\msa\Downloads\Quadcopter development\Codings\MATLAB\external\'");
     double[] _cModelPara = new double[4];
     System.Array rModelPara = new double[4];
     System.Array cModelPara = new double[4];
     _rModelPara.CopyTo(rModelPara, 0);
     _cModelPara.CopyTo(cModelPara, 0);
     try
     {
         matlab.PutFullMatrix("Model_parameters", "base", rModelPara, cModelPara);
     }
     catch (System.Runtime.InteropServices.COMException err) { }
     try
     {
         matlab.PutWorkspaceData("ModelTypeIndex", "base", (int)modelType_para);
     }
     catch (System.Runtime.InteropServices.COMException err) { }
     try
     {
         matlab.PutWorkspaceData("FitTypeIndex", "base", (int)PIDOptimIndex_para);
     }
     catch (System.Runtime.InteropServices.COMException err) { }
     matlab.Execute("PIDOptim");
     bool IsDone = false;
     while (!IsDone)
     {
         string chkFilePath = @"C:\Users\msa\Downloads\Quadcopter development\Codings\MATLAB\external\donePIDOptim.txt";
         IsDone = File.Exists(chkFilePath);
         System.Threading.Thread.Sleep(100);
     }
     System.Array rPIDvals = new double[3];
     System.Array cPIDvals = new double[3];
     matlab.GetFullMatrix("results", "global", ref rPIDvals, ref cPIDvals);
     double[] _rPIDvals = new double[3];
     double[] _cPIDvals = new double[3];
     rPIDvals.CopyTo(_rPIDvals, 0);
     rPIDvals.CopyTo(_cPIDvals, 0);
     // Invoke the callback method asynchronously.
     await Task.Run(() => MLPIDCalculationDone(_rPIDvals));
 }
Beispiel #4
0
 public async void asyncPIDParametricTune(double[] _rModelPara, enumPIDOptimType PIDOptimIndex_para, enumModelType modelType_para)
 {
     await PIDParametricTune(MLPIDCalculationDone, _rModelPara, PIDOptimIndex_para, modelType_para);
 }