コード例 #1
0
        private void ReflashData(IMUData data)
        {
            labelData.Text = "";
            labelData.Text = imuData.ToString();

            if (imuData.SingleNode.Eul != null)
            {
                //   attitudeIndicatorInstrumentControl1.SetAttitudeIndicatorParameters(-(double)imuData.SingleNode.Eul[1], (double)imuData.SingleNode.Eul[0]);

                int aircraftHeading = 0;
                try
                {
                    aircraftHeading = Convert.ToInt16(imuData.SingleNode.Eul[2]);
                }
                catch
                {
                }

                // dual to headingIndicatorInstrumentControl1 error, use the negnate number
                aircraftHeading = -aircraftHeading;

                if (aircraftHeading < 0)
                {
                    aircraftHeading += 360;
                }
                //  headingIndicatorInstrumentControl1.SetHeadingIndicatorParameters(aircraftHeading);
            }

            // altimeterInstrumentControl1.SetAlimeterParameters(Convert.ToInt32(Pa));
            //   airSpeedIndicatorInstrumentControl1.SetAirSpeedIndicatorParameters(SampleCounter.SampleRate);
            label7.Text = "帧率: " + SampleCounter.SampleRate.ToString() + "Hz";
        }
コード例 #2
0
 public void InitWithData(List <double> kinectSPAngles, List <double> kinectFlexAngles, IMUData imu, TrialTracker tt)
 {
     kinectSPAngleAt0T1 = kinectSPAngles;
     kinectSPAngleAt0T1 = kinectFlexAngles;
     imuData            = imu;
     trialTracker       = tt;
 }
コード例 #3
0
 void OnDecoded(object sender, byte[] data, int len)
 {
     if (hasStarted)
     {
         imuData = IMUData.Decode(data, len);
         CSV_PutLine(imuData);
     }
 }
コード例 #4
0
    public static IMUData firstIntegral(IMUData data, IMUData origin)
    {
        DataPoint accelerometer = data.accelerometer.scale(data.time);
        DataPoint gyroscope     = data.gyroscope.scale(data.time);
        DataPoint magnetometer  = data.magnetometer.scale(data.time);

        return(new IMUData(accelerometer, gyroscope, magnetometer, data.time) + origin);
    }
コード例 #5
0
 public IMU(enums.IC_type type)
 {
     icType = type;
     for (int i = 0; i < amountIMUAtributes; i++)
     {
         data[i] = new IMUData();
     }
 }
コード例 #6
0
    /* --- !!         USES TIME OF FIRST DATA POINT             !! --- */
    /* --- !!     FISRT IS THE VELOCITY SECOND IS POSITION      !! --- */
    public IMUData integrate_with(IMUData data)
    {
        DataPoint _accelerometer = accelerometer.integrate_with(data.accelerometer);
        DataPoint _gyroscope     = gyroscope.integrate_with(data.gyroscope);
        DataPoint _magnetometer  = magnetometer.integrate_with(magnetometer);

        return(new IMUData(_accelerometer, _gyroscope, _magnetometer, time));
    }
コード例 #7
0
 private void CSV_PutLine(IMUData data)
 {
     if (isInCSVTitle == true)
     {
         csvFileWriter.WriteCSVline(imuData.CSVHeaders.ToArray());
         isInCSVTitle = false;
     }
     csvFileWriter.WriteCSVline(imuData.CSVData.ToArray());
 }
コード例 #8
0
        protected override void OnIMUSensorUpdate(IMUData imu)
        {
            var q = imu.unity.quat;

            if (baseRotarion == Quaternion.identity)
            {
                baseRotarion = q;
            }
            transform.rotation = Quaternion.Inverse(baseRotarion) * q;
        }
コード例 #9
0
ファイル: IMU.cs プロジェクト: lulzzz/3DpointCloud
        //Acceleration and Angular Rate (0xC2)
        void ProcessIMUc2(BinaryReader br, double ts)
        {
            IMUData imuData = new IMUData();

            addsum(br);
            float accelX = BitConverter.ToSingle(temp, 0);

            addsum(br);
            float accelY = BitConverter.ToSingle(temp, 0);

            addsum(br);
            float accelZ = BitConverter.ToSingle(temp, 0);

            addsum(br);
            float angRateX = BitConverter.ToSingle(temp, 0);

            addsum(br);
            float angRateY = BitConverter.ToSingle(temp, 0);

            addsum(br);
            float angRateZ = BitConverter.ToSingle(temp, 0);

            addsum(br);
            //float timer = BitConverter.ToSingle(temp, 0); //time since system power-up
            uint timer = BitConverter.ToUInt32(temp, 0);             //time since system power-up

            br.ReadBytes(2);
            UInt16 checksum = Endian.BigToLittle(br.ReadUInt16());

            if (sum == checksum)
            {
                imuData.xAccel   = accelX;
                imuData.yAccel   = accelY;
                imuData.zAccel   = accelZ;
                imuData.xRate    = angRateX;
                imuData.yRate    = angRateY;
                imuData.zRate    = angRateZ;
                imuData.DataType = "IMU";
                imuData.timer    = timer;
            }
            else             //if (showDebugMessages)
            {
                Console.Write("IMU Msg: @" + ts.ToString("F4") + ":::didn't pass checksum.");
                Console.WriteLine();
            }
            sum = 0;
            if (IMUUpdate != null)
            {
                IMUUpdate(this, new TimestampedEventArgs <IMUData>(ts, imuData));
            }
            if (showDebugMessages)
            {
                Console.WriteLine("Accel: ( " + accelX.ToString("F8") + ", " + accelY.ToString("F8") + ", " + accelZ.ToString("F8") + " )" + "AngRate: ( " + angRateX.ToString("F8") + ", " + angRateY.ToString("F8") + ", " + angRateZ.ToString("F8") + " ) Timer: " + timer);
            }
        }
コード例 #10
0
    IMUData[] integrate(IMUData[] data, IMUData origin)
    {
        IMUData[] integrals = new IMUData[data.Length];
        integrals[0] = IMUData.firstIntegral(data[0], origin);

        for (int i = 1; i < data.Length; i++)
        {
            integrals[i] = data[i].integrate_with(integrals[i - 1]);
        }

        return(integrals);
    }
コード例 #11
0
        public void SetIMUData(IMUData data)
        {
            if (data.SingleNode.Eul != null)
            {
                this.SetPitchRollYaw(data.SingleNode.Eul[1], data.SingleNode.Eul[0], data.SingleNode.Eul[2]);
            }

            if (data.SingleNode.Quat != null)
            {
                this.SetQuaternion(data.SingleNode.Quat[0], data.SingleNode.Quat[1], data.SingleNode.Quat[2], data.SingleNode.Quat[3]);
            }
        }
コード例 #12
0
ファイル: visualize_data.cs プロジェクト: pitwegner/dip18-1
    private void ReceiveFrame()
    {
        // first the pose is sent
        string pose = _client.ListenSync();
        Pose   p    = JsonConvert.DeserializeObject <Pose>(pose);

        _poseUpdater.setNewPose(p.pose.ToArray());

        // then the IMU data is sent
        string imu = _client.ListenSync();

        _currentIMUData = JsonConvert.DeserializeObject <IMUData>(imu);
    }
コード例 #13
0
    public IMUController(string[] csv, IMUData origin)
    {
        data = new IMUData[csv.Length - 1];

        for (int i = 0; i < data.Length; i++)
        {
            data[i] = IMUData.fromCSVString(csv[i + 1]);
        }

        length               = data.Length;
        integrals            = integrate(data, origin);
        filteredOrientations = fuseAndFilter(data, integrals);
    }
