玉田機体の調整

Dependencies:   mbed AQM0802 CRotaryEncoder TB6612FNG

Files at this revision

API Documentation at this revision

Comitter:
poritekutama
Date:
Wed Nov 27 07:55:12 2019 +0000
Parent:
32:ac1821d7715f
Commit message:
test; ;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
tuning.h Show annotated file Show diff for this revision Revisions of this file
diff -r ac1821d7715f -r dfd006d3da79 main.cpp
--- a/main.cpp	Tue Nov 26 04:31:37 2019 +0000
+++ b/main.cpp	Wed Nov 27 07:55:12 2019 +0000
@@ -33,6 +33,7 @@
 AnalogIn    s6(A3);
 AnalogIn    s7(A2);
 AnalogIn    s8(A0);
+
 ///////////////////////////////////////  
 CRotaryEncoder encoder_a(D1,D0);    //モータAのエンコーダ
 CRotaryEncoder encoder_b(D11,D12);  //モータBのエンコーダ
@@ -69,8 +70,8 @@
             ////↓左右タイヤの走行距離格納。1走目のコース記憶処理に使用する。マーカ通過ごとにリセット。                                
 long long int    Distance_memory_A=0, Distance_memory_B=0;
 
-long int    S_Kp=S_KP_LOW;////センサP成分
-long int    S_Kd=S_KD_LOW;////センサD成分
+float     S_Kp=S_KP_LOW;////センサP成分
+float     S_Kd=S_KD_LOW;////センサD成分
 
 long long int Marker_Run_Distance=0; 
 long int Speed_A=0,  Speed_B=0;             //機体の現在速度を格納
