Temp Fork

Dependencies:   MMA8451Q Multi_WS2811 NVIC_set_all_priorities TSI cc3000_hostdriver_mbedsocket mbed

Fork of CubicHand by Model-Based Team

Files at this revision

API Documentation at this revision

Comitter:
naren
Date:
Thu Dec 11 04:07:54 2014 +0000
Parent:
21:5b987194387d
Child:
23:a8de4f87cada
Commit message:
Added moving average filter; ; correction, corrected are two new structures used for this purpose

Changed in this revision

DataGlove.cpp Show annotated file Show diff for this revision Revisions of this file
DataGlove.h Show annotated file Show diff for this revision Revisions of this file
--- a/DataGlove.cpp	Wed Dec 10 22:46:44 2014 +0000
+++ b/DataGlove.cpp	Thu Dec 11 04:07:54 2014 +0000
@@ -10,8 +10,16 @@
 {
 	notConnectedCount = 0;
 	gl = new Glove;
+	correction = new Glove;
+	corrected = new Glove;
 	ReceiveCount = 0;
     numReceived = 0;
+    //Initialize correction values to 0
+    correction->roll = 0.0;
+    correction->pitch = 0.0;
+    correction->yaw = 0.0;
+    for (int i = 0; i < 5; i++)
+    	correction->fingers[i] = 0.0;
 }
 
 DataGlove::~DataGlove()
@@ -23,7 +31,7 @@
 {
 	GloveSocket.Init();
 	GloveSocket.Connect();
-	StreamData(STREAM_QUATERNION);
+	StreamData(STREAM_FINGERS_QUATERNION);
 }
 
 void DataGlove::StreamData(uint8_t DataType)
@@ -82,7 +90,11 @@
                 timeOfArrival = (Buf[6] << 24) + (Buf[7] << 16) + (Buf[8] << 8) + Buf[9];
                 id = (Buf[4] << 8) + Buf[5];
                 pkgtype = Buf[3];
-                if(ReceiveCount++%25 == 0) printf("%d %c\r\n", ReceiveCount, Buf[0]);
+                if(ReceiveCount > 501 && ReceiveCount++%25 == 0) {//printf("%d %c\r\n", ReceiveCount, Buf[0]);
+                	printf("%f %f %f %f %f %f %f %f\r\n", corrected->roll, corrected->pitch, corrected->yaw, 
+                	corrected->fingers[0], corrected->fingers[1], corrected->fingers[2], 
+                	corrected->fingers[3], corrected->fingers[4]);
+                }
                 switch (pkgtype){
                     case STREAM_FINGERS_QUATERNION:
                     {
@@ -92,7 +104,6 @@
                     case STREAM_QUATERNION:
                     {
                         ExtractQuat();
-                        //printf("roll: %f\tpitch: %f\tyaw: %f\r\n", gl->roll, gl->pitch, gl->yaw);
                     }
                     break;
                     case STREAM_FINGERS_RAW:
@@ -103,7 +114,6 @@
                     case STREAM_RAW:
                     {
                         ExtractRaw();
-                        printf("%f %f %f %f %f %f\r\n", gl->gyro[0], gl->gyro[1], gl->gyro[2], gl->accel[0], gl->accel[1], gl->accel[2]);
                     }
                     break;
 
@@ -123,12 +133,27 @@
                     notConnectedCount++;
             }
         }
+        // Normalize the data for the first 1000 samples
+        if (ReceiveCount < 500) {
+        	correction->roll = (correction->roll*ReceiveCount + gl->roll)/(ReceiveCount+1);
+        	correction->pitch = (correction->pitch*ReceiveCount + gl->pitch)/(ReceiveCount+1);
+        	correction->yaw = (correction->yaw*ReceiveCount + gl->yaw)/(ReceiveCount+1);
+        	for (int iter = 0; iter < 5; iter++)
+        		correction->fingers[iter] = (correction->fingers[iter]*ReceiveCount + gl->fingers[iter])/(ReceiveCount+1);
+        }
+        else {
+        	corrected->roll = gl->roll - correction->roll;
+        	corrected->pitch = gl->pitch - correction->pitch;
+        	corrected->yaw = gl->yaw - correction->yaw;
+        	for (int iter = 0; iter < 5; iter++)
+        		corrected->fingers[iter] = gl->fingers[iter] - correction->fingers[iter];
+        }
     }
     else {
         //printf("couldn't get data %d\r\n", notConnectedCount);
         // Re-establishing communication in case no data is received for 1s (20 frames per second*1 = 20)
         if (notConnectedCount > 200) {
-            printf("Connection broke! Trying to re-establish... %d \r\n",numReceived);
+            printf("Connection broke! Trying to re-establish... %d %c\r\n",numReceived,Buf[0]);
             //GloveSocket.Reconnect();
             //StreamData(STREAM_QUATERNION);
             notConnectedCount = 0;
--- a/DataGlove.h	Wed Dec 10 22:46:44 2014 +0000
+++ b/DataGlove.h	Thu Dec 11 04:07:54 2014 +0000
@@ -39,7 +39,12 @@
 	    int q0, q1, q2, q3;
 	    double q00, q11, q22, q33;
 	    long ReceiveCount;
+	    // Stores glove data
 		Glove *gl;
+		// Stores the correction matrix
+		Glove *correction;
+		// Stores the corrected glove values
+		Glove *corrected;
         GloveWifi GloveSocket;
         
     private: