public void OnRecordingDataReceivedEvent(object sender, RecordingDataReceivedEventArgs args)
 {
     lock (_dataReceiving)
     {
     //                if (args.SensorDataPacket.LogicalID == 0)
             _current1SensorData = args.Sensor1DataPacket;
             _current2SensorData = args.Sensor2DataPacket;
     }
 }
        private void ReadOrientation(SensorData sensorData)
        {
            lock (_dataReadSync)
            {
                int returnDataLength = 19;
                //check to make sure the port is present
                if (_wirelessDongle.Port != null)
                {

                    byte[] writebuffer = new byte[4];
                    writebuffer[0] = 0xf8;//command start byte for wireless commands
                    writebuffer[1] = _sensorLogicalID;//Logical id for the sensor
                    writebuffer[2] = 0x0;//command number
                    writebuffer[3] = (byte)(0x0 + _sensorLogicalID);//checksum(sum of all other packet bytes except start byte and checksum
                    _wirelessDongle.Port.Write(writebuffer, 0, 4);

                    //use this bit of code to read back data until we have the required amount
                    int totalbytes = 0;
                    byte[] readbuffer = new byte[returnDataLength];
                    while (totalbytes != returnDataLength)
                    {
                        int nbytes = _wirelessDongle.Port.Read(readbuffer, totalbytes, returnDataLength - totalbytes);
                        totalbytes += nbytes;
                    }

                    //reverse the array bytes because this data is big endian
                    readbuffer = readbuffer.Reverse().ToArray();
                    //readbuffer = readbuffer.ToArray();

                    //Populate the data backwards because we reversed the order of the values
                    //as well as their internal bytes

                    Quaternion quatObj = new Quaternion();
                    //quaternion x
                    quatObj.X = BitConverter.ToSingle(readbuffer, 12);

                    //quaternion y
                    quatObj.Y = BitConverter.ToSingle(readbuffer, 8);

                    //quaternion z
                    quatObj.Z = BitConverter.ToSingle(readbuffer, 4);

                    //quaternion w
                    quatObj.W = BitConverter.ToSingle(readbuffer, 0);

                    sensorData.QuaternionObject = quatObj;
                }
            }
        }
예제 #3
0
 public RecordingDataReceivedEventArgs(SensorData sensor1DataPacket, SensorData sensor2DataPacket)
 {
     _sensor1DataPacket = sensor1DataPacket;
     _sensor2DataPacket = sensor2DataPacket;
 }
