Tristan Vlogman / Mbed 2 deprecated locomotion_pid_action_refactor_EMG

Dependencies:   FastPWM HIDScope MODSERIAL QEI Matrix biquadFilter controller errorFetch mbed motorConfig refGen MatrixMath inverseKinematics

Fork of Minor_test_serial by First Last

Files at this revision

API Documentation at this revision

Comitter:
tvlogman
Date:
Fri Oct 20 12:24:37 2017 +0000
Parent:
31:cc08254ab7b5
Child:
33:6f4858b98fe5
Commit message:
Broke it... gets strange error saying that class constructor for "Noncopyable" class is inaccessible.;

Changed in this revision

biquadChain.lib Show annotated file Show diff for this revision Revisions of this file
biquadFilter.lib Show annotated file Show diff for this revision Revisions of this file
errorFetch.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
refGen.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/biquadChain.lib	Fri Oct 20 12:24:37 2017 +0000
@@ -0,0 +1,1 @@
+biquadChain#8b742e1512c1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/biquadFilter.lib	Fri Oct 20 12:24:37 2017 +0000
@@ -0,0 +1,1 @@
+biquadFilter#5484e3da74be
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/errorFetch.lib	Fri Oct 20 12:24:37 2017 +0000
@@ -0,0 +1,1 @@
+errorFetch#cb9eda46a58c
--- a/main.cpp	Tue Oct 17 09:52:12 2017 +0000
+++ b/main.cpp	Fri Oct 20 12:24:37 2017 +0000
@@ -6,6 +6,7 @@
 #include "refGen.h"
 #include "controller.h"
 #include "motorConfig.h"
+#include "errorFetch.h"
 
 // Defining relevant constant parameters
 const float gearRatio = 131;
@@ -15,7 +16,8 @@
 const float k_i = 0; // Still needs a reasonable value
 const float k_d = 0; // Again, still need to pick a reasonable value
 
-QEI Encoder(D12,D13,NC,64, QEI::X4_ENCODING);
+QEI Encoder1(D12,D13,NC,64, QEI::X4_ENCODING);
+QEI Encoder2(D11,D10,NC,64, QEI::X4_ENCODING);
 MODSERIAL pc(USBTX, USBRX);
 HIDScope scope(5);
 
@@ -24,7 +26,9 @@
 InterruptIn sw3(SW3);
 InterruptIn button1(D2);
 InterruptIn button2(D3);
-AnalogIn pot2(A1);
+AnalogIn pot2(A3);
+AnalogIn emg0( A0 );
+//AnalogIn emg1( A1 );
 
 // PWM settings
 float pwmPeriod = 1.0/5000.0;
@@ -66,34 +70,12 @@
 const float Ts = 0.1;
 
 // Function getReferencePosition returns reference angle based on potmeter 1
-refGen ref(A0);
+refGen ref1(A1);
 
 //ref.getReferencePosition(maxAngle);
 
-// Initializing position and integral errors to zero
-float e_pos = 0;
-float e_int = 0;
-float e_der = 0;
-float e_prev = 0;
-
 // readEncoder reads counts and revs and logs results to serial window
-void getError(float &e_pos, float &e_int, float &e_der){
-    // Getting encoder counts and calculating motor position
-    counts = Encoder.getPulses();
-    double motor1Position = 2*3.14*(counts/(gearRatio*64.0f));
-
-    // Computing position error
-    e_pos = ref.getReferencePosition(maxAngle, r_direction) - motor1Position;
-    
-    // Limiting the integral error to prevent integrator saturation
-    if(fabs(e_int) <= 5){
-        e_int = e_int + Ts*e_pos;    
-        }
-    
-    // Derivative error   
-    e_der = (e_pos - e_prev)/Ts;
-    e_prev = e_pos; // Store current position error as we'll need it to compute the next derivative error
-    }
+errorFetch err1(Encoder1, gearRatio, Ts, ref1);
 
 // Generate a PID controller with the specified values of k_p, k_d and k_i
 controller motorController1(k_p, k_d, k_i);
@@ -102,10 +84,10 @@
 motorConfig motor1(LED_GREEN,LED_RED,LED_BLUE,D5,D4);
     
 void measureAndControl(){
-    getError(e_pos, e_int, e_der);
-    float motorValue = motorController1.control(e_pos, e_int, e_der);
-    float r = ref.getReferencePosition(maxAngle, r_direction);
-    sendDataToPc(r, e_pos, e_int, e_der, motorValue);
+    err1.fetchError();
+    float motorValue = motorController1.control(err1.e_pos, err1.e_int, err1.e_der);
+    float r = ref1.getReferencePosition(ref.maxAngle, ref1.r_direction);
+    sendDataToPc(r, err1.e_pos, emg0.read(), err1.e_der, motorValue);
     pc.printf("Motorvalue is %.2f \r\n", motorValue);
     pc.printf("Error is %.2f \r\n", e_pos);
     pc.printf("Reference is %.2f \r\n", r);
--- a/refGen.lib	Tue Oct 17 09:52:12 2017 +0000
+++ b/refGen.lib	Fri Oct 20 12:24:37 2017 +0000
@@ -1,1 +1,1 @@
-refGen#ac2d82dfd334
+refGen#35c05e7698f5