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
interface/interface_manager.cpp
- Committer:
- alt0710
- Date:
- 2019-09-22
- Revision:
- 35:b1b00cfaa163
- Parent:
- 30:8ee22331bfaf
File content as of revision 35:b1b00cfaa163:
#include "mbed.h" #include "interface_manager.h" Button_Roots InterfaceManager::button; I2C_Roots InterfaceManager::i2c; CAN_Roots InterfaceManager::can; Xbee_Roots InterfaceManager::xbee; #if defined(MAIN_BORD_Ver_4) DigitalOut InterfaceManager::straight_kick(D3); DigitalOut InterfaceManager::chip_kick(D6); DigitalOut InterfaceManager::charge_request(D1); DigitalOut InterfaceManager::LED(D11); //DigitalOut InterfaceManager::dribbleStandBy(A5); DigitalIn InterfaceManager::ball_sensor(A4); DigitalIn InterfaceManager::charge_completed(D0);//D0 DigitalIn InterfaceManager::dribbleIC_fault(A6); PwmOut InterfaceManager::dribbleMotor(A5); AnalogIn InterfaceManager::dribbleMotor_current(A7); #elif defined(MAIN_BORD_Ver_5) DigitalOut InterfaceManager::straight_kick(D3); DigitalOut InterfaceManager::chip_kick(D6); DigitalOut InterfaceManager::charge_request(D0); DigitalOut InterfaceManager::LED(D11); //DigitalOut InterfaceManager::dribbleStandBy(A5); DigitalIn InterfaceManager::ball_sensor(A4); DigitalIn InterfaceManager::charge_completed(D1);//D0 DigitalIn InterfaceManager::dribbleIC_fault(A7); PwmOut InterfaceManager::dribbleMotor(A5); AnalogIn InterfaceManager::dribbleMotor_current(A6); #elif defined(MAIN_BORD_Ver_3) DigitalOut InterfaceManager::straight_kick(D3); DigitalOut InterfaceManager::chip_kick(D6); DigitalOut InterfaceManager::charge_request(D1); DigitalOut InterfaceManager::LED(D9); DigitalOut InterfaceManager::dribbleStandBy(A5); DigitalIn InterfaceManager::ball_sensor(A7); DigitalIn InterfaceManager::charge_completed(D0);//D0 DigitalIn InterfaceManager::dribbleIC_fault(A4); PwmOut InterfaceManager::dribbleMotor(A6); //DigitalIn InterfaceManager::modeSW_1(A3); //DigitalIn InterfaceManager::modeSW_2(A2); #endif AnalogIn InterfaceManager::batVoltage(A0); void init_interface(void) { //入力PINの設定 InterfaceManager::ball_sensor.mode(PullUp); InterfaceManager::charge_completed.mode(PullUp); InterfaceManager::dribbleIC_fault.mode(PullNone); // InterfaceManager::modeSW_1.mode(PullNone); // InterfaceManager::modeSW_2.mode(PullNone); InterfaceManager::straight_kick = 0; InterfaceManager::chip_kick = 0; InterfaceManager::charge_request = 0; //InterfaceManager::dribbleStandBy = 0; InterfaceManager::dribbleMotor.period_us(50); #if defined(MAIN_BORD_Ver_4) || defined(MAIN_BORD_Ver_5) InterfaceManager::dribbleMotor.write(1.0); //0.0~1.0 #else InterfaceManager::dribbleMotor.write(0.0); //0.0~1.0 #endif //割り込み優先度決定※Timerの優先度は低めに NVIC_SetPriority(TIM2_IRQn,5); NVIC_SetPriority(TIM1_BRK_TIM15_IRQn,10); NVIC_SetPriority(TIM1_UP_TIM16_IRQn,10); NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn,10); NVIC_SetPriority(TIM1_CC_IRQn,10); NVIC_SetPriority(TIM3_IRQn,5); NVIC_SetPriority(I2C1_EV_IRQn,1); NVIC_SetPriority(CAN_TX_IRQn,1); NVIC_SetPriority(CAN_RX0_IRQn,1); NVIC_SetPriority(CAN_RX1_IRQn,1); NVIC_SetPriority(USART1_IRQn , 0); NVIC_SetPriority(USART2_IRQn , 0); NVIC_SetPriority(USART3_IRQn , 0); initButton(); initI2C(); initCAN(); initXbee(); }