Upload
brooklyn
View
39
Download
0
Embed Size (px)
DESCRIPTION
agent. robot. team. feldspieler. torwart. #define t3_101_I 0 #define t1_000_I 1 #define t3_102_I 2 #define t2_010_I 3 #define t2_101_I 4 #define t4_202_I 5 #define t1_010_I 6 #define t2_200_I 7 #define t5_202_I 8 #define t4_201_I 9. ebene. robot_ebene. team_ebene. robot_ebene0. - PowerPoint PPT Presentation
Citation preview
ebene
robot_ebene1
team_ebenerobot_ebene
team_ebene0robot_ebene0 robot_ebene2
feldspieler_ebene1feldspieler_ebene0 feldspieler_ebene2torwart_ebene1torwart_ebene0
agent
torwart
teamrobot
#define t3_101_I 0#define t1_000_I 1#define t3_102_I 2#define t2_010_I 3#define t2_101_I 4#define t4_202_I 5#define t1_010_I 6#define t2_200_I 7#define t5_202_I 8#define t4_201_I 9
feldspieler
class agent{public: agent(); virtual ~agent(){;} virtual void addverhalten(class verhalten *v, int level) = NULL; //( class verhalten *v, int level ); virtual void action() = NULL; class ebene *ebenen[MAX_EBENEN]; char *name; int anz_ebenen;};
class torwart:public robot{public:void init(char *r_name, class team *my_team );};
class team:public agent{public: team(); team( int teamnr, float seite); virtual ~team(); virtual void init(char *t_name); void addverhalten( class verhalten *v, int level ) {;} void action(); agent *getAgent(const char *name);//Eigene Ebenen:class ebene *ebenen[MAX_EBENEN];//Oberste Ebene der Robbisclass ebene *robbi_ebenen[MAX_AGENTS];//Robbis:class robot *robbis[ MAX_AGENTS ];//Anzahl der Spieler:int anz_mitglieder;
int spielmodus;
//Teamdaten: class robovektor unser_tor; class robovektor gegner_tor;
// Gegner:class enemy *enemies[ MAX_AGENTS ];int anz_enemies;
int teamnummer; // 0 oder 1int torwart_id;int hau_weg_counter;unsigned int timer;// Methoden zum Setzen der Datenvoid writeRobbiData(int internalID,int externalID, float posX, float posY, float dx, float dy);void SwitchSeite() // links-1, rechts 1void writeEnemyData(int internalID, float posX, float posY, float dx=1.f, float dy=0.f);void setEnemyAnz(int anz){anz_enemies = anz;}void writeRobbiHindernis(int internalID, float hx, float hy);void writeFieldData( float ux, float uy, float gx, float gy};
class robot:public agent{public: robot(); virtual void init(char *r_name, class team *my_team ); void addverhalten( class verhalten *v, int level ); void action();
*ebenen[MAX_EBENEN];
class robovektor position;class robovektor direction;class robovektor old_orientierung;class robovektor orientierung;class robovektor hindernis;class robovektor homeposition;class robovektor unser_anstoss_hp;class robovektor gegner_anstoss_hp;class robovektor gegner_elfer_hp;
float maxspeed, maxdiff;class team *my_team;
// für Kommunikation comm_data robot_command;};
class team_ebene0:public team_ebene{public: team_ebene0(class team *myself):team_ebene(myself) { resolution = 1;} team_ebene0(class team *myself,/* int id,*/ class ebene *he):team_ebene(myself,/* id,*/ he) {resolution = 1;}int counter;void aktualisiereDaten(); void eval(); void init();};
class feldspieler:public robot{public:void init(char *r_name, class team *my_team );};
class ebene{//Methoden:public: ebene();
ebene( class ebene *he );void addverhalten( class verhalten *neuesverhalten, int index, const char* name); void add_sensor(int index, const char* name, float norm=1.0f); void add_aktor(int index, const char* name); virtual void aggregiereDaten() { ;} // before eval of higher_E virtual void aktualisiereDaten() { ;} // after eval of higher_E void addausgabe( int n, float *p, int t, const char *s ); void delausgabe( float *p); void ausgabe(); virtual void eval(); virtual void init();
//Daten: int roboid; class ebene *higher_E;
class verhalten *alleverhalten[MAX_VERHALTEN]; int anz_verhalten;
float sensoren[ MAX_SENSOREN ]; int anz_sensoren; char *sensor_names[ MAX_SENSOREN ]; float sensor_norm[ MAX_SENSOREN ];
float aktoren[ MAX_AKTOREN ][ 3 ]; // 2te Dimension für die deltas, 3te für Normierung int anz_aktoren; char *aktor_names[ MAX_AKTOREN ];
int timer; int subsampling_fak; //Subsampling der hoeheren Ebene
int resolution; float *pufferpointer[5]; // Pointer auf den Ringpuffer des BehaviorViews, in den Daten geshrieben werden sollen int typ[5]; // Gibt an, ob Aktor Sensor oder Vaerhaltensaktivierungsfaktor in den Ringpuffer geschrieben werden sollen int index[5]; // Gibt den Index des Wertes an, der in den Ringpuffer geschrieben werden soll int number[5]; //Gibt die Nummer des Ringpuffers an, in den geschrieben werden soll int anz_ausgaben; // Gibt an, wieviele Werte aus der Ebene ausgegeben werden; };
feldspieler_ebene0, feldspieler _ebene1, feldspieler _ebene2implementieren eval(), init(), aggregiereDaten(), aktualisiereDaten();
class team_ebene:public ebene{
public:class team *me;team_ebene(class team *myself):ebene() { me = myself; }team_ebene(class team *myself, class ebene *he):ebene( he) { me = myself; }void init(){;}
};
class robot_ebene:public ebene{public: class robot *me; robot_ebene (class robot *myself, class ebene *he):ebene(he) {me = myself;}};
class team_ebene0:public team_ebene{public: team_ebene0(class team *myself):team_ebene(myself) { resolution = 1;} team_ebene0(class team *myself,/* int id,*/ class ebene *he):team_ebene(myself,/* id,*/ he) {resolution = 1;}int counter;void aktualisiereDaten(); void eval(); void init();};
robot_ebene0, robot_ebene1, robot_ebene2implementieren eval(), init(), aggregiereDaten(), aktualisiereDaten();
class verhalten{//Methoden:public: verhalten() { e = 0; aktivierungsfaktor = 0.; name = NULL;} verhalten( class ebene *b ) { e = b; aktivierungsfaktor = 0.; name = NULL; } virtual void aktivierungsfunktion() = 0; virtual void zielfunktion() { ;} void eval();//Daten: class ebene *e; //Pointer auf die eigene Ebene float aktivierungsfaktor; CString *name;};
Von verhalten erben und implementieren aktivierungsfunktion und zielfunktion:
///////////////// Feldspieler /////////////////////////#define e0_v_fahren 0#define e0_v_lenken 1#define e0_v_fahrenvorwaerts 2#define e0_v_lenkenvorwaerts 3#define e0_v_fahrenausweichen 4#define e0_v_lenkenausweichen 5#define e0_v_fahrenvollstrecken 6#define e0_v_lenken_ausweichen_ball 7#define e0_v_fahren_haurein 8#define e0_v_lenkengohome 9#define e0_v_fahrengohome 10#define e0_v_fahrenanlauf 11#define e0_v_lenkenanlauf 12///////////////// Torwart /////////////////////////////#define tw_e0_v_halten 0#define tw_e0_v_fahrentorwartstellen 1#define tw_e0_v_fahrentorwarthalten 2 #define tw_e0_v_stellen 3 /////////////////////////Torwart///////////////////////////#define tw_e1_v_schiessen 0
////////////////////// Feldspieler ////////////////////////////#define e1_v_ausweichen 0 #define e1_v_zumOrtmitStop 1#define e1_v_Anlauf 2#define e1_v_vollstrecken 3#define e1_v_ausweichen_ball 4 #define e1_v_blocken 5#define e1_v_laufenmitBall 6#define e1_v_hau_rein 7#define e1_v_hau_weg 8#define e1_v_gohome 9 #define e1_v_hau_aus_der_Ecke 10#define e1_v_stay 11#define e1_v_ausrichten 12/////////////////// Feldspieler //////////////////#define e2_v_Torschuss 0#define e2_v_dribbeln 1#define e2_v_Abwehren 2#define e2_v_Stehen 3#define e2_v_Homing 4#define e2_v_Spezial_Torschuss 5#define e2_v_IchMachAnstoss 6/////////////////// Team //////////////////#define t_e0_v_angriff 0#define t_e0_v_abwehr 1
class Spielfeld{public:Spielfeld();void ballprediction();void glaetten();
class robovektor CenterPoint;
class robovektor oldballposition, newballposition;class robovektor glatte_ballposition;class robovektor balldirection;class robovektor glatte_balldirection;class robovektor very_glatte_balldirection; class robovektor ballbewegung;
std::vector<std::string> standardSituationen;int spielstatus;int fuer_team; // gibt an für welches Team Standardsituation
bool daten_sind_neu;DWORD bild_time;float streckfaktor;robovektor predicted_positions[MAX_PREDICTION_POSITIONS];};
class steuerung{ public: steuerung(); int timer;DWORD last_action_ticks;float *pufferpointer; // für hartbeatbool neues_team(std::string name, int teamNr);void add_pufferpointer(float *ringpuffer);class team *team[2];int anz_teams;teamTemplates team_templates;};
//=====================================================================================//======================================== E B E N E 0 ===============================//=====================================================================================
/////////////////////////////////////////// Sensoren
////////////////// Robot /////////////////////////
#define r_e0_s_ballwinkel 0
////////////////// Feldspieler /////////////////////////
#define e0_s_zielwinkel 1 //[ -pi; pi ] gesehen in Orientierungsrichtung#define e0_s_zielentfernung 2 //#define e0_s_richtung 3 // 1 = vorwaerts, -1 = rueckwaerts#define e0_s_speed 4 // #define e0_s_drehwinkel 5 //Winkel, um den sich der Robbi im letzten Schritt gedreht hat#define e0_s_ausweichen_winkel 6#define e0_s_ausrichtenwinkel 7
///////////////// Torwart ///////////////////////////////
#define tw_e0_s_ballposition_X 1#define tw_e0_s_ballposition_Y 2#define tw_e0_s_balldirection_X 3#define tw_e0_s_balldirection_Y 4#define tw_e0_s_robbiposition_X 5#define tw_e0_s_robbiposition_Y 6#define tw_e0_s_torwart_ziel_entfernung 7 // nur die y-Komponente#define tw_e0_s_last_ballposition_X 8#define tw_e0_s_last_ballposition_Y 9#define tw_e0_s_torwart_zielwinkel 10#define tw_e0_s_parallel_winkel 11//Winkel zwischen Orientierung und y-Achse
//////////////////////////////////////////// Verhalten
////////////////// Feldspieler /////////////////////////#define e0_v_fahren 0#define e0_v_lenken 1#define e0_v_fahrenvorwaerts 2#define e0_v_lenkenvorwaerts 3#define e0_v_fahrenausweichen 4#define e0_v_lenkenausweichen 5#define e0_v_fahrenvollstrecken 6#define e0_v_lenken_ausweichen_ball 7#define e0_v_fahren_haurein 8#define e0_v_lenkengohome 9#define e0_v_fahrengohome 10#define e0_v_fahrenanlauf 11#define e0_v_lenkenanlauf 12
///////////////// Torwart /////////////////////////////#define tw_e0_v_halten 0#define tw_e0_v_fahrentorwartstellen 1#define tw_e0_v_fahrentorwarthalten 2 #define tw_e0_v_stellen 3
/////////////////////////////////////////////// Aktoren
////////////////////// Robot //////////////////////////
#define r_e0_a_lenken 0#define r_e0_a_fahren 1
//////////////////////// Feldspieler //////////////////////#define e0_a_ausweichentscheidung 2#define e0_a_ballausweichentscheidung 3
//////////////////// Torwart ///////////////////////////#define tw_e0_a_zielposition_X 2#define tw_e0_a_zielposition_Y 3
//=====================================================================================//======================================== E B E N E 1 ===============================//=====================================================================================
///////////////////////////////////////////////// Sensoren
////////////////////// Robot //////////////////////////#define r_e1_s_unser_tor_X 0#define r_e1_s_unser_tor_Y 1
////////////////// Feldspieler /////////////////////////
#define e1_s_ballposition_X 2 // wird von der unteren Ebene upgedated (smoothed average)#define e1_s_ballposition_Y 3#define e1_s_robbiposition_X 4#define e1_s_robbiposition_Y 5#define e1_s_hindernis_X 6#define e1_s_hindernis_Y 7#define e1_s_hindernis_entfernung 8#define e1_s_hindernis_winkel 9#define e1_s_richtung 10 //Robbi vorwaerts oder rueckwaerts ( 1 oder -1 )#define e1_s_ballentfernung 11 //Entfernug vom Robbi zum Ball#define e1_s_schusszielwinkel 12 //Von der Orientierung des Robbis unabhängiger Winkel // zwischen (Schussziel-Ball) und (Schussziel-Robbi) #define e1_s_schusszielentfernung 13 // Entfernung zwischen Robbi und Schussziel#define e1_s_entfernung_ball_ziel 14 //Entfernung zwischen Ball und Schussziel#define e1_s_auftreffpunkt_X 15 // Wo der Robbi aauf die gegnerische Torauslinie trifft, wenn er immer gerdaeaus fährt#define e1_s_auftreffpunkt_Y 16#define e1_s_hindernis_ziel_winkel 17 //Von der Orientierung des Robbis unabhängiger Winkel // zwischen (Robbi-Hindernis) und (Robbi-Ball) #define e1_s_in_vollstreckenposition 18 //Sensor, der aktiv wird, wenn robby in Vollstrechenposition // langsame deaktivierung#define e1_s_balldirection_X 19 // wird von der unteren Ebene upgedated (smoothed average)#define e1_s_balldirection_Y 20#define e1_s_zielwinkel 21#define e1_s_in_haureinposition 22#define e1_s_last_ballposition_X 23 // wird von der eigenen Ebene gerettet#define e1_s_last_ballposition_Y 24#define e1_s_predicted_ballposition_X 25 // wird von der eigenen Ebene berechnet#define e1_s_predicted_ballposition_Y 26#define e1_s_ballwinkel 27#define e1_s_ball_ziel_winkel 28 //Von der Orientierung des Robbis unabhängiger Winkel // zwischen (Robbi-Ball) und (Robbi-Ziel)
#define e1_s_robbispeed 29 //geschwindigkeit des roboters#define e1_s_dangerous_gegner_X 30 #define e1_s_dangerous_gegner_Y 31#define e1_s_schuss_ok 32#define e1_s_pred_ball_Anlauf_X 33#define e1_s_pred_ball_Anlauf_Y 34#define e1_s_robbidirection_X 35#define e1_s_robbidirection_Y 36#define e1_s_robbiorientierung_X 37#define e1_s_robbiorientierung_Y 38#define e1_s_pred_ball_haurein_X 39#define e1_s_pred_ball_haurein_Y 40#define e1_s_pred_ball_ausweichen_X 41#define e1_s_pred_ball_ausweichen_Y 42#define e1_s_drehwinkel 43#define e1_s_bernhard 44#define e1_s_fahren 45#define e1_s_lenken 46#define e1_s_zielentfernung 47#define e1_s_pred_ball_Blocken_X 48#define e1_s_pred_ball_Blocken_Y 49#define e1_s_geradeaus 50
/////////////////Torwart/////////////////////////////#define tw_e1_s_balldirection_X 2#define tw_e1_s_balldirection_Y 3#define tw_e1_s_schuss_an 4
/////////////////////////Torwart///////////////////////////#define tw_e1_v_schiessen 0
////////////////////// Feldspieler ////////////////////////////#define e1_v_ausweichen 0 #define e1_v_zumOrtmitStop 1#define e1_v_Anlauf 2#define e1_v_vollstrecken 3#define e1_v_ausweichen_ball 4 #define e1_v_blocken 5#define e1_v_laufenmitBall 6#define e1_v_hau_rein 7#define e1_v_hau_weg 8#define e1_v_gohome 9 #define e1_v_hau_aus_der_Ecke 10#define e1_v_stay 11#define e1_v_ausrichten 12
////////////////////////////////////////////////// Aktoren
///////////////// Robot ////////////////////////#define r_e1_a_schuss 0
/////////////////// Feldspieler //////////////////#define e1_a_zielposition_X 1#define e1_a_zielposition_Y 2#define e1_a_ausweichen_ziel_X 3#define e1_a_ausweichen_ziel_Y 4#define e1_a_blockposition_X 5#define e1_a_blockposition_Y 6
//=====================================================================================//======================================== E B E N E 2 ===============================//=====================================================================================
///////////////////////////////////////////////// Sensoren///////////////// Robot /////////////////////////////////////////// Feldspieler //////////////////#define e2_s_ballposition_X 0#define e2_s_ballposition_Y 1#define e2_s_robbiposition_X 2#define e2_s_robbiposition_Y 3#define e2_s_gegner_tor_X 4#define e2_s_gegner_tor_Y 5#define e2_s_unser_tor_X 6#define e2_s_unser_tor_Y 7#define e2_s_sollich 8#define e2_s_glatter_bernhard 9#define e2_s_dynamik_home_X 10#define e2_s_dynamik_home_Y 11
////////////////////////////////////////////////// Verhalten///////////////// Robot /////////////////////////////////////////// Feldspieler //////////////////#define e2_v_Torschuss 0#define e2_v_dribbeln 1#define e2_v_Abwehren 2#define e2_v_Stehen 3#define e2_v_Homing 4#define e2_v_Spezial_Torschuss 5#define e2_v_IchMachAnstoss 6
////////////////////////////////////////////////// Aktoren///////////////// Robot /////////////////////////////////////////// Feldspieler //////////////////#define e2_a_schussziel_X 0#define e2_a_schussziel_Y 1#define e2_a_homeziel_X 2#define e2_a_homeziel_Y 3
//=====================================================================================//======================================== T E A M E B E N E 0 ===============================//=====================================================================================
///////////////////////////////////////////////// Sensoren//////////////////////Team//////////////////////#define t_e0_s_ballposition_X 0#define t_e0_s_ballposition_Y 1#define t_e0_s_predicted_ballposition_X 2#define t_e0_s_predicted_ballposition_Y 3#define t_e0_s_angriff 4#define t_e0_s_gegner_torwart_X 5#define t_e0_s_gegner_torwart_Y 6
///////////////////////////////////////////////// Verhalten#define t_e0_v_angriff 0#define t_e0_v_abwehr 1
fahren fahrenvorwaerts
lenken fahrenausweichen
lenkenausweichen
fahrenvollstrecken
lenken_ausweichen_ball
fahrengohome
lenkenvorwaertslenkengohome fahrenanlauf
lenkenanlauf
hau_aus_der_Eckegohome hau_weghau_reinblocken ausweichen_ballvollstreckenAnlauf ausweichen
HomingIchMachAnstoss Spezial_TorschussAbwehrenTorschuss
AngriffAbwehr
hau_aus_der_Ecke
gohome
hau_weg
hau_rein
blocken
ausweichen_ball
vollstrecken
Anlauf
ausweichen
Homing
IchMachAnstoss
Spezial_Torschuss
Abwehren
Torschuss
Cross-over hemmingsimple hemming