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:
- 16:e8060a65ed23
- Parent:
- 15:2bf8eafacef8
- Child:
- 23:0bb032ef1880
--- a/interface/button/button_roots.cpp Wed May 03 16:06:14 2017 +0000 +++ b/interface/button/button_roots.cpp Thu May 04 07:47:48 2017 +0000 @@ -14,7 +14,7 @@ DigitalIn Mode_SW2(A2); //CrossSelectSW -//InterruptIn CrossSW_UP(D11); //EXT2 +InterruptIn CrossSW_UP(D11); //EXT2 InterruptIn CrossSW_LEFT(D7); //PUSH D7 //InterruptIn CrossSW_DOWN(D9); //KICK DigitalIn DUMY(D8); //KICK @@ -30,20 +30,20 @@ /* **ローカル割り込み関数** */ -//void check_click_up(void) -//{ -// if(InterfaceManager::button.count_click[0] == 1) -// { -// InterfaceManager::button.setButtunStatus(CROSS_UP, SINGLE_CLICK); -// } -// else if(InterfaceManager::button.count_click[0] == 2) -// { -// InterfaceManager::button.setButtunStatus(CROSS_UP, DOUBLE_CLICK); -// } -// InterfaceManager::button.count_click[0] = 0; -// t_up.detach(); -// -//} +void check_click_up(void) +{ + if(InterfaceManager::button.count_click[0] == 1) + { + InterfaceManager::button.setButtunStatus(CROSS_UP, SINGLE_CLICK); + } + else if(InterfaceManager::button.count_click[0] == 2) + { + InterfaceManager::button.setButtunStatus(CROSS_UP, DOUBLE_CLICK); + } + InterfaceManager::button.count_click[0] = 0; + t_up.detach(); + +} //void check_click_down(void) //{ // if(InterfaceManager::button.count_click[1] == 1) @@ -85,25 +85,25 @@ } -//void click_up(void) -//{ -// myled = !myled; -// switch(InterfaceManager::button.count_click[0]){ -// case 0: -// t_up.attach(check_click_up, CHECK_TIME); -// InterfaceManager::button.count_click[0]++; -// break; -// -// case 1: -// InterfaceManager::button.count_click[0]++; -// break; -// -// default: -// InterfaceManager::button.count_click[0] = 0; -// break; -// } -// -//} +void click_up(void) +{ + myled = !myled; + switch(InterfaceManager::button.count_click[0]){ + case 0: + t_up.attach(check_click_up, CHECK_TIME); + InterfaceManager::button.count_click[0]++; + break; + + case 1: + InterfaceManager::button.count_click[0]++; + break; + + default: + InterfaceManager::button.count_click[0] = 0; + break; + } + +} //void click_down(void) //{ // myled = !myled; @@ -169,14 +169,14 @@ Mode_SW1.mode(PullDown); Mode_SW2.mode(PullDown); - //CrossSW_UP.mode(PullNone); + CrossSW_UP.mode(PullNone); //CrossSW_DOWN.mode(PullNone); DUMY.mode(PullNone); CrossSW_LEFT.mode(PullNone); CrossSW_RIGHT.mode(PullNone); //入力割り込み設定 - //CrossSW_UP.fall(&click_up); + CrossSW_UP.fall(&click_up); CrossSW_LEFT.fall(&click_left); //CrossSW_DOWN.rise(&click_down); CrossSW_RIGHT.fall(&click_right);