10
ebene robot_ebene1 team_eben e robot_eben e team_eben e0 robot_ebene0 robot_ebe ne2 feldspieler_e bene1 feldspieler_e bene0 feldspieler_e bene2 torwart_ebene 1 torwart_ebene 0 agent torwart team robot #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

ebene

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

Page 1: ebene

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

Page 2: ebene

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 );};

Page 3: ebene

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();

Page 4: ebene

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

Page 5: ebene

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;};

Page 6: ebene

//=====================================================================================//======================================== 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

Page 7: ebene

//=====================================================================================//======================================== 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

Page 8: ebene

//=====================================================================================//======================================== 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

Page 9: ebene

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

Page 10: ebene

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