RobocupSSLのメイン基板白mbedのプログラム

Dependencies:   mbed

Rootsロボット mainプログラム

~ Robocup SSL(小型車輪リーグ)ロボット ~


Robocup SSLとは


●試合構成
Robocup小型ロボットリーグ(Small Size League)は,直径180[mm],高さ150[mm]以内のサイズのロボット6台が1チームとなり,オレンジ色のゴルフボールを使ってサッカー競技を行う自立型ロボットコンテストである. フィールドの上には2台のWebカメラが設置され,フィールド上のロボットとボールを撮影する.Visionサーバは,フィールドの画像データよりロボットとボールの座標データを算出し,LANを用い各チームのAI用PCに送信する.Webカメラの撮影速度は,60[fps]である.レフリーボックスは,ファウルやフリーキック,スローインなどの審判の判定を入力し,LANを通じて各チームのAI用PCに送信する.それぞれのチームのAI用PCは,ロボットとボールの座標,審判の判定を元にロボットの移動,キックなどの作戦を決定し,無線によってロボットに指令を送信する. 700


ロボット機能紹介


●オムニホイールによる方向転換不要の全方位移動

オムニホイールは,自由に回転可能なローラをホイールの外周上に配置した車輪である.ローラの回転により,車輪の回転と垂直の方向に駆動力を発することはできないが移動は可能となる.各車輪の角速度を調整することによって全方向への移動を可能にする.
400

●ドリブルバーのバックスピンによるボール保持

●電磁力を利用したキッカー

●キッカーの電磁力エネルギーを充電する充電回路

●ロボット情報が一目でわかるLCD

Revision:
29:4607c59702a1
Parent:
28:eab9de9eb81a
Child:
30:8ee22331bfaf
diff -r eab9de9eb81a -r 4607c59702a1 interface/button/button_roots.cpp
--- a/interface/button/button_roots.cpp	Tue May 01 02:52:12 2018 +0000
+++ b/interface/button/button_roots.cpp	Tue May 01 06:38:42 2018 +0000
@@ -9,36 +9,41 @@
 #ifdef LPC4088
 
 #elif  STM32
-    #ifdef MAIN_BORD_Ver_4
-    //CrossSelectSW
-    DigitalIn Mode_SW1(A2);
-    DigitalIn Mode_SW2(A3);   
-    InterruptIn CrossSW_UP(D9);   //EXT2
-    InterruptIn CrossSW_LEFT(D7);  //PUSH D7
-    //InterruptIn CrossSW_DOWN(D9);  //KICK
-    DigitalIn   DUMY(D8);  //KICK
-    InterruptIn CrossSW_RIGHT(A1); //EXT   
-    #elif MAIN_BORD_Ver_5
+//    #if defined(MAIN_BORD_Ver_4)
+//    //CrossSelectSW
+//    DigitalIn Mode_SW1(A2);
+//    DigitalIn Mode_SW2(A3);   
+//    InterruptIn CrossSW_UP(D9);   //EXT2
+//    InterruptIn CrossSW_LEFT(D7);  //PUSH D7
+//    //InterruptIn CrossSW_DOWN(D9);  //KICK
+//    DigitalIn   DUMY(D8);  //KICK
+//    InterruptIn CrossSW_RIGHT(A1); //EXT   
+//    #elif defined(MAIN_BORD_Ver_5)
     //SWの配置が変わったので使いやすい構成にかえる
     //CrossSelectSW
     DigitalIn Mode_SW1(A2);
     DigitalIn Mode_SW2(A3);   
+    #ifndef MAIN_BORD_Ver_5
     InterruptIn CrossSW_UP(D9);   //EXT2
+    #else
+    DigitalIn UP(D9);
+    #endif
     InterruptIn CrossSW_LEFT(D7);  //PUSH D7
     //InterruptIn CrossSW_DOWN(D9);  //KICK
     DigitalIn   DUMY(A1);  //KICK
+    
     InterruptIn CrossSW_RIGHT(D8); //EXT   
-    #else 
-    //ModeSelectSW
-    DigitalIn Mode_SW1(A3);
-    DigitalIn Mode_SW2(A2);
-    //CrossSelectSW
-    InterruptIn CrossSW_UP(D11);   //EXT2
-    InterruptIn CrossSW_LEFT(D7);  //PUSH D7
-    //InterruptIn CrossSW_DOWN(D9);  //KICK
-    DigitalIn   DUMY(D8);  //KICK
-    InterruptIn CrossSW_RIGHT(A1); //EXT
-    #endif
+//    #else 
+//    //ModeSelectSW
+//    DigitalIn Mode_SW1(A3);
+//    DigitalIn Mode_SW2(A2);
+//    //CrossSelectSW
+//    InterruptIn CrossSW_UP(D11);   //EXT2
+//    InterruptIn CrossSW_LEFT(D7);  //PUSH D7
+//    //InterruptIn CrossSW_DOWN(D9);  //KICK
+//    DigitalIn   DUMY(D8);  //KICK
+//    InterruptIn CrossSW_RIGHT(A1); //EXT
+//    #endif
 #endif
 
 DigitalOut myled(LED1);
@@ -49,7 +54,7 @@
 Ticker t_right;
 
 /* **ローカル割り込み関数** */
-
+#ifndef MAIN_BORD_Ver_5
 void check_click_up(void)
 {
     if(InterfaceManager::button.count_click[0]  ==  1)
@@ -64,6 +69,7 @@
     t_up.detach();
     
 }
+#endif
 //void check_click_down(void)
 //{
 //    if(InterfaceManager::button.count_click[1]  ==  1)
@@ -105,6 +111,7 @@
     
 }
 
+#ifndef MAIN_BORD_Ver_5
 void click_up(void)
 {
     myled = !myled;
@@ -124,6 +131,7 @@
     }  
     
 }
+#endif
 //void click_down(void)
 //{
 //    myled = !myled;
@@ -189,15 +197,24 @@
     Mode_SW1.mode(PullDown);
     Mode_SW2.mode(PullDown);
     
+    #ifndef MAIN_BORD_Ver_5
     CrossSW_UP.mode(PullNone);
+    #else
+    UP.mode(PullNone);
+    #endif
     //CrossSW_DOWN.mode(PullNone);
     DUMY.mode(PullNone);
     CrossSW_LEFT.mode(PullNone);
     CrossSW_RIGHT.mode(PullNone);   
     
     //入力割り込み設定
+    #ifndef MAIN_BORD_Ver_5
     CrossSW_UP.fall(&click_up);
+    #else
+    
+    #endif   
     CrossSW_LEFT.fall(&click_left);
+
     //CrossSW_DOWN.rise(&click_down);
     CrossSW_RIGHT.fall(&click_right);
     
@@ -229,8 +246,18 @@
         return modeSW;
         
         case CROSS_UP:
+        #ifndef MAIN_BORD_Ver_5
         button_status   = crossUp;
         crossUp         = 0;
+        #else
+        if( (!UP) && (cross_up_old == 1) ){
+            is_button_pushed_up    = 1;
+        }else{
+            is_button_pushed_up    = 0;
+        }
+        cross_up_old   = !UP;
+        button_status   = is_button_pushed_up;
+        #endif
         return button_status;      
 
         case CROSS_DOWN: