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 30 15:10:17 2018 +0000
Revision:
33:13efae0ae6f4
Parent:
32:718efbf4dc8a
Child:
35:b1b00cfaa163
????????????????????????

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 31:7b003082f31d 18 ParameterManager::machine_id = 3;
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 33:13efae0ae6f4 31 #ifndef ON_INDICATER
alt0710 24:37a074e767c8 32 InterfaceManager::i2c.readIDMsg();
alt0710 33:13efae0ae6f4 33 #endif
alt0710 24:37a074e767c8 34
alt0710 0:d4b98dbcb767 35 while(1) {
alt0710 30:8ee22331bfaf 36 if(StatusManager::ball == 1)
alt0710 17:e5e7b19dd707 37 {
alt0710 17:e5e7b19dd707 38 InterfaceManager::LED = 1;
alt0710 17:e5e7b19dd707 39 }
alt0710 17:e5e7b19dd707 40 else
alt0710 17:e5e7b19dd707 41 {
alt0710 17:e5e7b19dd707 42 InterfaceManager::LED = 0;
alt0710 17:e5e7b19dd707 43 }
alt0710 24:37a074e767c8 44
alt0710 25:15f75825fc36 45 actmode.run();
alt0710 33:13efae0ae6f4 46 #if defined(MAIN_BORD_Ver_4) || defined(MAIN_BORD_Ver_5)
alt0710 33:13efae0ae6f4 47 //StatusManager::motTrqData.MotTrq_short = (short)DribMot_Current.getLPF_Out( (double)InterfaceManager::batVoltage.read_u16()); //*(float)3.3 * 1000) ; //[mNm]
alt0710 32:718efbf4dc8a 48 StatusManager::dribbleMotor_current = (float)DribMot_Current.getLPF_Out( ((double)InterfaceManager::dribbleMotor_current.read() - (double)0.4841) * (double)3.3 * (double)9.091 );
alt0710 25:15f75825fc36 49 //StatusManager::dribbleMotor_current = DribMot_Current.getLPF_Out( InterfaceManager::dribbleMotor_current.read());
alt0710 25:15f75825fc36 50
alt0710 24:37a074e767c8 51 StatusManager::req_dribbleMotor_PID = DribMot_PID.getPID_Out( StatusManager::req_dribbleMotor_current , StatusManager::dribbleMotor_current);
alt0710 30:8ee22331bfaf 52 // 指示0の時Duty出力を0にする 0.1Aは最低指示0.133以下であれば良い
alt0710 30:8ee22331bfaf 53 if(StatusManager::req_dribbleMotor_current < (float)0.1)
alt0710 30:8ee22331bfaf 54 {
alt0710 30:8ee22331bfaf 55 StatusManager::req_dribbleMotor_PID = 0.0;
alt0710 30:8ee22331bfaf 56 }
alt0710 30:8ee22331bfaf 57
alt0710 24:37a074e767c8 58 if( StatusManager::dribbleMotor_current > (float)JDG_TH_OVERCUR_DIRBMOT )
alt0710 24:37a074e767c8 59 {
alt0710 24:37a074e767c8 60 StatusManager::dribbleMot_OvrCur = 1;
alt0710 24:37a074e767c8 61 InterfaceManager::dribbleMotor.write((float)1.0 );
alt0710 24:37a074e767c8 62 }
alt0710 24:37a074e767c8 63 else
alt0710 24:37a074e767c8 64 {
alt0710 24:37a074e767c8 65 StatusManager::dribbleMot_OvrCur = 0;
alt0710 24:37a074e767c8 66 InterfaceManager::dribbleMotor.write((float)1.0 - StatusManager::req_dribbleMotor_PID * (float)0.01 );
alt0710 24:37a074e767c8 67 }
alt0710 25:15f75825fc36 68 #endif
alt0710 33:13efae0ae6f4 69 // t.stop();
alt0710 33:13efae0ae6f4 70 // StatusManager::DriveTime = (short)t.read_us();
alt0710 33:13efae0ae6f4 71 // t.reset();
alt0710 33:13efae0ae6f4 72 // t.start();
alt0710 24:37a074e767c8 73
alt0710 0:d4b98dbcb767 74 }
alt0710 0:d4b98dbcb767 75 }