@@ -108,7 +109,7 @@
 
 
 void sensor_analog_read(){//ラインセンサの情報取得処理。
-    if((Sensor_Digital&0x18)||(Cross_Flag==1)){//センサ中央検知もしくは交差点検知のとき
+/*    if((Sensor_Digital&0x18)||(Cross_Flag==1)){//センサ中央検知もしくは交差点検知のとき
         S1_Data=s1.read();
         S2_Data=0;                  //交差点通過中は急旋回しないようにする。
         S3_Data=s3.read()/S_K2;        //交差点通過中は急カーブを控える
@@ -126,7 +127,15 @@
         S6_Data=s6.read();
         S7_Data=s7.read();
         S8_Data=s8.read();                 
-    } 
+    } */
+        S1_Data=s1.read();
+        S2_Data=s2.read(); 
+        S3_Data=s3.read();
+        S4_Data=s4.read();
+        S5_Data=s5.read();
+        S6_Data=s6.read();
+        S7_Data=s7.read();
+        S8_Data=s8.read();          
 }
 
 //8つのフォトリフレクタの入力を8ビットのデジタルパターンに変換。センサの状態をデジタルパターンで
@@ -201,13 +210,13 @@
     //左右タイヤの走行距離の差分を用いた曲率演算
              /////左が右の一倍以上かつ左が右の1.2倍以下もしくは右は左の1倍以上かつ右が左の1.2倍以下の時
     if((((course_data[Row][0])>=(course_data[Row][1]*1.0f))&&((course_data[Row][0])<(course_data[Row][1]*HIGH_SPEED_SECTION)))
-      || (((course_data[Row][0])>=(course_data[Row][1]*1.0f))&&((course_data[Row][0])<(course_data[Row][1]*HIGH_SPEED_SECTION)))){
+      || (((course_data[Row][1])>=(course_data[Row][0]*1.0f))&&((course_data[Row][1])<(course_data[Row][0]*HIGH_SPEED_SECTION)))){
         Imaginary_Speed=High_Speed;//高速とする。    
     }else if((((course_data[Row][0])>=(course_data[Row][1]*HIGH_SPEED_SECTION))&&((course_data[Row][0])<(course_data[Row][1]*MEDIUM_SPEED_SECTION)))
-      || (((course_data[Row][0])>=(course_data[Row][1]*HIGH_SPEED_SECTION))&&((course_data[Row][0])<(course_data[Row][1]*MEDIUM_SPEED_SECTION)))){
+      || (((course_data[Row][1])>=(course_data[Row][0]*HIGH_SPEED_SECTION))&&((course_data[Row][1])<(course_data[Row][0]*MEDIUM_SPEED_SECTION)))){
         Imaginary_Speed=Medium_Speed;//中カーブは中速とする。
     }else if((((course_data[Row][0])>=(course_data[Row][1]*MEDIUM_SPEED_SECTION))&&((course_data[Row][0])<(course_data[Row][1]*LOW_SPEED_SECTION)))
-      || (((course_data[Row][0])>=(course_data[Row][1]*MEDIUM_SPEED_SECTION))&&((course_data[Row][0])<(course_data[Row][1]*LOW_SPEED_SECTION)))){
+      || (((course_data[Row][1])>=(course_data[Row][0]*MEDIUM_SPEED_SECTION))&&((course_data[Row][1])<(course_data[Row][0]*LOW_SPEED_SECTION)))){
         Imaginary_Speed=Low_Speed;//低速
     }
     else{
@@ -261,9 +270,9 @@
 void second_breaking(){
     Recent_Distance=Next_Marker_Distance
                     -(((Memory_Enc_Count_A*PULSE_TO_UM)+(Memory_Enc_Count_B*PULSE_TO_UM))/2);
-
+ 
     //現在速度がハイスピードで次のコースが急カーブであり、残り距離が---だったとき
-    if((course_data[Row][2]==High_Speed)&&(Next_Imaginary_Speed==Low_Speed)
+    if((course_data[Row][2]==High_Speed)&&(Next_Imaginary_Speed<Medium_Speed)
         &&(Recent_Distance<HL_BREAK_DISANCE)){
             Target_Speed_A=Low_Speed;
             Target_Speed_B=Low_Speed;
@@ -275,12 +284,12 @@
             Target_Speed_B=Medium_Speed;
     }
     //現在速度が中間速度で次のコースが急カーブであり、残り距離が---だったとき
-    else if((course_data[Row][2]==High_Speed)&&(Next_Imaginary_Speed==Low_Speed)
+    else if((course_data[Row][2]==High_Speed)&&(Next_Imaginary_Speed<Medium_Speed)
         &&(Recent_Distance<ML_BREAK_DISANCE)){
             Target_Speed_A=Low_Speed;
             Target_Speed_B=Low_Speed;
-    }    
-}
+    }
+}    
 
 /////LCD表示用関数。機体の現在状態を表示する。
 void display_print(void){
diff -r ac1821d7715f -r dfd006d3da79 tuning.h
--- a/tuning.h	Tue Nov 26 04:31:37 2019 +0000
+++ b/tuning.h	Wed Nov 27 07:55:12 2019 +0000
@@ -4,28 +4,28 @@
 ************************************/
 
 ////////機体速度関連
-#define     LOW_SPEED                800     //標準速度[mm/sec]
+#define     LOW_SPEED                875     //標準速度[mm/sec]
 #define     MEDIUM_SPEED             950     //2走目の中間速度[mm/sec]
-#define     HIGH_SPEED              1200     //2走目の高速速度[mm/sec]
+#define     HIGH_SPEED              1000     //2走目の高速速度[mm/sec]
 #define     STOP_DISTANCE         200000     //停止距離200000[um]⇒20[cm]
 #define     TURN_POWER              0.6f     //コースアウト時の旋回力
 
 
 ///////マーカ判定関連
-#define     DEFAULT_GRAY            0.5f     //フォトリフレクタデジタル入力の閾値
+#define     DEFAULT_GRAY            0.35f     //フォトリフレクタデジタル入力の閾値
                                              //シリアル通信でSensor_Digital値を確認し調整する。
-#define     MARKER_WIDTH            9000     //マーカ幅[um](ビニルテープ幅19000[um]以内)
+#define     MARKER_WIDTH            7150     //マーカ幅[um](ビニルテープ幅19000[um]以内)
                                              //コースの傷によってマーカ誤検知する場合は値を大きくする。
-#define     CROSS_JUDGE                3     //ラインセンサいくつ以上白線検知で交差点認識するか設定。
+#define     CROSS_JUDGE                4     //ラインセンサいくつ以上白線検知で交差点認識するか設定。
 
 
 //////ブレーキングシステム調整
-#define     HIGH_SPEED_SECTION     1.25f     //最高速度の左右回転差の上限倍率     
-#define     MEDIUM_SPEED_SECTION    2.0f     //中間速度の左右回転差の上限倍率
-#define     LOW_SPEED_SECTION       2.8f     //最低速度の左右回転差の上限倍率
-#define     HL_BREAK_DISANCE      200000     //高速度で次のカーブが低速カーブのときのブレーキング距離[um]
-#define     HM_BREAK_DISANCE      100000     //高速度で次のカーブが中間速度カーブのときのブレーキング距離[um]
-#define     ML_BREAK_DISANCE       50000     //中間速度で次のカーブが低速カーブのときのブレーキング距離[um]
+#define     HIGH_SPEED_SECTION      1.25f     //最高速度の左右回転差の上限倍率     
+#define     MEDIUM_SPEED_SECTION    1.35f     //中間速度の左右回転差の上限倍率
+#define     LOW_SPEED_SECTION       2.0f     //最低速度の左右回転差の上限倍率
+#define     HL_BREAK_DISANCE      245000     //高速度で次のカーブが低速カーブのときのブレーキング距離[um]
+#define     HM_BREAK_DISANCE      135000     //高速度で次のカーブが中間速度カーブのときのブレーキング距離[um]
+#define     ML_BREAK_DISANCE      30000     //中間速度で次のカーブが低速カーブのときのブレーキング距離[um]
 
 
 
@@ -36,22 +36,22 @@
 
 //フォトリフレクタのゲイン(外側に行くにつれ値を何倍させたいか調整する。)
 #define     S_K1                    1.0f     //float演算させる値には必ずfを付ける
-#define     S_K2                    2.0f     //2倍
+#define     S_K2                    2.1f     //2倍
 #define     S_K3                    3.0f     //3倍
 
 
 //ラインセンサ各種制御成分
 //P成分
-#define     S_KP_LOW                2.5f     //低速P成分
-#define     S_KP_MEDIUM             2.0f     //中速P成分
-#define     S_KP_HIGH               1.0f     //高速P成分
+#define     S_KP_LOW                0.8f     //低速P成分
+#define     S_KP_MEDIUM             0.6f     //中速P成分
+#define     S_KP_HIGH               0.7f     //高速P成分
 
 #define     S_KP_DEFAULT_HIGH       2.0f     //3走目P成分
 
 //D成分
-#define     S_KD_LOW                10.0f     //低速D成分
-#define     S_KD_MEDIUM             5.0f     //中速D成分
-#define     S_KD_HIGH               5.0f     //高速D成分
+#define     S_KD_LOW                1.0f     //低速D成分
+#define     S_KD_MEDIUM             0.8f     //中速D成分
+#define     S_KD_HIGH               0.5f     //高速D成分
 
-#define     S_KD_DEFAULT_HIGH       10.0f     //3走目D成分
+#define     S_KD_DEFAULT_HIGH       5.0f     //3走目D成分
 //////////☆★☆★☆★☆★☆★//////////////