コード例 #14
0
 public override void Poll(HIDInterface.PacketData packet)
 {
     byte[] data = packet.rawData.Skip(12).Take(12).ToArray();
     int[]  ints = data.ToInt16();
     this.data = new IMUData
     {
         xAcc  = (int)(ints[0] * (16000d / 65535d / 1000d)),
         yAcc  = (int)(ints[1] * (16000d / 65535d / 1000d)),
         zAcc  = (int)(ints[2] * (16000d / 65535d / 1000d)),
         xGyro = (int)(ints[3] * (4588d / 65535d)),
         yGyro = (int)(ints[4] * (4588d / 65535d)),
         zGyro = (int)(ints[5] * (4588d / 65535d))
     };
 }
コード例 #15
0
        private void ConnectionDataReceived(byte[] buffer, int index, int count)
        {
            fmConfig.PutRawData(buffer);
            KbootDecoder.Input(buffer);

            IMUData data;

            data = SxDecode.Decode(buffer);
            if (data != null)
            {
                SampleCounter.Increment(1);
                imuData = data;
                DoOnDataReceived(imuData);
            }
        }
コード例 #16
0
        private void DoOnDataReceived(IMUData data)
        {
            if (Form3DDisplay != null)
            {
                Form3DDisplay.SetIMUData(data);
            }

            fmConfig.PutPacket(this, data);
            if (data.SingleNode.Gyr != null)
            {
                AddGraphData("Gyroscope", DateTime.Now, 0, data.SingleNode.Gyr[0]);
                AddGraphData("Gyroscope", DateTime.Now, 1, data.SingleNode.Gyr[1]);
                AddGraphData("Gyroscope", DateTime.Now, 2, data.SingleNode.Gyr[2]);
            }

            if (data.SingleNode.Acc != null)
            {
                AddGraphData("Accelerometer", DateTime.Now, 0, data.SingleNode.Acc[0]);
                AddGraphData("Accelerometer", DateTime.Now, 1, data.SingleNode.Acc[1]);
                AddGraphData("Accelerometer", DateTime.Now, 2, data.SingleNode.Acc[2]);
            }

            if (data.SingleNode.Mag != null)
            {
                AddGraphData("Magnetometer", DateTime.Now, 0, data.SingleNode.Mag[0]);
                AddGraphData("Magnetometer", DateTime.Now, 1, data.SingleNode.Mag[1]);
                AddGraphData("Magnetometer", DateTime.Now, 2, data.SingleNode.Mag[2]);
            }

            if (data.SingleNode.Eul != null)
            {
                AddGraphData("Euler Angles", DateTime.Now, 0, data.SingleNode.Eul[0]);
                AddGraphData("Euler Angles", DateTime.Now, 1, data.SingleNode.Eul[1]);
                AddGraphData("Euler Angles", DateTime.Now, 2, data.SingleNode.Eul[2]);
            }
        }
コード例 #17
0
    public Rotater(string path, Transform _body)
    {
        string[]      strings     = File.ReadAllLines(path);
        List <string> stringFinal = new List <string>();

        foreach (string str in strings)
        {
            if (str.Contains(","))
            {
                stringFinal.Add(str);
            }
        }

        body = _body;
        // if (body.name == "braco.R")
        //  {
        //      origin = new IMUData(DataPoint.zero(), DataPoint.zero(), DataPoint.zero(), 0);
        // } else
        // {
        origin = new IMUData(DataPoint.zero(), new DataPoint(body.eulerAngles, 0), DataPoint.zero(), 0);
        //   }

        data = new CSVData(stringFinal.ToArray(), origin);
    }
コード例 #18
0
 private void OnKbootDecoderDataReceived(object sender, byte[] buf, int len)
 {
     device_data = IMUData.Decode(buf, len);
     fmTermial.Input(device_data.ToString());
 }
コード例 #19
0
 public void PutPacket(object sender, IMUData imuData)
 {
     this.imuData = imuData;
 }
