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:
5:4be30999853f
Parent:
4:8c6f6b687303
Child:
6:21b3fbe57b88
--- a/interface/button/button_roots.cpp	Tue Apr 25 11:45:41 2017 +0000
+++ b/interface/button/button_roots.cpp	Tue Apr 25 14:51:03 2017 +0000
@@ -16,13 +16,16 @@
 //CrossSelectSW
 InterruptIn CrossSW_UP(D11);   //EXT2
 InterruptIn CrossSW_LEFT(D7);  //PUSH
-InterruptIn CrossSW_DOWN(D8);  //KICK
+InterruptIn CrossSW_DOWN(D9);  //KICK
+DigitalIn   DUMY(D8);  //KICK
 InterruptIn CrossSW_RIGHT(A1); //EXT
 #endif
 
+DigitalOut myled(LED1);
+
 Ticker t_up;
+Ticker t_left;
 Ticker t_down;
-Ticker t_left;
 Ticker t_right;
 
 /* **ローカル割り込み関数** */
@@ -84,6 +87,7 @@
 
 void click_up(void)
 {
+    myled = !myled;
     switch(InterfaceManager::button.count_click[0]){
         case 0:
         t_up.attach(check_click_up, CHECK_TIME);
@@ -102,6 +106,7 @@
 }
 void click_down(void)
 {
+    myled = !myled;
     switch(InterfaceManager::button.count_click[1]){
         case 0:
         t_down.attach(check_click_down, CHECK_TIME);
@@ -120,6 +125,7 @@
 }
 void click_left(void)
 {
+    myled = !myled;
     switch(InterfaceManager::button.count_click[2]){
         case 0:
         t_left.attach(check_click_left, CHECK_TIME);
@@ -138,6 +144,7 @@
 }
 void click_right(void)
 {
+    myled = !myled;
     switch(InterfaceManager::button.count_click[3]){
         case 0:
         t_right.attach(check_click_right, CHECK_TIME);
@@ -162,16 +169,17 @@
     Mode_SW1.mode(PullDown);
     Mode_SW2.mode(PullDown);
     
-    CrossSW_UP.mode(PullDown);
-    CrossSW_DOWN.mode(PullDown);
-    CrossSW_LEFT.mode(PullDown);
-    CrossSW_RIGHT.mode(PullDown);   
+    CrossSW_UP.mode(PullNone);
+    CrossSW_DOWN.mode(PullNone);
+    DUMY.mode(PullNone);
+    CrossSW_LEFT.mode(PullNone);
+    CrossSW_RIGHT.mode(PullNone);   
     
     //入力割り込み設定
-    CrossSW_UP.rise(&click_up);
+    CrossSW_UP.fall(&click_up);
+    CrossSW_LEFT.fall(&click_left);
     CrossSW_DOWN.rise(&click_down);
-    CrossSW_LEFT.rise(&click_left);
-    CrossSW_RIGHT.rise(&click_right);
+    CrossSW_RIGHT.fall(&click_right);
     
 }
 
@@ -202,16 +210,30 @@
         return modeSW;
         
         case CROSS_UP:
-        return crossUp;      
+        button_status   = crossUp;
+        crossUp         = 0;
+        return button_status;      
 
         case CROSS_DOWN:
-        return crossDown;
+        if( (!DUMY) && (cross_down_old == 1) ){
+            is_button_pushed    = 1;
+        }else{
+            is_button_pushed    = 0;
+        }
+        cross_down_old   = !DUMY;
+        button_status   = is_button_pushed;
+        //crossDown       = 0;
+        return button_status;
         
         case CROSS_LEFT:
-        return crossLeft;        
+        button_status   = crossLeft;
+        crossLeft       = 0;
+        return button_status;        
 
         case CROSS_RIGHT:
-        return crossRight;
+        button_status   = crossRight;
+        crossRight      = 0;
+        return button_status;
         
         default:
         return 99;