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

Committer:
alt0710
Date:
Wed May 03 16:06:14 2017 +0000
Revision:
15:2bf8eafacef8
Parent:
14:f6cc949a8046
Child:
16:e8060a65ed23
Child:
19:0bbd90be9aa3
?????????; CROSS_UP????OFF

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alt0710 14:f6cc949a8046 1
alt0710 14:f6cc949a8046 2 #include "mbed.h"
alt0710 14:f6cc949a8046 3 #include "comm.h"
alt0710 14:f6cc949a8046 4 #include "mode.h"
alt0710 14:f6cc949a8046 5 #include "interface_manager.h"
alt0710 14:f6cc949a8046 6 #include "status_manager.h"
alt0710 14:f6cc949a8046 7 #include "parameter_manager.h"
alt0710 14:f6cc949a8046 8 #include "operation_check.h"
alt0710 14:f6cc949a8046 9
alt0710 14:f6cc949a8046 10 /* **mbedクラス** */
alt0710 14:f6cc949a8046 11 #ifdef LPC4088
alt0710 14:f6cc949a8046 12
alt0710 14:f6cc949a8046 13 #elif STM32
alt0710 14:f6cc949a8046 14
alt0710 14:f6cc949a8046 15 #endif
alt0710 14:f6cc949a8046 16
alt0710 14:f6cc949a8046 17 /* **ローカル関数定義** */
alt0710 14:f6cc949a8046 18
alt0710 14:f6cc949a8046 19 /* **ローカル関数** */
alt0710 14:f6cc949a8046 20
alt0710 14:f6cc949a8046 21 /* **グルーバル関数** */
alt0710 14:f6cc949a8046 22
alt0710 14:f6cc949a8046 23 /* **クラス** */
alt0710 14:f6cc949a8046 24 class InterfaceManager;
alt0710 14:f6cc949a8046 25 class StatusManager;
alt0710 14:f6cc949a8046 26 class ParameterManager;
alt0710 14:f6cc949a8046 27
alt0710 14:f6cc949a8046 28
alt0710 14:f6cc949a8046 29 //メンバ変数の初期化は、定義順(Warningになる)
alt0710 14:f6cc949a8046 30 OperationCheck::OperationCheck()
alt0710 15:2bf8eafacef8 31 :sideSW_num(0),
alt0710 15:2bf8eafacef8 32 charge_flag(0),
alt0710 15:2bf8eafacef8 33 kick_flag(0),
alt0710 15:2bf8eafacef8 34 power(0)
alt0710 14:f6cc949a8046 35 {
alt0710 14:f6cc949a8046 36 }
alt0710 14:f6cc949a8046 37
alt0710 14:f6cc949a8046 38 void OperationCheck::run(void)
alt0710 14:f6cc949a8046 39 {
alt0710 15:2bf8eafacef8 40 //充電:左
alt0710 15:2bf8eafacef8 41 //強制放電:下
alt0710 15:2bf8eafacef8 42 //キック:上
alt0710 15:2bf8eafacef8 43 /* ***************** 充電 ******************************* */
alt0710 15:2bf8eafacef8 44 if(InterfaceManager::button.getButtonStatus(CROSS_LEFT))
alt0710 15:2bf8eafacef8 45 {
alt0710 15:2bf8eafacef8 46 charge_flag = 1;
alt0710 15:2bf8eafacef8 47 }
alt0710 15:2bf8eafacef8 48 if(StatusManager::is_kicking == 1)
alt0710 15:2bf8eafacef8 49 {
alt0710 15:2bf8eafacef8 50 charge_flag = 0;
alt0710 15:2bf8eafacef8 51 kick_flag = 0;
alt0710 15:2bf8eafacef8 52 }
alt0710 14:f6cc949a8046 53
alt0710 15:2bf8eafacef8 54 /* ***************** キック ******************************* */
alt0710 15:2bf8eafacef8 55 if(InterfaceManager::button.getButtonStatus(CROSS_UP))
alt0710 15:2bf8eafacef8 56 {
alt0710 15:2bf8eafacef8 57 kick_flag = 1;
alt0710 15:2bf8eafacef8 58 }
alt0710 15:2bf8eafacef8 59
alt0710 15:2bf8eafacef8 60 /* ***************** 威力 ******************************* */
alt0710 15:2bf8eafacef8 61 if(InterfaceManager::button.getButtonStatus(CROSS_RIGHT))
alt0710 15:2bf8eafacef8 62 {
alt0710 15:2bf8eafacef8 63 power++;
alt0710 15:2bf8eafacef8 64 if(power > 16)
alt0710 15:2bf8eafacef8 65 {
alt0710 15:2bf8eafacef8 66 power = 0;
alt0710 15:2bf8eafacef8 67 }
alt0710 15:2bf8eafacef8 68 }
alt0710 15:2bf8eafacef8 69
alt0710 15:2bf8eafacef8 70 /* ***************** 強制放電 ***************************** */
alt0710 15:2bf8eafacef8 71 kicker.setCharge(charge_flag);
alt0710 15:2bf8eafacef8 72
alt0710 15:2bf8eafacef8 73
alt0710 15:2bf8eafacef8 74 kicker.setKick(kick_flag, STRAIGHT, power);
alt0710 15:2bf8eafacef8 75 kicker.forceFireKick();
alt0710 15:2bf8eafacef8 76
alt0710 15:2bf8eafacef8 77 //createLcdData();
alt0710 15:2bf8eafacef8 78 sprintf(str,"C:%d F:%d\nP:%d",charge_flag,kick_flag,power);
alt0710 15:2bf8eafacef8 79 //sprintf(str,"Hello");
alt0710 14:f6cc949a8046 80 InterfaceManager::i2c.setLCDMsg(str,sizeof(str));
alt0710 14:f6cc949a8046 81
alt0710 14:f6cc949a8046 82 }
alt0710 14:f6cc949a8046 83
alt0710 14:f6cc949a8046 84 void OperationCheck::createLcdData(void)
alt0710 14:f6cc949a8046 85 {
alt0710 14:f6cc949a8046 86
alt0710 14:f6cc949a8046 87 /*
alt0710 14:f6cc949a8046 88
alt0710 14:f6cc949a8046 89 * 0 : 正常終了
alt0710 14:f6cc949a8046 90
alt0710 14:f6cc949a8046 91 * -1 : タイムアウト
alt0710 14:f6cc949a8046 92
alt0710 14:f6cc949a8046 93 * -2 : オーバーランエラー
alt0710 14:f6cc949a8046 94
alt0710 14:f6cc949a8046 95 * -3 : フレーミングエラー
alt0710 14:f6cc949a8046 96
alt0710 14:f6cc949a8046 97 * 1 : 受信中
alt0710 14:f6cc949a8046 98
alt0710 14:f6cc949a8046 99 * 2 : フレームリーダー1まで受信
alt0710 14:f6cc949a8046 100
alt0710 14:f6cc949a8046 101 * 3 : フレームリーダー2まで受信
alt0710 14:f6cc949a8046 102
alt0710 14:f6cc949a8046 103 * 4 : マシンIDまで受信
alt0710 14:f6cc949a8046 104
alt0710 14:f6cc949a8046 105 */
alt0710 14:f6cc949a8046 106 switch(StatusManager::uart){
alt0710 14:f6cc949a8046 107 case 0:
alt0710 14:f6cc949a8046 108 sprintf(str,"ID%d EN:\nComplete",ParameterManager::machine_id);
alt0710 14:f6cc949a8046 109
alt0710 14:f6cc949a8046 110 break;
alt0710 14:f6cc949a8046 111
alt0710 14:f6cc949a8046 112 case 1:
alt0710 14:f6cc949a8046 113 break;
alt0710 14:f6cc949a8046 114
alt0710 14:f6cc949a8046 115 case 2:
alt0710 14:f6cc949a8046 116 sprintf(str,"ID%d EN:\nHeader1",ParameterManager::machine_id);
alt0710 14:f6cc949a8046 117
alt0710 14:f6cc949a8046 118 break;
alt0710 14:f6cc949a8046 119
alt0710 14:f6cc949a8046 120 case 3:
alt0710 14:f6cc949a8046 121 sprintf(str,"ID%d EN:\nHeader2",ParameterManager::machine_id);
alt0710 14:f6cc949a8046 122
alt0710 14:f6cc949a8046 123 break;
alt0710 14:f6cc949a8046 124
alt0710 14:f6cc949a8046 125 case 4:
alt0710 14:f6cc949a8046 126 sprintf(str,"ID%d EN:\nCheckER1",ParameterManager::machine_id);
alt0710 14:f6cc949a8046 127
alt0710 14:f6cc949a8046 128 break;
alt0710 14:f6cc949a8046 129
alt0710 14:f6cc949a8046 130 case 5:
alt0710 14:f6cc949a8046 131 sprintf(str,"ID%d EN:\nCheckER2",ParameterManager::machine_id);
alt0710 14:f6cc949a8046 132
alt0710 14:f6cc949a8046 133 break;
alt0710 14:f6cc949a8046 134
alt0710 14:f6cc949a8046 135 case -1:
alt0710 14:f6cc949a8046 136 sprintf(str,"ID%d EN:\nTimeOut",ParameterManager::machine_id);
alt0710 14:f6cc949a8046 137
alt0710 14:f6cc949a8046 138 break;
alt0710 14:f6cc949a8046 139
alt0710 14:f6cc949a8046 140 case -2:
alt0710 14:f6cc949a8046 141 sprintf(str,"ID%d EN:\nOERR",ParameterManager::machine_id);
alt0710 14:f6cc949a8046 142
alt0710 14:f6cc949a8046 143 break;
alt0710 14:f6cc949a8046 144
alt0710 14:f6cc949a8046 145 case -3:
alt0710 14:f6cc949a8046 146 sprintf(str,"ID%d EN:\nFERR",ParameterManager::machine_id);
alt0710 14:f6cc949a8046 147
alt0710 14:f6cc949a8046 148 break;
alt0710 14:f6cc949a8046 149
alt0710 14:f6cc949a8046 150 default:
alt0710 14:f6cc949a8046 151 sprintf(str,"ID%d EN: \n %d",ParameterManager::machine_id, StatusManager::uart);
alt0710 14:f6cc949a8046 152 break;
alt0710 14:f6cc949a8046 153 }
alt0710 14:f6cc949a8046 154
alt0710 14:f6cc949a8046 155 }