RobocupSSLのメイン基板白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は,ロボットとボールの座標,審判の判定を元にロボットの移動,キックなどの作戦を決定し,無線によってロボットに指令を送信する.
ロボット機能紹介
●オムニホイールによる方向転換不要の全方位移動
オムニホイールは,自由に回転可能なローラをホイールの外周上に配置した車輪である.ローラの回転により,車輪の回転と垂直の方向に駆動力を発することはできないが移動は可能となる.各車輪の角速度を調整することによって全方向への移動を可能にする.
●ドリブルバーのバックスピンによるボール保持
●電磁力を利用したキッカー
●キッカーの電磁力エネルギーを充電する充電回路
●ロボット情報が一目でわかるLCD
Diff: interface/button/button_roots.cpp
- Revision:
- 30:8ee22331bfaf
- Parent:
- 29:4607c59702a1
--- a/interface/button/button_roots.cpp Tue May 01 06:38:42 2018 +0000 +++ b/interface/button/button_roots.cpp Wed May 02 02:47:35 2018 +0000 @@ -9,41 +9,36 @@ #ifdef LPC4088 #elif STM32 -// #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); + #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); + InterruptIn CrossSW_UP(D9); //EXT2 + InterruptIn CrossSW_LEFT(D7); //PUSH D7 + //InterruptIn CrossSW_DOWN(D9); //KICK + DigitalIn DUMY(A1); //KICK + InterruptIn CrossSW_RIGHT(D8); //EXT + #elif defined(MAIN_BORD_Ver_3) + //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 - 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 #endif DigitalOut myled(LED1); @@ -54,7 +49,7 @@ Ticker t_right; /* **ローカル割り込み関数** */ -#ifndef MAIN_BORD_Ver_5 +//#ifndef MAIN_BORD_Ver_5 void check_click_up(void) { if(InterfaceManager::button.count_click[0] == 1) @@ -69,7 +64,7 @@ t_up.detach(); } -#endif +//#endif //void check_click_down(void) //{ // if(InterfaceManager::button.count_click[1] == 1) @@ -111,7 +106,7 @@ } -#ifndef MAIN_BORD_Ver_5 +//#ifndef MAIN_BORD_Ver_5 void click_up(void) { myled = !myled; @@ -131,7 +126,7 @@ } } -#endif +//#endif //void click_down(void) //{ // myled = !myled; @@ -197,22 +192,22 @@ Mode_SW1.mode(PullDown); Mode_SW2.mode(PullDown); - #ifndef MAIN_BORD_Ver_5 + //#ifndef MAIN_BORD_Ver_5 CrossSW_UP.mode(PullNone); - #else - UP.mode(PullNone); - #endif + //#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 + //#ifndef MAIN_BORD_Ver_5 CrossSW_UP.fall(&click_up); - #else + //#else - #endif + //#endif CrossSW_LEFT.fall(&click_left); //CrossSW_DOWN.rise(&click_down); @@ -246,18 +241,18 @@ return modeSW; case CROSS_UP: - #ifndef MAIN_BORD_Ver_5 +// #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 +// #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: