00001
00002
00003 #include <controllers/fitnessFramework/evolutionComponent.h>
00004 #include <controllers/externalControllers/tcpip/nonEmulationMessage.h>
00005 #include <iostream>
00006 #include "basic/robotActorBase.h"
00007
00008 namespace srAlmende {
00009
00010 EvolutionComponent::EvolutionComponent(const std::string &name, int tcpPort) :
00011 srExternal::TcpipComponent(name, tcpPort) {
00012
00013 }
00014
00015 EvolutionComponent::~EvolutionComponent() {
00016
00017 }
00018
00019 unsigned char EvolutionComponent::SendBack(srExternal::NonEmulationMessageType::msgType type) {
00020 switch(type) {
00021 case srExternal::NonEmulationMessageType::FITNESS:
00022 case srExternal::NonEmulationMessageType::SENSOR:
00023 return true;
00024 default:
00025 return false;
00026 }
00027
00028 }
00029
00030 srExternal::NonEmulationMessageType::msgType EvolutionComponent::TransformMessageType(
00031 unsigned char type) {
00032
00033 switch(type) {
00034 case TCPIP_POSITION:
00035 return srExternal::NonEmulationMessageType::POSITION;
00036 case TCPIP_ORIENTATION:
00037 return srExternal::NonEmulationMessageType::ORIENTATION;
00038 case TCPIP_FITNESS:
00039 return srExternal::NonEmulationMessageType::FITNESS;
00040 case TCPIP_ACTUATOR:
00041 return srExternal::NonEmulationMessageType::ACTUATOR;
00042 case TCPIP_SENSOR:
00043 return srExternal::NonEmulationMessageType::SENSOR;
00044 default:
00045 return srExternal::NonEmulationMessageType::NONE;
00046 }
00047 }
00048
00049 unsigned char EvolutionComponent::TransformMessageType(
00050 srExternal::NonEmulationMessageType::msgType type) {
00051 switch(type) {
00052 case srExternal::NonEmulationMessageType::FITNESS:
00053 return TCPIP_FITNESS;
00054 case srExternal::NonEmulationMessageType::POSITION:
00055 return TCPIP_POSITION;
00056 case srExternal::NonEmulationMessageType::ORIENTATION:
00057 return TCPIP_ORIENTATION;
00058 case srExternal::NonEmulationMessageType::ACTUATOR:
00059 return TCPIP_ACTUATOR;
00060 case srExternal::NonEmulationMessageType::SENSOR:
00061 return TCPIP_SENSOR;
00062 default:
00063 return 0;
00064 }
00065 }
00066
00070 dtCore::UniqueId* EvolutionComponent::TransformId(unsigned char id) {
00071 std::ostringstream search_name;
00072 simulated_group_counter = (int)id / simulation_size;
00073
00074 search_name << "almEvolutionRobot " << ((int)id % simulation_size);
00075 std::vector< dtGame::GameActorProxy* > allGameActors;
00076 GetGameManager()->GetAllGameActors(allGameActors);
00077 for (unsigned int i = 0; i < allGameActors.size(); i++) {
00078 srCore::RobotActorBase &actor = static_cast<srCore::RobotActorBase&>(
00079 allGameActors[i]->GetGameActor());
00080
00081 std::string this_name = actor.GetName();
00082 if (strncmp(this_name.c_str(), search_name.str().c_str(),
00083 strlen(search_name.str().c_str())) == 0) {
00084 return actor.getBusID();
00085 }
00086 }
00087 return NULL;
00088 }
00089
00094 unsigned char EvolutionComponent::TransformId(dtCore::UniqueId* id) {
00095 std::vector< dtGame::GameActorProxy* > allGameActors;
00096 GetGameManager()->GetAllGameActors(allGameActors);
00097 for (unsigned int i = 0; i < allGameActors.size(); i++) {
00098 srCore::RobotActorBase &actor = static_cast<srCore::RobotActorBase&>(allGameActors[i]->GetGameActor());
00099 if (actor.getBusID() == id) {
00100 long int number;
00101 std::string this_name = actor.GetName();
00102 std::string numberstring = this_name.substr(this_name.rfind(' '), this_name.length());
00103 if (!(std::istringstream( numberstring ) >> number)) number = 0;
00104
00105 unsigned char result = (unsigned char)number;
00106 result = result + (simulated_group_counter) * simulation_size;
00107 return result;
00108 }
00109 }
00110 return 0xFF;
00111 }
00112
00113 void EvolutionComponent::ProcessMessage(const dtGame::Message& message) {
00114 srExternal::TcpipComponent::ProcessMessage(message);
00115 }
00116
00117 }
00118
00119