예제 #4
0
 public void ReceivedEventRecordingData(SensorData sensor1Data, SensorData sensor2Data)
 {
     if(RecordingDataReceivedEvent != null)
         RecordingDataReceivedEvent(this, new RecordingDataReceivedEventArgs(sensor1Data, sensor2Data));
 }
        private void SpaceSensorRecordingThreadSimulation()
        {
            CSVFileParser l_Parser = new CSVFileParser();
            l_Parser.startParsingCSVData(ProjectConstants.SPACE_SENSOR_SIMULATED_DATA_PATH, 0, 14);
            string[] row;

            while ((row = l_Parser.getNextRow(0)) != null)
            {

                SensorData sensor1DataObj = new SensorData();
                ReadSimulationSensorData(sensor1DataObj,row,2);

                SensorData sensor2DataObj = new SensorData();
                ReadSimulationSensorData(sensor2DataObj, row, 12);

                mParent.ReceivedEventRecordingData(sensor2DataObj, sensor2DataObj);

                Thread.Sleep(1);

            }

            l_Parser.close();
        }
        private void SpaceSensorProcessingThread()
        {
            while (true)
            {
                while(_spaceSensorDataQueue.Count == 0)
                {
                    if(!_spaceProcessingStatus)
                        return;

                    Thread.Sleep(10);
                }

                string[] rowHeader = new string[2];
                _sequenceNumber++;
                rowHeader[0] = _sequenceNumber.ToString();
                //rowHeader[1] = String.Format("{0:hh:mm:ss.fff}", DateTime.Now);
                TimeSpan recordTime = DateTime.Now - _startRecordingTime;
                rowHeader[1] = recordTime.TotalMilliseconds.ToString();

                    SpaceSensorRecordingDataReceivedEventArgs args =    _spaceSensorDataQueue.Dequeue();
                SensorData sensor1DataObj = new SensorData();
                ReadAccGyroData(args.Sensor1DataPacket,sensor1DataObj);

                SensorData sensor2DataObj = new SensorData();
                ReadAccGyroData(args.Sensor2DataPacket,sensor2DataObj);

                string[] sensor1Data = ConvertSensorDataToCSV(sensor1DataObj);
                string[] sensor2Data = ConvertSensorDataToCSV(sensor2DataObj);

                if(m_CSVFileWriter != null)
                    logSpaceSensorCSVLineItem(new SpaceSensorCSVLineItem(rowHeader, sensor1Data, sensor2Data));

            }
        }
        private void ReadSimulationSensorData(SensorData sensorDataObj,string []row,int startIndex)
        {
            Vector3 accData = new Vector3();
            accData.X = Convert.ToSingle(row[startIndex]);
            accData.Y = Convert.ToSingle(row[startIndex+1]);
            accData.Z = Convert.ToSingle(row[startIndex+2]);
            sensorDataObj.AccDataObject.DataVector = accData;

            GyroData gyroObj = sensorDataObj.GyroDataObject;
            gyroObj.Pitch = Convert.ToSingle(row[startIndex+3]);
            gyroObj.Yaw = Convert.ToSingle(row[startIndex+4]);
            gyroObj.Roll = Convert.ToSingle(row[startIndex+5]);

            Quaternion quatObj = sensorDataObj.QuaternionObject;
            quatObj.X = Convert.ToSingle(row[startIndex+6]);
            quatObj.Y = Convert.ToSingle(row[startIndex+7]);
            quatObj.Z = Convert.ToSingle(row[startIndex+8]);
            quatObj.W = Convert.ToSingle(row[startIndex+9]);
        }
        private void ReadAccGyroData(SensorDataRaw rawData, SensorData sensorDataObj)
        {
            byte []readbuffer = rawData.AccGyroReadbuffer;

                    //reverse the array bytes because this data is big endian
                    readbuffer = readbuffer.Reverse().ToArray();

                    //Populate the data backwards because we reversed the order of the values
                    //as well as their internal bytes

                    sensorDataObj.GyroDataObject.Pitch = BitConverter.ToSingle(readbuffer, 32);
                    sensorDataObj.GyroDataObject.Yaw = BitConverter.ToSingle(readbuffer, 28);
                    sensorDataObj.GyroDataObject.Roll = BitConverter.ToSingle(readbuffer, 24);

                    Vector3 accVectorObject = new Vector3();
                    accVectorObject.X = BitConverter.ToSingle(readbuffer, 20);
                    accVectorObject.Y = BitConverter.ToSingle(readbuffer, 16);
                    accVectorObject.Z = BitConverter.ToSingle(readbuffer, 12);
                    sensorDataObj.AccDataObject.DataVector = accVectorObject;

                    Vector3 compassVectorObject = new Vector3();
                    compassVectorObject.X = BitConverter.ToSingle(readbuffer, 8);
                    compassVectorObject.Y = BitConverter.ToSingle(readbuffer, 4);
                    compassVectorObject.Z = BitConverter.ToSingle(readbuffer, 0);
                    sensorDataObj.CompassDataObject.DataVector = compassVectorObject;
        }
        private string[] ConvertSensorDataToCSV(SensorData sensorDataObj)
        {
            //Quaternion sensorQuatObj = _spaceSensorMain.SpaceSensorObject2.ReadOrientation();
            string[] dataRow = new string[10];

            if (sensorDataObj.AccDataObject != null)
            {
                dataRow[0] = sensorDataObj.AccDataObject.DataVector.X.ToString();
                dataRow[1] = sensorDataObj.AccDataObject.DataVector.Y.ToString();
                dataRow[2] = sensorDataObj.AccDataObject.DataVector.Z.ToString();
                dataRow[3] = sensorDataObj.GyroDataObject.Pitch.ToString();
                dataRow[4] = sensorDataObj.GyroDataObject.Yaw.ToString();
                dataRow[5] = sensorDataObj.GyroDataObject.Roll.ToString();
            }

            if (sensorDataObj.QuaternionObject != null)
            {
                dataRow[6] = sensorDataObj.QuaternionObject.X.ToString();
                dataRow[7] = sensorDataObj.QuaternionObject.Y.ToString();
                dataRow[8] = sensorDataObj.QuaternionObject.Z.ToString();
                dataRow[9] = sensorDataObj.QuaternionObject.W.ToString();
            }

            return dataRow;
        }
        private OscMessage CreateOscMessage(SensorData sensorData)
        {
            OscMessage dataOscMessage = new OscMessage(_sourceEndPoint, "/taprapper/sensordata", sOscClient);
            dataOscMessage.Append(sensorData.AccDataObject.DataVector.X);
            dataOscMessage.Append(sensorData.AccDataObject.DataVector.Y);
            dataOscMessage.Append(sensorData.AccDataObject.DataVector.Z);
            dataOscMessage.Append(sensorData.GyroDataObject.Pitch);
            dataOscMessage.Append(sensorData.GyroDataObject.Roll);
            dataOscMessage.Append(sensorData.GyroDataObject.Yaw);
            dataOscMessage.Append(sensorData.QuaternionObject.X);
            dataOscMessage.Append(sensorData.QuaternionObject.Y);
            dataOscMessage.Append(sensorData.QuaternionObject.Z);
            dataOscMessage.Append(sensorData.QuaternionObject.W);

            return dataOscMessage;
        }
        public void SendMessage(SensorData sensor1Data, SensorData sensor2Data)
        {
            OscBundle sBundle = new OscBundle(_sourceEndPoint);

            OscMessage dataOscMessage = CreateOscMessage(sensor1Data);
            sBundle.Append(dataOscMessage);

            dataOscMessage = CreateOscMessage(sensor2Data);
            sBundle.Append(dataOscMessage);

            _oscMessageQueue.Enqueue(dataOscMessage);

            //MemoryStream memoryStream = new MemoryStream();
            //Resources.Image.Save(memoryStream, ImageFormat.Jpeg);

            //oscMessage.Append(memoryStream.ToArray());

            //sSendMessages = false;
        }