aa

Dependencies:   HMC6352 QEI Servo mbed

Fork of walkROBO by Ryo Ogata

Files at this revision

API Documentation at this revision

Comitter:
yusuke_robocup
Date:
Thu Sep 05 09:57:22 2013 +0000
Parent:
1:f465d89a26b0
Commit message:
aa

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
diff -r f465d89a26b0 -r 955cdadf5ecc main.cpp
--- a/main.cpp	Thu Aug 01 09:05:23 2013 +0000
+++ b/main.cpp	Thu Sep 05 09:57:22 2013 +0000
@@ -8,9 +8,9 @@
 //#define ROTATE_PER_REVOLUTIONS  360//enko-da no bunkainou
 
 //QEI wheel(p23/*A*/, p24/*B*/, NC, ROTATE_PER_REVOLUTIONS, QEI::X4_ENCODING);
-HMC6352 compass(p28/*sda*/, p27/*scl*/);
-Servo myservo1(p21);
-Servo myservo2(p22);
+//HMC6352 compass(p28/*sda*/, p27/*scl*/);
+Servo servoR(p21);
+Servo servoL(p22);
 DigitalOut myled(LED1);
 Ticker interrupt;
 
@@ -61,37 +61,78 @@
     
     return m;
 }*/
+ 
+#define Convert_dekaruto(a) ((a+100.0)/2.0/100.0)
 
+#define STRAIGHT 0.6;
+#define SPIN 0.4;
+
+//#define STRAIGHT 0.0;
+//#define SPIN 1.0;
+
+
+void move(int vl,int vs){
+    double fut_R,fut_L,true_vs;
+    
+    true_vs = abs(vs)/SPIN;
+    
+    if(true_vs > 40){
+        vl = 0;
+        vs = 100*(vs/abs(vs));
+    }
+    
+    fut_R = Convert_dekaruto((vl + vs));
+    fut_L = Convert_dekaruto(-(vl - vs)*1.4);
+ 
+    servoR = fut_R;
+    servoL = fut_L;
+       
+    //printf("R:%lf   L:%lf\n",fut_R,fut_L);
+    //printf("R:%d   L:%d\n",(vl + vs),-(vl - vs));
+}
+
+void PidUpdate()
+{   
+    inputPID = (((int)(compass.sample() - ((207.0) * 10.0) + 5400.0) % 3600) / 10.0);
+    //printf("%lf\n",inputPID);      
+}
+
+double vsOut(){
+    double vs;
+    vs = ((inputPID / 360 - 0.5) * 2 * 100) * -1;
+    vs = vs * 8;
+    
+    if(vs/abs(vs) < 0){
+        //vs *= 1.3;   
+    }
+    
+    if(abs(vs) > 90)vs = 90*(vs/abs(vs));
+    if(abs(vs) < 25) vs = 25*(vs/abs(vs));
+    
+    return vs;
+}
 
 
 int main() {
-    
-    
-    
-    
-    //printf("test\n");
+
+    wait(3);
+
+    int vl;
+    double vs;
     
     timer2.start();
-    interrupt.attach(&tic_sensor, 0.1/*sec*/);
+    //interrupt.attach(&tic_sensor, 0.1/*sec*/);
     compass.setOpMode(HMC6352_CONTINUOUS, 1, 20);
+    pidUpdata.attach(&PidUpdate, PID_CYCLE);
     //printf("test%d\n",com_val);
     
     while(1) {
-    wait(0.1);
-        
+        vl = -90;
+        //vl = 0;
+    
+        vl = vl      * STRAIGHT;
+        vs = vsOut() * SPIN;
         
-      //  printf("pid:%.5d\n", ultrasonicVal[0]);
-        printf("Heading is: %f\n", compass.sample() / 10.0);
-
-        if((ultrasonicVal[0] < 1000)&&(ultrasonicVal[1] < 1000)){
-            myservo1 = 0.5;
-            myservo2 = 0.5;
-        }else if((ultrasonicVal[0] < ultrasonicVal[1])&&(ultrasonicVal[0] < 1000)){
-            myservo1 = 0.7 + proportional;
-            myservo2 = 0.7;
-        }else if((ultrasonicVal[0] > ultrasonicVal[1])&&(ultrasonicVal[1] < 1000)){
-            myservo1 = 0.3;
-            myservo2 = 0.3 + proportional;
-        }
+        move(vl,(int)vs); 
     }
 }
diff -r f465d89a26b0 -r 955cdadf5ecc main.h
--- a/main.h	Thu Aug 01 09:05:23 2013 +0000
+++ b/main.h	Thu Sep 05 09:57:22 2013 +0000
@@ -4,4 +4,96 @@
 
 extern double ultrasonicValue[4];
 extern uint16_t ultrasonicVal[4];
-extern void Ultrasonic(void);
\ No newline at end of file
+extern void Ultrasonic(void);
+
+/* robocup */
+
+#define RATE    0.052
+#define Long    1.0
+#define ENTER   0
+#define EXIT    1
+#define X       0
+#define Y       1
+#define MOT_NUM 4
+#define MOTDRIVER_WAIT  300 //ms
+#define BAUD_RATE       115200
+#define BAUD_RATE2      19200
+#define BUT_WAIT        0.3 //s
+#define ON      1
+#define OFF     0
+
+#define PING_ERROR  0xFFFF
+#define PI          3.14159265
+
+#define MOT1    1.0
+#define MOT2    1.0
+#define MOT3    1.0
+#define MOT4    1.0
+
+#define PID_BIAS    0.0
+#define REFERENCE   180.0
+#define MINIMUM     0.0
+#define MAXIMUM     360.0
+
+#define PID_CYCLE   0.06    //s
+
+#define P_GAIN  0.75    //0.78   
+#define I_GAIN  0.0     //0.0
+#define D_GAIN  0.006   //0.009
+    
+#define OUT_LIMIT   30.0
+#define MAX_POW     100
+#define MIN_POW     -100
+
+DigitalOut led1(LED1); 
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+BusOut mbedleds(LED4,LED3,LED2,LED1); 
+HMC6352 compass(p28, p27);
+//Serial driver(p28, p27);    // tx, rx 
+Serial device2(p13, p14);   // tx, rx
+Serial pc(USBTX, USBRX);    // tx, rx 
+//DigitalIn StartButton(p21);
+//DigitalIn CalibEnterButton(p22);
+DigitalIn CalibExitButton(p23);
+DigitalIn EEPROMButton(p24);
+//PID pid(P_GAIN,I_GAIN,D_GAIN, RATE);      //battery is low power version 30.0 0.58 1.0 0.015    battery is high power version   30.0 0.42, 1.0, 0.013   power is low but perfect 20.0 0.45, 0.0, 0.010
+Ticker pidUpdata;
+Ticker irDistanceUpdata;
+Timer timer1;
+Timer Survtimer;
+LocalFileSystem local("local");  // マウントポイントを定義(ディレクトリパスになる)
+
+enum{
+    NORMAL,
+    LEFT_OUT,
+    RIGHT_OUT,
+    FRONT_OUT,
+    BACK_OUT,
+};
+
+enum{
+    HOME_WAIT,
+    DIFFENCE,
+    WARNING,
+    HOLD,
+};
+
+PinName adc_num[6] = {
+    p15,
+    p16,
+    p17,
+    p18,
+    p19,
+    p20,
+};
+double standTu = 0;
+int speed[MOT_NUM] = {0};
+uint8_t hold_flag = 0;
+uint8_t state = HOME_WAIT;
+uint8_t lineState = NORMAL;
+
+double inputPID = 180.0;
+static double standard;
+double compassPID = 0.0;
\ No newline at end of file