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: actuator/kicker.cpp
- Revision:
- 10:9cd22f673968
- Parent:
- 6:21b3fbe57b88
- Child:
- 15:2bf8eafacef8
diff -r 41d5c728aa78 -r 9cd22f673968 actuator/kicker.cpp --- a/actuator/kicker.cpp Sun Apr 30 16:14:08 2017 +0000 +++ b/actuator/kicker.cpp Tue May 02 07:54:05 2017 +0000 @@ -44,7 +44,10 @@ power(0), f_charge(0), isRelease(0), - fireTime(0) + fireTime(0), + count_continue_delay(0), + count_num_of_kick(0), + mode_discharge(0) { } @@ -60,7 +63,7 @@ checkKickEnable(); if(kickPermit == ENABLE) { - fireKick(); + fireKick(kickType, power); } } } @@ -80,22 +83,22 @@ StatusManager::req_charge = f_charge; } -void Kicker::fireKick(void) +void Kicker::fireKick(char t_KickType,char t_power) { - switch(kickType) + switch(t_KickType) { case STRAIGHT: InterfaceManager::charge_request = 0; StatusManager::is_kicking = 1; InterfaceManager::straight_kick = 1; - driveFireTimer(ParameterManager::kickpower.getChipPowerTime(power)); + driveFireTimer(ParameterManager::kickpower.getChipPowerTime(t_power)); break; case CHIP: InterfaceManager::charge_request = 0; StatusManager::is_kicking = 1; InterfaceManager::chip_kick = 1; - driveFireTimer(ParameterManager::kickpower.getStraightPowerTime(power)); + driveFireTimer(ParameterManager::kickpower.getStraightPowerTime(t_power)); break; default: @@ -105,6 +108,43 @@ } } +void Kicker::forceFireKick(void) +{ + + + if( InterfaceManager::button.getButtonStatus(CROSS_DOWN) == 1 ){ + mode_discharge = 1; + } + + if( mode_discharge == 0 ){ + count_continue_delay = 0; + count_num_of_kick = 0; + return; + } + + if( count_num_of_kick > NUM_OF_KICK ){ + mode_discharge = 0; + return; + } + + if( StatusManager::is_kicking == 1 ){ + return; + } + + if( count_continue_delay < CONTINUE_DELAY ){ + count_continue_delay ++; + return; + } + + count_continue_delay = 0; + fireKick(STRAIGHT, 10); + StatusManager::is_kicking = 1; + InterfaceManager::charge_request = 0; + + count_num_of_kick++; + +} + void Kicker::checkKickEnable(void) { checkChargeCompleted(); //f_charge_fin