Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed AQM0802 CRotaryEncoder TB6612FNG
Revision 33:dfd006d3da79, committed 2019-11-27
- 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成分
//////////☆★☆★☆★☆★☆★//////////////