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 02 02:47:35 2018 +0000
Revision:
30:8ee22331bfaf
Parent:
26:d626e7968063
Child:
31:7b003082f31d
ifdef???ver????????????LCD?BoardNo.???????????; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alt0710 0:d4b98dbcb767 1 #include "mbed.h"
alt0710 4:8c6f6b687303 2 #include "mode.h"
alt0710 0:d4b98dbcb767 3 #include "interface_manager.h"
alt0710 3:6f87cbec2ae8 4 #include "status_manager.h"
alt0710 3:6f87cbec2ae8 5 #include "parameter_manager.h"
alt0710 24:37a074e767c8 6 #include "fail_safe.h"
alt0710 24:37a074e767c8 7 #include "filter.h"
alt0710 24:37a074e767c8 8 #include "pid.h"
alt0710 24:37a074e767c8 9
alt0710 24:37a074e767c8 10 Timer t;
alt0710 24:37a074e767c8 11 LPF DribMot_Current(0.8);
alt0710 24:37a074e767c8 12 PID DribMot_PID(1.0,0.1,0.0,40.0,0.0);
alt0710 0:d4b98dbcb767 13
alt0710 0:d4b98dbcb767 14 int main() {
alt0710 0:d4b98dbcb767 15 init_interface();
alt0710 3:6f87cbec2ae8 16 init_status();
alt0710 4:8c6f6b687303 17
alt0710 23:0bb032ef1880 18 ParameterManager::machine_id = 2;
alt0710 3:6f87cbec2ae8 19
alt0710 7:1f1bdb4e4f33 20 ActMode actmode;
alt0710 23:0bb032ef1880 21 ParameterManager::raw_data.machine_id = ParameterManager::machine_id;
alt0710 23:0bb032ef1880 22 ParameterManager::raw_data.vphasor_value_of_machine = 0;
alt0710 23:0bb032ef1880 23 ParameterManager::raw_data.vphasor_angle_of_machine = 0;
alt0710 23:0bb032ef1880 24 ParameterManager::raw_data.vw_of_machine = 127;
alt0710 23:0bb032ef1880 25 ParameterManager::raw_data.actions_of_machine = 0;
alt0710 23:0bb032ef1880 26 ParameterManager::raw_data.power = 0;
alt0710 2:ba11cc8540d3 27
alt0710 23:0bb032ef1880 28 ParameterManager::machine_data.v_mm_per_sec = 0; //MAX:4m/s
alt0710 23:0bb032ef1880 29 ParameterManager::machine_data.angle_degree = 0;
alt0710 23:0bb032ef1880 30 ParameterManager::machine_data.vw_mrad_per_sec = 0;
alt0710 23:0bb032ef1880 31
alt0710 24:37a074e767c8 32 InterfaceManager::i2c.readIDMsg();
alt0710 24:37a074e767c8 33
alt0710 0:d4b98dbcb767 34 while(1) {
alt0710 30:8ee22331bfaf 35 if(StatusManager::ball == 1)
alt0710 17:e5e7b19dd707 36 {
alt0710 17:e5e7b19dd707 37 InterfaceManager::LED = 1;
alt0710 17:e5e7b19dd707 38 }
alt0710 17:e5e7b19dd707 39 else
alt0710 17:e5e7b19dd707 40 {
alt0710 17:e5e7b19dd707 41 InterfaceManager::LED = 0;
alt0710 17:e5e7b19dd707 42 }
alt0710 24:37a074e767c8 43
alt0710 25:15f75825fc36 44 actmode.run();
alt0710 26:d626e7968063 45 #if defined(MAIN_BORD_Ver_4) || defined(MAIN_BORD_Ver_5)
alt0710 25:15f75825fc36 46 StatusManager::dribbleMotor_current = DribMot_Current.getLPF_Out( (InterfaceManager::dribbleMotor_current.read() - (float)0.4841) * (float)3.3 * (float)9.091 );
alt0710 25:15f75825fc36 47 //StatusManager::dribbleMotor_current = DribMot_Current.getLPF_Out( InterfaceManager::dribbleMotor_current.read());
alt0710 25:15f75825fc36 48
alt0710 24:37a074e767c8 49 StatusManager::req_dribbleMotor_PID = DribMot_PID.getPID_Out( StatusManager::req_dribbleMotor_current , StatusManager::dribbleMotor_current);
alt0710 30:8ee22331bfaf 50 // 指示0の時Duty出力を0にする 0.1Aは最低指示0.133以下であれば良い
alt0710 30:8ee22331bfaf 51 if(StatusManager::req_dribbleMotor_current < (float)0.1)
alt0710 30:8ee22331bfaf 52 {
alt0710 30:8ee22331bfaf 53 StatusManager::req_dribbleMotor_PID = 0.0;
alt0710 30:8ee22331bfaf 54 }
alt0710 30:8ee22331bfaf 55
alt0710 24:37a074e767c8 56 if( StatusManager::dribbleMotor_current > (float)JDG_TH_OVERCUR_DIRBMOT )
alt0710 24:37a074e767c8 57 {
alt0710 24:37a074e767c8 58 StatusManager::dribbleMot_OvrCur = 1;
alt0710 24:37a074e767c8 59 InterfaceManager::dribbleMotor.write((float)1.0 );
alt0710 24:37a074e767c8 60 }
alt0710 24:37a074e767c8 61 else
alt0710 24:37a074e767c8 62 {
alt0710 24:37a074e767c8 63 StatusManager::dribbleMot_OvrCur = 0;
alt0710 24:37a074e767c8 64 InterfaceManager::dribbleMotor.write((float)1.0 - StatusManager::req_dribbleMotor_PID * (float)0.01 );
alt0710 24:37a074e767c8 65 }
alt0710 25:15f75825fc36 66 #endif
alt0710 24:37a074e767c8 67 t.stop();
alt0710 25:15f75825fc36 68 StatusManager::DriveTime = (short)t.read_us();
alt0710 24:37a074e767c8 69 t.reset();
alt0710 25:15f75825fc36 70 t.start();
alt0710 24:37a074e767c8 71
alt0710 0:d4b98dbcb767 72 }
alt0710 0:d4b98dbcb767 73 }