示例#1
0
        /// <summary>
        /// Iterate through each emg sensor in myo and assign 1 if the sum of the first and second frame of emg has a sum of more than 20.
        /// else assign 0. It means that much variation(100 to -100) was observed propotional to higher tension in muscle.
        /// </summary>
        /// <param name="e"></param>
        void CalculateEMGValues(EmgDataEventArgs e)
        {
            float[] currentEmgValue = new float[8] {
                0, 0, 0, 0, 0, 0, 0, 0
            };

            for (int i = 0; i <= 7; i++)
            {
                try
                {
                    storeEmgValue[i] = ((float)e.EmgData.GetDataForSensor(i)) / 100;
                }
                catch
                {
                    Debug.WriteLine("No emg value");
                }
            }
            try
            {
                mWindow.UpdateEMG(storeEmgValue);
            } catch
            {
                Debug.WriteLine("No emg value");
            }
        }
示例#2
0
 private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
 {
     for (int i = 0; i < mainForm.numberOfSensors; i++)
     {
         mainForm.myoEMG[i].Add(e.EmgData.GetDataForSensor(i));
     }
 }
示例#3
0
文件: Form1.cs 项目: easaw/Examples
        private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
        {
            // Display Emg Text Data (1000 ms interval = 1 second)
            if (m_CTId.Get() >= 1000)
            {
                m_CTId.Set();
                Ojw.CMessage.Write(String.Format("Emg = {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}",
                                                 e.EmgData.GetDataForSensor(0),
                                                 e.EmgData.GetDataForSensor(1),
                                                 e.EmgData.GetDataForSensor(2),
                                                 e.EmgData.GetDataForSensor(3),
                                                 e.EmgData.GetDataForSensor(4),
                                                 e.EmgData.GetDataForSensor(5),
                                                 e.EmgData.GetDataForSensor(6),
                                                 e.EmgData.GetDataForSensor(7)));
            }

            // Display Emg Graphic Data (100 ms interval)
            if (m_CTId_Graph.Get() >= 100)
            {
                m_CTId_Graph.Set();
                m_CGrap.Push(
                    e.EmgData.GetDataForSensor(0),
                    e.EmgData.GetDataForSensor(1),
                    e.EmgData.GetDataForSensor(2),
                    e.EmgData.GetDataForSensor(3),
                    e.EmgData.GetDataForSensor(4),
                    e.EmgData.GetDataForSensor(5),
                    e.EmgData.GetDataForSensor(6),
                    e.EmgData.GetDataForSensor(7)
                    );
                m_CGrap.OjwDraw();
            }
        }
示例#4
0
 static void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
 {
     Console.Clear();
     for (int i = 0; i < 8; i++)
     {
         Console.WriteLine(@"POD-{1}: {0}", e.EMG[i], i + 1);
     }
 }
示例#5
0
 private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
 {
     // pull data from each sensor
     for (var i = 0; i < _pointPairs.Length; ++i)
     {
         _pointPairs[i].Add((e.Timestamp - _startTime).TotalSeconds, e.EmgData.GetDataForSensor(i));
     }
 }
示例#6
0
        public MyoData buildRecordUsing(DataCollector data, DateTime AGOStamp, DateTime EMGStamp)
        {
            AccelerometerDataEventArgs Acc  = data.accelerometerData.First(X => X.Timestamp == AGOStamp);
            EmgDataEventArgs           Emg  = data.emgData.First(X => X.Timestamp == EMGStamp);
            OrientationDataEventArgs   Ori  = data.orientationData.First(X => X.Timestamp == AGOStamp);
            GyroscopeDataEventArgs     Gyro = data.gyroscopeData.First(X => X.Timestamp == AGOStamp);

            return(buildRecordUsing(Emg, Acc, Gyro, Ori));
        }
示例#7
0
        private void EmgDataAcquired(object sender, EmgDataEventArgs e)
        {
            if (streamData == true)
            {
                string tmpEmg = "";
                for (var i = 0; i < 8; ++i)
                {
                    tmpEmg += e.EmgData.GetDataForSensor(i).ToString() + ",";
                }


                EMG = /*DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString() +*/ tmpEmg;
                Publish("/i5/myo/emg", tmpEmg.Substring(0, tmpEmg.Length - 1));
            }
        }
示例#8
0
 private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
 {
     CalculateGripPressure(e);
     if (gripEMG > 2)
     {
         if (mWindow.myConnector.startedByHub == true)
         {
             mWindow.myConnector.sendFeedback(gripEMG.ToString());
         }
     }
     if (mWindow.start == true)
     {
         SendDataConnector();
     }
 }
