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:
Sun Sep 22 10:23:42 2019 +0000
Revision:
35:b1b00cfaa163
Parent:
33:13efae0ae6f4
2019JapanOpenSoft

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 35:b1b00cfaa163 10 //2019年JapanOpenソフト
alt0710 35:b1b00cfaa163 11
alt0710 24:37a074e767c8 12 Timer t;
alt0710 24:37a074e767c8 13 LPF DribMot_Current(0.8);
alt0710 24:37a074e767c8 14 PID DribMot_PID(1.0,0.1,0.0,40.0,0.0);
alt0710 0:d4b98dbcb767 15
alt0710 0:d4b98dbcb767 16 int main() {
alt0710 0:d4b98dbcb767 17 init_interface();
alt0710 3:6f87cbec2ae8 18 init_status();
alt0710 4:8c6f6b687303 19
alt0710 31:7b003082f31d 20 ParameterManager::machine_id = 3;
alt0710 3:6f87cbec2ae8 21
alt0710 7:1f1bdb4e4f33 22 ActMode actmode;
alt0710 23:0bb032ef1880 23 ParameterManager::raw_data.machine_id = ParameterManager::machine_id;
alt0710 23:0bb032ef1880 24 ParameterManager::raw_data.vphasor_value_of_machine = 0;
alt0710 23:0bb032ef1880 25 ParameterManager::raw_data.vphasor_angle_of_machine = 0;
alt0710 23:0bb032ef1880 26 ParameterManager::raw_data.vw_of_machine = 127;
alt0710 23:0bb032ef1880 27 ParameterManager::raw_data.actions_of_machine = 0;
alt0710 23:0bb032ef1880 28 ParameterManager::raw_data.power = 0;
alt0710 2:ba11cc8540d3 29
alt0710 23:0bb032ef1880 30 ParameterManager::machine_data.v_mm_per_sec = 0; //MAX:4m/s
alt0710 23:0bb032ef1880 31 ParameterManager::machine_data.angle_degree = 0;
alt0710 23:0bb032ef1880 32 ParameterManager::machine_data.vw_mrad_per_sec = 0;
alt0710 33:13efae0ae6f4 33 #ifndef ON_INDICATER
alt0710 24:37a074e767c8 34 InterfaceManager::i2c.readIDMsg();
alt0710 33:13efae0ae6f4 35 #endif
alt0710 24:37a074e767c8 36
alt0710 0:d4b98dbcb767 37 while(1) {
alt0710 30:8ee22331bfaf 38 if(StatusManager::ball == 1)
alt0710 17:e5e7b19dd707 39 {
alt0710 17:e5e7b19dd707 40 InterfaceManager::LED = 1;
alt0710 17:e5e7b19dd707 41 }
alt0710 17:e5e7b19dd707 42 else
alt0710 17:e5e7b19dd707 43 {
alt0710 17:e5e7b19dd707 44 InterfaceManager::LED = 0;
alt0710 17:e5e7b19dd707 45 }
alt0710 24:37a074e767c8 46
alt0710 25:15f75825fc36 47 actmode.run();
alt0710 33:13efae0ae6f4 48 #if defined(MAIN_BORD_Ver_4) || defined(MAIN_BORD_Ver_5)
alt0710 33:13efae0ae6f4 49 //StatusManager::motTrqData.MotTrq_short = (short)DribMot_Current.getLPF_Out( (double)InterfaceManager::batVoltage.read_u16()); //*(float)3.3 * 1000) ; //[mNm]
alt0710 32:718efbf4dc8a 50 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 51 //StatusManager::dribbleMotor_current = DribMot_Current.getLPF_Out( InterfaceManager::dribbleMotor_current.read());
alt0710 25:15f75825fc36 52
alt0710 24:37a074e767c8 53 StatusManager::req_dribbleMotor_PID = DribMot_PID.getPID_Out( StatusManager::req_dribbleMotor_current , StatusManager::dribbleMotor_current);
alt0710 30:8ee22331bfaf 54 // 指示0の時Duty出力を0にする 0.1Aは最低指示0.133以下であれば良い
alt0710 30:8ee22331bfaf 55 if(StatusManager::req_dribbleMotor_current < (float)0.1)
alt0710 30:8ee22331bfaf 56 {
alt0710 30:8ee22331bfaf 57 StatusManager::req_dribbleMotor_PID = 0.0;
alt0710 30:8ee22331bfaf 58 }
alt0710 30:8ee22331bfaf 59
alt0710 24:37a074e767c8 60 if( StatusManager::dribbleMotor_current > (float)JDG_TH_OVERCUR_DIRBMOT )
alt0710 24:37a074e767c8 61 {
alt0710 24:37a074e767c8 62 StatusManager::dribbleMot_OvrCur = 1;
alt0710 24:37a074e767c8 63 InterfaceManager::dribbleMotor.write((float)1.0 );
alt0710 24:37a074e767c8 64 }
alt0710 24:37a074e767c8 65 else
alt0710 24:37a074e767c8 66 {
alt0710 24:37a074e767c8 67 StatusManager::dribbleMot_OvrCur = 0;
alt0710 24:37a074e767c8 68 InterfaceManager::dribbleMotor.write((float)1.0 - StatusManager::req_dribbleMotor_PID * (float)0.01 );
alt0710 24:37a074e767c8 69 }
alt0710 25:15f75825fc36 70 #endif
alt0710 35:b1b00cfaa163 71
alt0710 24:37a074e767c8 72
alt0710 0:d4b98dbcb767 73 }
alt0710 0:d4b98dbcb767 74 }