コード例 #20
0
ファイル: GenericIMU.cs プロジェクト: faheem0/caltechrobotics
        private void DataReceivedHandler(IMUData d)
        {
            _state.Data = d;

            SendNotification(_subMgrPort, new IMUNotification(d));
        }
コード例 #21
0
 public void InitWithData(List <float> kinectSPAngles, List <float> kinectFlexAngles, IMUData imu)
 {
     kinectSPAngleAt0   = kinectSPAngles;
     kinectFlexAngleAt0 = kinectFlexAngles;
     imuData            = imu;
 }
コード例 #22
0
ファイル: mi_decoder.cs プロジェクト: hipnuc/Uranus
        public static IMUData Decode(byte[] buf)
        {
            IMUData imu = null;

            foreach (byte data in buf)
            {
                switch (state)
                {
                case status.kStatus_Idle:
                    if (data == 0xA6 || data == 0xAA)
                    {
                        if (data == 0xA6)
                        {
                            isR6082 = false;
                        }

                        if (data == 0xAA)
                        {
                            isR6082 = true;
                        }
                        state = status.kStatus_Hdr;
                    }
                    break;

                case status.kStatus_Hdr:
                    if (data == 0xA6 && isR6082 == false)
                    {
                        DATA_LEN = 24;
                        state    = status.kStatus_Data;
                    }
                    else if (data == 0x00 && isR6082 == true)
                    {
                        DATA_LEN = 13;
                        state    = status.kStatus_Data;
                    }
                    else
                    {
                        state = status.kStatus_Idle;
                    }

                    list.Clear();
                    break;

                case status.kStatus_Data:
                    list.Add(data);

                    if (list.Count == DATA_LEN)
                    {
                        state = status.kStatus_Idle;

                        byte[] ctx          = list.ToArray();
                        byte   checkSumRecv = ctx[DATA_LEN - 1];
                        byte   checkSumCal  = 0;

                        for (int i = 0; i < DATA_LEN - 1; i++)
                        {
                            checkSumCal += ctx[i];
                        }

                        if (checkSumCal == checkSumRecv)
                        {
                            imu = new IMUData();

                            if (isR6082 == false)
                            {
                                imu.SingleNode.Eul     = new float[3];
                                imu.SingleNode.Eul[0]  = (float)(Int16)(ctx[1] + (ctx[2] << 8));
                                imu.SingleNode.Eul[1]  = (float)(Int16)(ctx[3] + (ctx[4] << 8));
                                imu.SingleNode.Eul[2]  = (float)(Int16)(ctx[5] + (ctx[6] << 8));
                                imu.SingleNode.Eul[0] /= 100;
                                imu.SingleNode.Eul[1] /= 100;
                                imu.SingleNode.Eul[2] /= 100;

                                imu.SingleNode.Gyr    = new float[3];
                                imu.SingleNode.Gyr[0] = (float)BitConverter.ToInt16(ctx, 7) / 100;
                                imu.SingleNode.Gyr[1] = (float)BitConverter.ToInt16(ctx, 9) / 100;
                                imu.SingleNode.Gyr[2] = (float)BitConverter.ToInt16(ctx, 11) / 100;

                                imu.SingleNode.Acc    = new float[3];
                                imu.SingleNode.Acc[0] = (float)BitConverter.ToInt16(ctx, 13);
                                imu.SingleNode.Acc[1] = (float)BitConverter.ToInt16(ctx, 15);
                                imu.SingleNode.Acc[2] = (float)BitConverter.ToInt16(ctx, 17);

                                imu.ToStringData  = string.Format("Angles(PRY):").PadRight(14) + imu.SingleNode.Eul[0].ToString("f2").PadLeft(5, ' ') + " " + imu.SingleNode.Eul[1].ToString("f2").PadLeft(5, ' ') + " " + imu.SingleNode.Eul[2].ToString("f2").PadLeft(5, ' ') + "\r\n";
                                imu.ToStringData += string.Format("加速度:").PadRight(11) + imu.SingleNode.Acc[0].ToString("0").PadLeft(5, ' ') + " " + imu.SingleNode.Acc[1].ToString("0").PadLeft(5, ' ') + " " + imu.SingleNode.Acc[2].ToString("0").PadLeft(5, ' ') + "\r\n";
                                imu.ToStringData += string.Format("角速度:").PadRight(11) + imu.SingleNode.Gyr[0].ToString("0").PadLeft(5, ' ') + " " + imu.SingleNode.Gyr[1].ToString("0").PadLeft(5, ' ') + " " + imu.SingleNode.Gyr[2].ToString("0").PadLeft(5, ' ') + "\r\n";
                            }
                            else
                            {
                                imu.SingleNode.Eul     = new float[3];
                                imu.SingleNode.Eul[0]  = 0;
                                imu.SingleNode.Eul[1]  = 0;
                                imu.SingleNode.Eul[2]  = (float)(Int16)(ctx[1] + (ctx[2] << 8));
                                imu.SingleNode.Eul[2] /= 100;

                                imu.SingleNode.Gyr    = new float[3];
                                imu.SingleNode.Gyr[0] = 0;
                                imu.SingleNode.Gyr[1] = 0;
                                imu.SingleNode.Gyr[2] = (float)BitConverter.ToInt16(ctx, 3) / 100;

                                imu.SingleNode.Acc    = new float[3];
                                imu.SingleNode.Acc[0] = (float)BitConverter.ToInt16(ctx, 5);
                                imu.SingleNode.Acc[1] = (float)BitConverter.ToInt16(ctx, 7);
                                imu.SingleNode.Acc[2] = (float)BitConverter.ToInt16(ctx, 9);

                                imu.ToStringData  = string.Format("Angles(PRY):").PadRight(14) + imu.SingleNode.Eul[0].ToString("f2").PadLeft(5, ' ') + " " + imu.SingleNode.Eul[1].ToString("f2").PadLeft(5, ' ') + " " + imu.SingleNode.Eul[2].ToString("f2").PadLeft(5, ' ') + "\r\n";
                                imu.ToStringData += string.Format("加速度:").PadRight(11) + imu.SingleNode.Acc[0].ToString("0").PadLeft(5, ' ') + " " + imu.SingleNode.Acc[1].ToString("0").PadLeft(5, ' ') + " " + imu.SingleNode.Acc[2].ToString("0").PadLeft(5, ' ') + "\r\n";
                                imu.ToStringData += string.Format("角速度:").PadRight(11) + imu.SingleNode.Gyr[0].ToString("0").PadLeft(5, ' ') + " " + imu.SingleNode.Gyr[1].ToString("0").PadLeft(5, ' ') + " " + imu.SingleNode.Gyr[2].ToString("0").PadLeft(5, ' ') + "\r\n";
                            }
                        }
                    }


                    break;

                default:
                    break;
                }
            }
            return(imu);
        }
コード例 #23
0
 public IMUDataMessage(int robotID, IMUData data)
 {
     this.robotID = robotID; this.data = data;
 }
コード例 #24
0
 public static Quaternion rotationFunction(float time, IMUData origin)
 {
     return(Quaternion.Euler(new Vector3(0, function(time), 0) + origin.gyroscope.value));
 }
コード例 #25
0
 public CSVData(string[] csv, IMUData origin)
 {
     name       = csv[1].Split(',')[7];
     controller = new IMUController(csv, origin);
     times      = getTimes(controller);
 }
コード例 #26
0
 private void KootPacketReceived(object sender, byte[] buf, int len)
 {
     SampleCounter.Increment(1);
     imuData = IMUData.Decode(buf, len);
     DoOnDataReceived(imuData);
 }