示例#9
0
        public void GetEmgData_ValidState_EqualsConstructorParameter()
        {
            // Setup
            var emgData = new Mock <IEmgData>();

            var args = new EmgDataEventArgs(
                new Mock <IMyo>().Object,
                DateTime.UtcNow,
                emgData.Object);

            // Execute
            var result = args.EmgData;

            // Assert
            Assert.Equal(emgData.Object, result);
        }
示例#10
0
        public void GetMyo_ValidState_EqualsConstructorParameter()
        {
            // Setup
            var myo = new Mock <IMyo>();

            var args = new EmgDataEventArgs(
                myo.Object,
                DateTime.UtcNow,
                new Mock <IEmgData>().Object);

            // Execute
            var result = args.Myo;

            // Assert
            Assert.Equal(myo.Object, result);
        }
示例#11
0
        public void GetTimestamp_ValidState_EqualsConstructorParameter()
        {
            // Setup
            var timestamp = DateTime.UtcNow;

            var args = new EmgDataEventArgs(
                new Mock <IMyo>().Object,
                timestamp,
                new Mock <IEmgData>().Object);

            // Execute
            var result = args.Timestamp;

            // Assert
            Assert.Equal(timestamp, result);
        }
示例#12
0
        public void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
        {
            ++countEmgSets;

            var data0 = Math.Abs(e.EmgData.GetDataForSensor(0));
            var data1 = Math.Abs(e.EmgData.GetDataForSensor(1));
            var data2 = Math.Abs(e.EmgData.GetDataForSensor(2));
            var data3 = Math.Abs(e.EmgData.GetDataForSensor(3));
            var data4 = Math.Abs(e.EmgData.GetDataForSensor(4));
            var data5 = Math.Abs(e.EmgData.GetDataForSensor(5));
            var data6 = Math.Abs(e.EmgData.GetDataForSensor(6));
            var data7 = Math.Abs(e.EmgData.GetDataForSensor(7));

            movingSums[movingIndex, 0] = data0;
            movingSums[movingIndex, 1] = data1;
            movingSums[movingIndex, 2] = data2;
            movingSums[movingIndex, 3] = data3;
            movingSums[movingIndex, 4] = data4;
            movingSums[movingIndex, 5] = data5;
            movingSums[movingIndex, 6] = data6;
            movingSums[movingIndex, 7] = data7;
            movingIndex++;
            if (movingIndex >= movAvgCount)
            {
                movingIndex = 0;
            }


            /*
             * sumEmg[0] += data0;
             * sumEmg[1] += data1;
             * sumEmg[2] += data2;
             * sumEmg[3] += data3;
             * sumEmg[4] += data4;
             * sumEmg[5] += data5;
             * sumEmg[6] += data6;
             * sumEmg[7] += data7;
             */
            maxEmg[0] = data0 > maxEmg[0] ? data0 : maxEmg[0];
            maxEmg[1] = data1 > maxEmg[1] ? data1 : maxEmg[1];
            maxEmg[2] = data2 > maxEmg[2] ? data2 : maxEmg[2];
            maxEmg[3] = data3 > maxEmg[3] ? data3 : maxEmg[3];
            maxEmg[4] = data4 > maxEmg[4] ? data4 : maxEmg[4];
            maxEmg[5] = data5 > maxEmg[5] ? data5 : maxEmg[5];
            maxEmg[6] = data6 > maxEmg[6] ? data6 : maxEmg[6];
            maxEmg[7] = data7 > maxEmg[7] ? data7 : maxEmg[7];
        }
示例#13
0
        private static void MyoEmgDataHandler(object sender, EmgDataEventArgs e)
        { //this function tells about actual activity of patient
            //communicates with M2X and surface in State of Patient table, where are 3 types of states
            //0 - low activity, possibly sleeping 1 - moderate activity 2 - high activity, patient may need some help
            for (int i = 0; i < 8; i++)
            {
                emgList[i].Add(Math.Abs(e.EmgData.GetDataForSensor(i)));
            }
            if (emgCounter == 1000 && !taskRunning)
            {
                taskRunning = true;
                emgCounter  = 0;
                List <List <int> > emgTask        = new List <List <int> >(emgList);
                double             averageCounter = 0;
                foreach (var list in emgTask)
                {
                    averageCounter += list.Average();
                }
                if (averageCounter <= 10)
                {
                    response = patientState.UpdateValue(new StreamValue {
                        value = "0"
                    }).Result;
                }
                if (averageCounter > 10 && averageCounter <= 70)
                {
                    response = patientState.UpdateValue(new StreamValue {
                        value = "1"
                    }).Result;
                }
                if (averageCounter > 70)
                {
                    response = patientState.UpdateValue(new StreamValue {
                        value = "2"
                    }).Result;
                }
                Console.WriteLine(averageCounter);
                taskRunning = false;

                foreach (var list in emgList)
                {
                    list.Clear();
                }
            }
            emgCounter++;
        }
示例#14
0
        /// <summary>
        /// Iterate through each emg sensor in myo and assign 1 if the sum of the first and second frame of emg has a sum of more than 20.
        /// else assign 0. It means that much variation(100 to -100) was observed propotional to higher tension in muscle.
        ///
        /// </summary>
        /// <param name="e"></param>
        void CalculateGripPressure(EmgDataEventArgs e)
        {
            gripEMG = 0;
            int[] emgTension = new int[8];
            for (int i = 0; i < 7; i++)
            {
                try
                {
                    if ((firstPreEmgValue[i] + secPreEmgValue[i] + Math.Abs(e.EmgData.GetDataForSensor(i))) <= 20)
                    {
                        emgTension[i] = 0;
                    }
                    else
                    {
                        emgTension[i] = 1;
                    }
                }
                catch
                {
                    Debug.WriteLine("Myo not connceted");
                }
            }

            //add all value from emgTension and assign it to avgTension
            Array.ForEach(emgTension, delegate(int i) { gripEMG += i; });
            mWindow.UpdateGripPressure(gripEMG);

            try
            {
                for (int i = 0; i < 7; i++)
                {
                    secPreEmgValue[i]   = firstPreEmgValue[i];
                    firstPreEmgValue[i] = Math.Abs(e.EmgData.GetDataForSensor(i));
                }
            }
            catch
            {
                Debug.WriteLine("No emg value");
            }
        }
示例#15
0
        private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
        {
            if (_isRecording == true)
            {
                if ((DateTime.Now - lastExecutionEmg).TotalSeconds >= 0.5)
                {
                    CalculateEMGValues(e);
                    SendData();
                    lastExecutionEmg = DateTime.Now;
                }

                //vibrate only twice a sec
                if (vibrateMyo == true)
                {
                    if (gripEMG >= 4)
                    {
                        Debug.WriteLine("gripEmg" + gripEMG);
                        pingMyo();
                        try
                        {
                            myConnector.sendFeedback("Read Grip the pen gently");
                        }
                        catch
                        {
                            Debug.WriteLine("feedback not sent");
                        }

                        lastExecutionVibrate = DateTime.Now;
                        vibrateMyo           = false;
                    }
                }
                if ((DateTime.Now - lastExecutionVibrate).TotalSeconds >= 0.5)
                {
                    vibrateMyo = true;
                }

                gripEMG = 0;
            }
        }
示例#16
0
        private void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
        {
            EMGChangedEventArgs emgArgs = new EMGChangedEventArgs();

            emgArgs.EMGPod_0 = e.Myo.EmgData.GetDataForSensor(0);
            emgArgs.EMGPod_1 = e.Myo.EmgData.GetDataForSensor(1);
            emgArgs.EMGPod_2 = e.Myo.EmgData.GetDataForSensor(2);
            emgArgs.EMGPod_3 = e.Myo.EmgData.GetDataForSensor(3);
            emgArgs.EMGPod_4 = e.Myo.EmgData.GetDataForSensor(4);
            emgArgs.EMGPod_5 = e.Myo.EmgData.GetDataForSensor(5);
            emgArgs.EMGPod_6 = e.Myo.EmgData.GetDataForSensor(6);
            emgArgs.EMGPod_7 = e.Myo.EmgData.GetDataForSensor(7);

            OnEMGChanged(emgArgs);
            //Console.WriteLine(emgArgs.EMGPod_7.ToString());

            //CalculateGripPressure(e);
            //GripPressureChangedEventArgs args = new GripPressureChangedEventArgs();
            //args.gripPressure = gripEMG;
            //OnGripPressureChanged(args);
            //gripEMG = 0;
        }
