My modifications/additions to the code

Dependencies:   ADXL345 ADXL345_I2C IMUfilter ITG3200 Servo fishgait mbed-rtos mbed pixy_cam

Fork of robotic_fish_ver_4_8 by jetfishteam

Files at this revision

API Documentation at this revision

Comitter:
rkk
Date:
Thu May 22 04:32:19 2014 +0000
Parent:
16:79cfe6201318
Child:
18:9ba4566f2361
Commit message:
jet fish with simple yaw motion and added channels for pwm in and pwm out

Changed in this revision

MainController.cpp Show annotated file Show diff for this revision Revisions of this file
MainController.h 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
--- a/MainController.cpp	Mon Feb 17 14:04:09 2014 +0000
+++ b/MainController.cpp	Thu May 22 04:32:19 2014 +0000
@@ -1,20 +1,28 @@
 #include "MainController.h"
 
 MainController::MainController()
-    :ch3(p16,0.054,0.092), // frequency
+    :ch1(p18,0.054,0.092), // pitch
+     ch2(p30,0.054,0.092), // roll
+     ch3(p16,0.054,0.092), // frequency
      ch4(p17,0.055,0.092), //rudder
      ch6(p15,0.055,0.092), //volume
-     mcon(p22, p6, p7), // change p5 to p7, because p5 is burned through
-     ap(p25, p26)
+     mcon(p22, p6, p7), // change pin p5 to p7, because p5 is burned through
+     ap(p25, p26),
+     leftservo(p21),
+     rightservo(p22)
+     
 {
     wait_ms(50);
     vol = 0.0;
-    frq = 10.0;
+    frq = 1.0;
     rud = 0.5;
+    pitch = 0.5;
     frqMin = 0.4; // hardcoded
     frqMax = 2.5; //hardcoded
-    goofftime = 0.0;
-    switched = false;
+    change = 0;
+    state = 0;
+    //goofftime = 0.0;
+    //switched = false;
 }
 
 void MainController::control()
@@ -25,18 +33,46 @@
         //read new inputs
         vol = this->calculateVolume();
         frq = this->calculateFrequency();
-        rud = this->calculateRudder(); //not used right now
+        rud = this->calculateRudder();
         timer1.reset();
         curTime = 0.0;
-        
+
         // rudder value used to define the trapezoid shape
-        amplitude = vol * ( 2* rud + 1.0);
-        //amplitude = vol * 3.0;
+        // amplitude = vol * ( 2* rud + 1.0); // varied from 1 to 5
+        amplitude = vol * 4.0;
+        
+        //reset change to zero
+        change = 0;
         
-        switched = false;
-        goofftime = (vol/(2*frq));
-            
+        if(state == 1) {
+            if(rud < 0.75) {
+                change = -1;
+                state = 0;
+            }
+        } 
+        else if (state == -1) {
+            if(rud> 0.25) {
+                change = 1;
+                state = 0;
+            }
+        } 
+        else {
+            if(rud < 0.25) {
+                change = -1;
+                state = -1;
+            } else if(rud > 0.75) {
+                change = 1;
+                state = 1;
+            }
+        }
+        //switched = false;
+        //goofftime = (vol/(2*frq));    
     }
+    
+    //Set Servo Values
+    pitch = this->calculatePitch();
+    leftservo = pitch;
+    rightservo = 1.0 - pitch;
        
 //    if (curTime > 1/(2*frq) && (switched == false))
 //    {
@@ -55,12 +91,18 @@
 //        amplitude = 0.0;
 //    }
 
-    dutyCycle = saturate(amplitude * sin( 2.0 * MATH_PI * frq * curTime ));
-
+    // saturate ensures the duty cycle does not exceed 1, 
+    
+    if((change == 1) && (curTime > 1/(2*frq))) {
+        dutyCycle = 0.0;
+    } else if((change == -1) && (curTime < 1/(2*frq))) {
+        dutyCycle = 0.0;
+    } else {
+        dutyCycle = saturate(amplitude * sin( 2.0 * MATH_PI * frq * curTime ));
+    }
     mcon.setpolarspeed(dutyCycle);
 }
 
-
 float MainController::calculateFrequency()
 {
     return ((frqMax - frqMin) * ch3.dutycyclescaledup() + frqMin);    
@@ -76,9 +118,15 @@
     return (ch4.dutycyclescaledup());
 }
 
+float MainController::calculatePitch()
+{
+    return (ch1.dutycyclescaledup());
+}
+
 void MainController::start()
 {
     timer1.start();
+    
     ticker1.attach(this, &MainController::control,0.001);
     //Autopilot guardian
     //ap.calibrate();
@@ -120,6 +168,11 @@
     return rud;
 }
 
+float MainController::getPitch()
+{
+    return pitch;
+}
+
 //signum function
 float MainController::signum(float input)
 {
--- a/MainController.h	Mon Feb 17 14:04:09 2014 +0000
+++ b/MainController.h	Thu May 22 04:32:19 2014 +0000
@@ -6,6 +6,8 @@
 #include "motor_controller.h"
 #include "guardian.h"
 //#include "IMU.h"
+#include "Servo.h"
+
 
 
 #define MATH_PI 3.14159265359
@@ -33,6 +35,7 @@
     float getVolume();
     float getAmplitude();
     float getRudder();
+    float getPitch();
     
     /** Stop the main controller
      *
@@ -46,16 +49,20 @@
     float calculateFrequency();
     float calculateVolume();
     float calculateRudder();
+    float calculatePitch();
     float signum(float input);
     float saturate(float input);
     
 private:
+    PwmIn ch1;
+    PwmIn ch2;
     PwmIn ch3;
     PwmIn ch4;
     PwmIn ch6;
     PololuMController mcon;
     Guardian ap;
-    
+    Servo leftservo;
+    Servo rightservo;
     
     Timer timer1;
     Ticker ticker1;
@@ -67,8 +74,12 @@
     float frqMax;
     float amplitude;
     float rud;
-    float goofftime;
-    bool switched;
+    float pitch;
+    
+    int state;
+    int change;
+    //float goofftime;
+    //bool switched;
 };
  
 #endif
--- a/main.cpp	Mon Feb 17 14:04:09 2014 +0000
+++ b/main.cpp	Thu May 22 04:32:19 2014 +0000
@@ -18,8 +18,8 @@
 
     while(true) {
   
-        pc.printf("frq: %f, vol: %f, amp: %f, rud: %f, dut: %f, t: %f\n",
-         mainCtrl.getFrequency(), mainCtrl.getVolume(), mainCtrl.getAmplitude(), mainCtrl.getRudder(), mainCtrl.getDutyCycle(),t.read());
+        pc.printf("frq: %f, vol: %f, amp: %f, rud: %f, dut: %f, pit: %f, t: %f\n",
+         mainCtrl.getFrequency(), mainCtrl.getVolume(), mainCtrl.getAmplitude(), mainCtrl.getRudder(), mainCtrl.getDutyCycle(), mainCtrl.getPitch(), t.read());
 
         wait_ms(100);
     }