コード例 #1
0
        public static UInt64 GetUInt64(this MatFileReader reader, string name)
        {
            var marray = reader.GetMLArray(name);

            if (!marray.IsUInt64)
            {
                throw new InvalidCastException("data is not of type UInt64");
            }
            var n      = marray.Size;
            var darray = (MLUInt64)marray;

            return(darray.GetReal(0));
        }
コード例 #2
0
        public static int GetInt(this MatFileReader reader, string name)
        {
            var marray = reader.GetMLArray(name);

            if (!marray.IsInt32)
            {
                throw new InvalidCastException("data is not of type Int32");
            }
            var n      = marray.Size;
            var darray = (MLInt32)marray;

            return(darray.GetReal(0));
        }
コード例 #3
0
        public static double GetDouble(this MatFileReader reader, string name)
        {
            var marray = reader.GetMLArray(name);

            if (!marray.IsDouble)
            {
                throw new InvalidCastException("data is not of type double");
            }
            var n      = marray.Size;
            var darray = (MLDouble)marray;

            return(darray.GetReal(0));
        }
コード例 #4
0
        public void ImportMatCurve(string path)
        {
            var mfr  = new MatFileReader(path);
            var h    = (mfr.GetMLArray("H") as MLDouble)?.GetArray();
            var q    = (mfr.GetMLArray("Q") as MLDouble)?.GetArray();
            var hOpt = (mfr.GetMLArray("H_Opt") as MLDouble)?.GetArray();
            var qOpt = (mfr.GetMLArray("Q_Opt") as MLDouble)?.GetArray();

            var curve = new List <PumpPerformancePoint>();

            if (qOpt != null && hOpt != null && qOpt[0].Count() == hOpt[0].Count())
            {
                for (int i = 0; i < qOpt[0].Count(); i++)
                {
                    curve.Add(new PumpPerformancePoint(hOpt[0][i], qOpt[0][i]));
                }
            }
            else if (hOpt != null && q != null && hOpt[0].Count() == q[0].Count())
            {
                for (int i = 0; i < q.Count(); i++)
                {
                    curve.Add(new PumpPerformancePoint(hOpt[0][i], q[0][i]));
                }
            }
            else if (h != null && q != null && h[0].Count() == q[0].Count())
            {
                for (int i = 0; i < q[0].Count(); i++)
                {
                    curve.Add(new PumpPerformancePoint(h[0][i], q[0][i]));
                }
            }
            else
            {
                throw new InvalidDataException("Keine gültigen Daten in MAT-File vorhanden.");
            }

            PerformanceCurve = curve.ToArray();
        }
コード例 #5
0
        public static uint[] GetUInt32Array(this MatFileReader reader, string name)
        {
            var marray = reader.GetMLArray(name);

            if (!marray.IsUInt32)
            {
                throw new InvalidCastException("data is not of type UInt32");
            }
            var n      = marray.Size;
            var darray = (MLUInt32)marray;
            var data   = new uint[n];

            for (var i = 0; i < n; ++i)
            {
                data[i] = darray.GetReal(i);
            }
            return(data);
        }
コード例 #6
0
        public static double[] GetDoubleArray(this MatFileReader reader, string name)
        {
            var marray = reader.GetMLArray(name);

            if (!marray.IsDouble)
            {
                throw new InvalidCastException("data is not of type double");
            }
            var n      = marray.Size;
            var darray = (MLDouble)marray;
            var data   = new double[n];

            for (var i = 0; i < n; ++i)
            {
                data[i] = darray.GetReal(i);
            }
            return(data);
        }
コード例 #7
0
        public static int[,] GetInt32Array2D(this MatFileReader reader, string name)
        {
            var marray = reader.GetMLArray(name);

            if (!marray.IsInt32)
            {
                throw new InvalidCastException("data is not of type Int32");
            }
            var m      = marray.M;
            var n      = marray.N;
            var darray = (MLInt32)marray;
            var data   = new int[m, n];

            for (var i = 0; i < m; ++i)
            {
                for (var j = 0; j < n; ++j)
                {
                    data[i, j] = darray.GetReal(i, j);
                }
            }
            return(data);
        }
コード例 #8
0
        public static float[] GetSingleArray(this MatFileReader reader, string name)
        {
            var marray = reader.GetMLArray(name);

            if (!marray.IsSingle)
            {
                throw new InvalidCastException("data is not of type float");
            }
            var m      = marray.M;
            var n      = marray.N;
            var l      = m * n;
            var darray = (MLSingle)marray;
            var data   = new float[l];

            for (var i = 0; i < m; ++i)
            {
                for (var j = 0; j < n; ++j)
                {
                    data[i * n + j] = darray.GetReal(i, j);
                }
            }
            return(data);
        }
コード例 #9
0
        internal ArrayReader(string fileName)
        {
            try
            {
                MatFileReader mfr = new MatFileReader(fileName);
                A  = ((MLDouble)(mfr.GetMLArray("A"))).GetArray();
                PP = ((MLDouble)(mfr.GetMLArray("PP"))).GetArray();
                double[][] Q = ((MLDouble)(mfr.GetMLArray("q"))).GetArray();
                q = new double[Q.Length];
                for (int i = 0; i < Q.Length; i++)
                {
                    q[i] = Q[i][0];
                }

                double[][] P = ((MLDouble)mfr.GetMLArray("p")).GetArray();
                p = new double[P.Length];
                for (int i = 0; i < P.Length; i++)
                {
                    p[i] = P[i][0];
                }
                double[][] V = ((MLDouble)mfr.GetMLArray("v")).GetArray();
                v = new double[V.Length];
                for (int i = 0; i < V.Length; i++)
                {
                    v[i] = V[i][0];
                }

                double[][] WW = ((MLDouble)mfr.GetMLArray("w")).GetArray();
                w = new double[WW.Length];
                for (int i = 0; i < WW.Length; i++)
                {
                    w[i] = WW[i][0];
                }
            }
            catch (System.IO.IOException)
            {
                throw new MatlabIOException("Cannot read file");
            }
        }
コード例 #10
0
        static void Main(string[] args)
        {
            csmatio.io.MatFileReader mfr = new MatFileReader(@"E:\Users\Administrator\Source\Repos\TinyEKF\TinyEKFDLLTest\TinyEKFDLLTest\big-circle-ekf-dll.mat");


            var x          = (mfr.GetMLArray("x") as MLDouble).GetArray().ToList();
            var y          = (mfr.GetMLArray("y") as MLDouble).GetArray().ToList();
            var orth_theta = (mfr.GetMLArray("orth_theta") as MLDouble).GetArray().ToList();
            var delta_odom = (mfr.GetMLArray("delta_odom") as MLDouble).GetArray().ToList();

            int length = mfr.Data[0].Size;

            List <double []> z        = new List <double []>(length);
            List <double []> x_fusion = new List <double[]>(length);

            for (int i = 0; i < length; i++)
            {
                //var temp = x[i][0];
                double[] temp = new[] { x[i][0], y[i][0], orth_theta[i][0] };
                z.Add(temp);
            }

            x_fusion.Add(new[] { z[0][0], z[0][1], z[0][2] });

            TinyEKFWrapper.ekf_t ekf = new TinyEKFWrapper.ekf_t();
            IntPtr ekfIntPtr         = Marshal.AllocHGlobal(Marshal.SizeOf(ekf));

            try
            {
                Marshal.StructureToPtr(ekf, ekfIntPtr, false);

                TinyEKFWrapper.EKFInit(ekfIntPtr, 3, 3);

                TinyEKFWrapper.Init(ekfIntPtr, z[0]);

                //var a = (TinyEKFWrapper.ekf_t)Marshal.PtrToStructure(ekfIntPtr, ekf.GetType());


                for (int i = 1; i < length; i++)
                {
                    TinyEKFWrapper.Model(ekfIntPtr, delta_odom[i][0]);

                    //a = (TinyEKFWrapper.ekf_t)Marshal.PtrToStructure(ekfIntPtr, ekf.GetType());

                    TinyEKFWrapper.EKFStep(ekfIntPtr, z[i]);

                    //a = (TinyEKFWrapper.ekf_t)Marshal.PtrToStructure(ekfIntPtr, ekf.GetType());



                    var temp = (TinyEKFWrapper.ekf_t)Marshal.PtrToStructure(ekfIntPtr, ekf.GetType());

                    x_fusion.Add(new[] { temp.x[0], temp.x[1], temp.x[2] });
                }
            }
            finally
            {
                Marshal.DestroyStructure(ekfIntPtr, ekf.GetType());
            }


            StreamWriter file = new StreamWriter(@"E:\Document\EyooProject\2.Vanke\odom\b-circle-dll.dat");

            foreach (var data in x_fusion)
            {
                foreach (var d in data)
                {
                    file.Write(d.ToString() + ",");
                }
                file.WriteLine();
            }

            file.Close();

            //  TinyEKFWrapper.Print();
            Console.WriteLine("the last postion [{0}\t{1}\t{2}]", x_fusion[length - 1][0], x_fusion[length - 1][1], x_fusion[length - 1][2]);
            Console.ReadLine();
        }