玉田機体の調整

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
--- 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){
--- 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成分
 //////////☆★☆★☆★☆★☆★//////////////