Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Representations/WLan/TeamMessageCollection.cpp

Go to the documentation of this file.
00001 /**
00002 * @file Representations/WLan/TeamMessageCollection.cpp
00003 *
00004 * Implementation of class TeamMessageCollection.
00005 *
00006 * @author <A href=mailto:sebastian.schmidt@udo.edu>Sebastian Schmidt</A>
00007 * @author <A href=mailto:m_wachter@gmx.de>Michael Wachter</A>
00008 */
00009 
00010 #include "TeamMessageCollection.h"
00011 #include "Platform/SystemCall.h"
00012 #include "Tools/Player.h"
00013 #include "Tools/Debugging/Debugging.h"
00014 
00015 TeamMessageCollection::TeamMessageCollection()
00016 {
00017   lastSendingTimeStamp = 0;
00018   for (int a=0; a< maxNumberOfTeamMessages; a++)
00019   {
00020     incomingTimeStamp[a] = teamMessageTimeStamp[a] = 0;
00021   }
00022   
00023   int i;
00024    
00025   // all ringbuffer elements are set to zero. 
00026   for(int j=0;j< maxNumberOfTeamMessages ;j++) 
00027   {
00028     for(int i=0;i<100;i++) offsets[j].add(0);
00029     offsets[j].init();
00030     timeOffsetSum[j]=0;
00031     offsets[j].add(0);
00032   }
00033   
00034   messagesSent = false;
00035   for(i=0;i< maxNumberOfTeamMessages ;i++) 
00036   {
00037     teamMessages[i] = NULL;
00038   }
00039 
00040   for(i=0;i< maxNumberOfTeamMessages ;i++) 
00041   {
00042   teamMessagesForActualTeamMessages[i] = 0;
00043   }
00044 
00045   numberOfInTeamMessages = 0;
00046   numberOfOutTeamMessages = 0;
00047   lastSendTime=0;
00048   sendNow = false;
00049   delay = 100;
00050  }
00051 
00052 void TeamMessageCollection::processTimeStamps()
00053 {
00054   signed long actualOffset;
00055   for (int i=0; i < numberOfInTeamMessages; i++)
00056   {
00057   /*  Offset = (1/2) * ( T2 - T1 + T3 - T4 )  =  T5 - T4
00058   *  
00059   *  T1 = LastReceivedTimeStamp
00060   *  T2 = IncomimgTimeStamp
00061   *  T3 = TimeStamp
00062   *  T4 = System-Time
00063   *  T5 = System-Time of the other Robot
00064   *  
00065     */
00066     
00067     actualOffset= ( (signed long)teamMessages[i]->incomingTimeStamp -
00068       (signed long)teamMessages[i]->lastReceivedTimeStamp +
00069       (signed long)teamMessages[i]->timeStamp -
00070       (signed long)SystemCall::getCurrentSystemTime() ) / 2 ;
00071     
00072     // calculating the average of the values in the ringBuffer
00073     timeOffsetSum[i] += actualOffset;
00074     timeOffsetSum[i] -= offsets[i].getEntry(-1);
00075     
00076     (const_cast<TeamMessage*>(teamMessages[i]))->timeOffset =
00077       //((TeamMessage*)teamMessages[i])->timeOffset =
00078       timeOffsetSum[i] / offsets[i].getNumberOfEntries();
00079     offsets[i].add(actualOffset);
00080     
00081     // Setting timeStamps in teamMessages
00082     outTeamMessages[i]->incomingTimeStamp = SystemCall::getCurrentSystemTime();
00083     outTeamMessages[i]->lastReceivedTimeStamp = teamMessages[i]->timeStamp;
00084     
00085   }
00086   INFO(sendTimeOffsets,idText,text,"TimeOffsets : " 
00087     << teamMessages[0]->timeOffset << " " << teamMessages[0]->playerNumberOfSender <<" "
00088     << teamMessages[1]->timeOffset << " " << teamMessages[1]->playerNumberOfSender <<" "
00089     << teamMessages[2]->timeOffset << " " << teamMessages[2]->playerNumberOfSender);
00090 }
00091 
00092 
00093 void TeamMessageCollection::processMessages()
00094 {   
00095 
00096   numberOfTeamMessages = 0;
00097   for(int a=0;a< numberOfInTeamMessages;a++) {
00098     
00099     // Reset sendXxx fields in the TeamMessages if they are send
00100     if (messagesSent) {
00101       ((TeamMessage*) outTeamMessages[a])->sendSeenBallPosition
00102         = outTeamMessages[a] -> sendBehaviorTeamMessage 
00103         = outTeamMessages[a] -> sendRobotPose 
00104         = false;
00105       messagesSent = false;
00106     }
00107     
00108     // Set the teamMessagesForActualTeamMessages so that operator[] only returns actual 
00109     // teamMessages. 
00110     if (teamMessages[a]->isActual()) {
00111       teamMessagesForActualTeamMessages[numberOfTeamMessages++] = a;
00112     }
00113   }
00114   
00115   processTimeStamps();
00116 }
00117 
00118 void TeamMessageCollection::setOutTeamMessages(TeamMessage& tm)
00119 {
00120   outTeamMessages[numberOfOutTeamMessages] = &tm;
00121   numberOfOutTeamMessages++;  
00122 
00123 }
00124 
00125 void TeamMessageCollection::setInTeamMessages(TeamMessage& tm)
00126 {
00127   teamMessages[numberOfInTeamMessages] = &tm;
00128   numberOfInTeamMessages++;
00129 } 
00130 
00131 
00132 void TeamMessageCollection::send(const RobotPose& robotPose,bool sendNow) const
00133 {
00134   for (int i=0;i< numberOfOutTeamMessages;i++)
00135   {
00136      outTeamMessages[i]->robotPose = robotPose ;
00137      outTeamMessages[i]->sendRobotPose = true;
00138   }
00139   this->sendNow |= sendNow;
00140 }
00141 
00142 void TeamMessageCollection::send(const SeenBallPosition& seenBallPosition, bool sendNow) const
00143 {
00144   for (int i=0;i< numberOfOutTeamMessages;i++)
00145   {
00146       outTeamMessages[i]->seenBallPosition = seenBallPosition;
00147       outTeamMessages[i]->sendSeenBallPosition = true;
00148   }
00149   this->sendNow |= sendNow;
00150 }
00151 
00152 void TeamMessageCollection::send(const BehaviorTeamMessage& behaviorTeamMessage,bool sendNow) const
00153 {
00154   for (int i=0;i< numberOfOutTeamMessages;i++)
00155   {
00156       outTeamMessages[i]->behaviorTeamMessage = behaviorTeamMessage;
00157       outTeamMessages[i]->sendBehaviorTeamMessage = true;
00158   }
00159   this->sendNow |= sendNow;
00160 }
00161 
00162 bool TeamMessageCollection::processOutMessages() {
00163   
00164   // is te delay over ?
00165   sendNow |= ((signed)(SystemCall::getCurrentSystemTime() - (signed) lastSendTime) > delay);
00166   if (sendNow) 
00167   {
00168     // set timestamps for all outgoing TeamMessages
00169     for(int a=0;a< numberOfOutTeamMessages;a++) {
00170       outTeamMessages[a]->timeStamp = SystemCall::getCurrentSystemTime();
00171     }
00172 
00173     messagesSent = true;
00174     lastSendTime = SystemCall::getCurrentSystemTime();
00175     sendNow = false;
00176     return (true);
00177   }
00178   else return (false);
00179 }
00180 
00181 
00182 void TeamMessageCollection::setDelay(int delay)
00183 {
00184   this->delay = delay;
00185 }
00186 
00187 int TeamMessageCollection::getDelay() const
00188 {
00189   return (delay);
00190 }
00191 
00192 
00193 /*
00194 * Change log :
00195 *
00196 * $Log: TeamMessageCollection.cpp,v $
00197 * Revision 1.1.1.1  2004/05/22 17:26:05  cvsadm
00198 * created new repository GT2004_WM
00199 *
00200 * Revision 1.4  2004/05/14 14:12:08  wachter
00201 * - Added communication support for 5 robots
00202 * - rewrote parts of team-communication to be faster and more stable
00203 *
00204 * Revision 1.3  2004/02/18 12:09:20  hamerla
00205 * add playernumber to Debugkey Timeoffset
00206 *
00207 * Revision 1.2  2003/12/06 17:45:33  loetzsch
00208 * replaced Player::playerRole (goalie, defender, striker1, striker2)
00209 * by Player::playerNumber (one, two, three, four)
00210 *
00211 * Revision 1.1  2003/10/07 10:09:36  cvsadm
00212 * Created GT2004 (M.J.)
00213 *
00214 * Revision 1.3  2003/09/26 15:27:27  juengel
00215 * Renamed DataTypes to representations.
00216 *
00217 * Revision 1.2  2003/07/02 19:14:23  loetzsch
00218 * bug fixes, removed unused functions
00219 *
00220 * Revision 1.1.1.1  2003/07/02 09:40:23  cvsadm
00221 * created new repository for the competitions in Padova from the 
00222 * tamara CVS (Tuesday 2:00 pm)
00223 *
00224 * removed unused solutions
00225 *
00226 * Revision 1.5  2003/05/02 12:57:13  loetzsch
00227 * TeamMessage now contains a SeenBallPosition instead of a BallPercept
00228 *
00229 * Revision 1.4  2003/03/24 12:10:45  wachter
00230 * Fixed warning.
00231 *
00232 * Revision 1.3  2003/02/28 17:02:55  wachter
00233 * Reenabled trainer-syncronisation for RuhrpottHellhound-Behavior
00234 *
00235 * Revision 1.2  2003/02/25 12:55:40  wachter
00236 * made some attributes muteable
00237 *
00238 * Revision 1.1  2003/02/18 13:24:36  wachter
00239 * added new TeamMessageCollection and TeamMessage
00240 *
00241 *
00242 */
00243 
00244 
00245 
00246 
00247 

Generated on Thu Sep 23 19:57:37 2004 for GT2004 by doxygen 1.3.6