示例#17
0
 public MyoData buildRecordUsing(EmgDataEventArgs Emg, AccelerometerDataEventArgs Acc, GyroscopeDataEventArgs Gyro, OrientationDataEventArgs Ori)
 {
     return(new MyoData()
     {
         Time_stamp = Acc.Timestamp,
         Acc_X = Acc.Accelerometer.X,
         Acc_Y = Acc.Accelerometer.Y,
         Acc_Z = Acc.Accelerometer.Z,
         Gyro_X = Gyro.Gyroscope.X,
         Gyro_Y = Gyro.Gyroscope.Y,
         Gyro_Z = Gyro.Gyroscope.Z,
         Ori_X = Ori.Orientation.X,
         Ori_Y = Ori.Orientation.Y,
         Ori_Z = Ori.Orientation.Z,
         Ori_W = Ori.Orientation.W,
         Emg_1 = Emg.EmgData.GetDataForSensor(0),
         Emg_2 = Emg.EmgData.GetDataForSensor(1),
         Emg_3 = Emg.EmgData.GetDataForSensor(2),
         Emg_4 = Emg.EmgData.GetDataForSensor(3),
         Emg_5 = Emg.EmgData.GetDataForSensor(4),
         Emg_6 = Emg.EmgData.GetDataForSensor(5),
         Emg_7 = Emg.EmgData.GetDataForSensor(6),
         Emg_8 = Emg.EmgData.GetDataForSensor(7),
         EmgMAV = 1.0d / 8.0d * (
             Math.Abs(Emg.EmgData.GetDataForSensor(0)) +
             Math.Abs(Emg.EmgData.GetDataForSensor(1)) +
             Math.Abs(Emg.EmgData.GetDataForSensor(2)) +
             Math.Abs(Emg.EmgData.GetDataForSensor(3)) +
             Math.Abs(Emg.EmgData.GetDataForSensor(4)) +
             Math.Abs(Emg.EmgData.GetDataForSensor(5)) +
             Math.Abs(Emg.EmgData.GetDataForSensor(6)) +
             Math.Abs(Emg.EmgData.GetDataForSensor(7))),
         Pitch = Ori.Pitch,
         Roll = Ori.Roll,
         Yaw = Ori.Yaw,
     });
 }
示例#18
0
 private static void Myo_EmgDataAcquired(object sender, EmgDataEventArgs e)
 {
     // TODO: write your code to interpret EMG data!
 }
示例#19
0
文件: MyoTests.cs 项目: raphaelfp/pyo
        public void ChannelEventReceived_Emg_TriggersEmgDataAcquiredEvent()
        {
            // Setup
            var routeEventArgs = new RouteMyoEventArgs(
                new IntPtr(123),
                new IntPtr(789),
                MyoEventType.Emg,
                DateTime.UtcNow);

            var gyroscope = new Vector3F(10, 20, 30);

            var channelListener = new Mock <IChannelListener>(MockBehavior.Strict);

            var myoDeviceDriver = new Mock <IMyoDeviceDriver>(MockBehavior.Strict);

            myoDeviceDriver
            .SetupGet(x => x.Handle)
            .Returns(new IntPtr(123));

            for (int i = 0; i < 8; i++)
            {
                myoDeviceDriver
                .Setup(x => x.GetEventEmg(routeEventArgs.Event, i))
                .Returns((sbyte)(i * 10));
            }

            var myo = Myo.Create(
                channelListener.Object,
                myoDeviceDriver.Object);

            EmgDataEventArgs actualEventArgs = null;
            object           actualSender    = null;

            myo.EmgDataAcquired += (sender, args) =>
            {
                actualSender    = sender;
                actualEventArgs = args;
            };

            // Execute
            channelListener.Raise(
                x => x.EventReceived += null,
                routeEventArgs);

            // Assert
            Assert.Equal(myo, actualSender);
            Assert.Equal(myo, actualEventArgs.Myo);
            Assert.Equal(routeEventArgs.Timestamp, actualEventArgs.Timestamp);
            Assert.NotNull(actualEventArgs.EmgData);
            Assert.Equal(0, actualEventArgs.EmgData.GetDataForSensor(0));
            Assert.Equal(10, actualEventArgs.EmgData.GetDataForSensor(1));
            Assert.Equal(20, actualEventArgs.EmgData.GetDataForSensor(2));
            Assert.Equal(30, actualEventArgs.EmgData.GetDataForSensor(3));
            Assert.Equal(40, actualEventArgs.EmgData.GetDataForSensor(4));
            Assert.Equal(50, actualEventArgs.EmgData.GetDataForSensor(5));
            Assert.Equal(60, actualEventArgs.EmgData.GetDataForSensor(6));
            Assert.Equal(70, actualEventArgs.EmgData.GetDataForSensor(7));

            myoDeviceDriver.VerifyGet(x => x.Handle, Times.Once);
            myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 0), Times.Once);
            myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 1), Times.Once);
            myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 2), Times.Once);
            myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 3), Times.Once);
            myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 4), Times.Once);
            myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 5), Times.Once);
            myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 6), Times.Once);
            myoDeviceDriver.Verify(x => x.GetEventEmg(routeEventArgs.Event, 7), Times.Once);
        }