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

interface/can/can_roots.cpp

Committer:
alt0710
Date:
2019-09-22
Revision:
35:b1b00cfaa163
Parent:
34:857b6cca2021

File content as of revision 35:b1b00cfaa163:


#include "mbed.h"
#include "comm.h"
#include "interface_manager.h"
#include "can_roots.h"

/* **mbedクラス** */
#ifdef LPC4088

#elif  STM32
CAN canMBED(PA_11, PA_12); // sda, scl
#endif

Ticker can_Timer;
char data[4];
CANMessage msg(0x410, &data[0] , 4 );

//変数定義


//変数宣言

static char send_data[7] = {0};

/* **ローカル関数定義** */



/* **ローカル関数** */
void can_send(void)
{
    //4msec周期で送信
    //送信記述はここに書く

    canMBED.write(CANMessage(MOT_ORDER_ID,InterfaceManager::can.send_motvel_data,8));   

//    send_data[1] = StatusManager::motTrqData.MotTrq_char.L;
//    send_data[0] = StatusManager::motTrqData.MotTrq_char.H;
//    send_data[2] = 0;
//    send_data[3] = 0;
//    send_data[4] = 0;
//    send_data[5] = 0;
//    send_data[6] = 0;
//    send_data[7] = 0;
//    
//    canMBED.write(CANMessage(MOTOR_TORQUE_MSG,send_data,7));
//    
    
}

void onMsgReceived() 
{
    canMBED.read(msg);
    if(msg.id == 0x102)
    {
        InterfaceManager::can.recive_motvel_data[0] = msg.data[0];
        InterfaceManager::can.recive_motvel_data[1] = msg.data[1];
        InterfaceManager::can.recive_motvel_data[2] = msg.data[2];
        InterfaceManager::can.recive_motvel_data[3] = msg.data[3];
    }
    
}


/* **グルーバル関数** */
extern void initCAN(void)
{
    canMBED.frequency(1000000);   
    canMBED.mode(CAN::Normal);
    canMBED.attach(&onMsgReceived);
    can_Timer.attach(can_send, CAN_SEND_CYCLE_TIME);    
}

/* **クラス** */
CAN_Roots::CAN_Roots()
{
    
        
}

char CAN_Roots::setMotVel(OrderMotVel& order)
{
    //TODU:データを上書きしたか判定処理を入れたい
    send_motvel_data[0] = (char)order.Mot0Order.Vel_char.L;
    send_motvel_data[1] = (char)order.Mot0Order.Vel_char.H;
    send_motvel_data[2] = (char)order.Mot1Order.Vel_char.L;
    send_motvel_data[3] = (char)order.Mot1Order.Vel_char.H;
    send_motvel_data[4] = (char)order.Mot2Order.Vel_char.L;
    send_motvel_data[5] = (char)order.Mot2Order.Vel_char.H;
    send_motvel_data[6] = (char)order.Mot0Order.Vel_char.L;
    send_motvel_data[7] = (char)order.Mot0Order.Vel_char.H;

//    send_motvel_data[0] = 1;
//    send_motvel_data[1] = 2;
//    send_motvel_data[2] = 3;
//    send_motvel_data[3] = 4;
//    send_motvel_data[4] = 5;
//    send_motvel_data[5] = 6;
//    send_motvel_data[6] = 7;
//    send_motvel_data[7] = 8;

    return 0;   
}