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

Representations/Perception/SpecialPercept.cpp

Go to the documentation of this file.
00001 /**
00002  * @file SpecialPercept.cpp
00003  *
00004  * Implementation of class SpecialPercept.
00005  *
00006  * @author <A href=mailto:juengel@informatik.hu-berlin.de>Matthias Juengel</A>, <A href=mailto:brunn@sim.tu-darmstadt.de>Ronnie Brunn</A>
00007  */
00008 
00009 #include "SpecialPercept.h"
00010 //#include "Tools/FieldDimensions.h"
00011 #include "Platform/SystemCall.h"
00012 
00013 BitePoint::BitePoint()
00014 {
00015   position         = none;
00016   angleTo          = 0;
00017   distanceTo       = 0;
00018   relPos.x         = 0;
00019   relPos.y         = 0;
00020   preciseShift     = 0;
00021   timeWhenLastSeen = 0;
00022   fresh            = false;
00023 }
00024 
00025 void BitePoint::addPercept(double aAngleTo, double aDistanceTo, double aPreciseShift)
00026 {
00027   angleTo      = aAngleTo;
00028   distanceTo   = aDistanceTo;
00029   relPos.x     = sgn(pi_2 - fabs(aAngleTo)) * (cos(fabs(aAngleTo))*aDistanceTo);
00030   relPos.y     = sgn(aAngleTo) * (sin(fabs(aAngleTo))*aDistanceTo);
00031   preciseShift = aPreciseShift;
00032 
00033   timeWhenLastSeen = SystemCall::getCurrentSystemTime();
00034 
00035   fresh = true;
00036 }
00037 
00038 In& operator>>(In& stream,BitePoint& bitePoint)
00039 {
00040   stream.read(&(bitePoint.position),         sizeof(BitePoint::Position));
00041   stream.read(&(bitePoint.angleTo),          sizeof(double));
00042   stream.read(&(bitePoint.distanceTo),       sizeof(double));
00043   stream.read(&(bitePoint.relPos),           sizeof(Vector2<double>));
00044   stream.read(&(bitePoint.preciseShift),     sizeof(double));
00045   stream.read(&(bitePoint.timeWhenLastSeen), sizeof(unsigned long));
00046   stream.read(&(bitePoint.fresh),            sizeof(bool));
00047 
00048   return stream;
00049 }
00050  
00051 Out& operator<<(Out& stream, const BitePoint& bitePoint)
00052 {
00053   stream.write(&(bitePoint.position),         sizeof(BitePoint::Position));
00054   stream.write(&(bitePoint.angleTo),          sizeof(double));
00055   stream.write(&(bitePoint.distanceTo),       sizeof(double));
00056   stream.write(&(bitePoint.relPos),           sizeof(Vector2<double>));
00057   stream.write(&(bitePoint.preciseShift),     sizeof(double));
00058   stream.write(&(bitePoint.timeWhenLastSeen), sizeof(unsigned long));
00059   stream.write(&(bitePoint.fresh),            sizeof(bool));
00060 
00061   return stream;
00062 }
00063 
00064 
00065 OCRedLine::OCRedLine(){
00066   this->seen = false;
00067   this->angleInImage     =0;
00068   this->lineStart.x      =0;
00069   this->lineStart.y      =0;
00070   this->lineEnd.x        =0;
00071   this->lineEnd.y        =0;
00072   this->timeWhenLastSeen =0;
00073 
00074 }
00075 void OCRedLine::addPercept(Vector2<int> lineStart, Vector2<int> lineEnd, Vector2<int> pointStart,Vector2<int> pointEnd,int angleInImage){
00076   this->seen = true;
00077   this->lineStart=lineStart;
00078   this->lineEnd=lineEnd;
00079   this->pointStart=pointStart;
00080   this->pointEnd=pointEnd;
00081   this->angleInImage=angleInImage;
00082   this->timeWhenLastSeen = SystemCall::getCurrentSystemTime();
00083 }
00084 
00085 
00086 In& operator>>(In& stream,OCRedLine& ocRedLine)
00087 {
00088   stream.read(&(ocRedLine.lineStart),          sizeof(Vector2<int>));
00089   stream.read(&(ocRedLine.lineEnd),          sizeof(Vector2<int>));
00090   stream.read(&(ocRedLine.angleInImage),       sizeof(int));
00091   stream.read(&(ocRedLine.timeWhenLastSeen), sizeof(unsigned long));
00092 
00093   return stream;
00094 }
00095  
00096 Out& operator<<(Out& stream, const OCRedLine& ocRedLine)
00097 {
00098   stream.write(&(ocRedLine.lineStart),          sizeof(Vector2<int>));
00099   stream.write(&(ocRedLine.lineEnd),          sizeof(Vector2<int>));
00100   stream.write(&(ocRedLine.angleInImage),       sizeof(int));
00101   stream.write(&(ocRedLine.timeWhenLastSeen), sizeof(unsigned long));
00102 
00103   return stream;
00104 }
00105 
00106 
00107 OCBridge::OCBridge()
00108 {
00109   lastSeenSide     = none;
00110   angleTo          = 0;
00111   distanceTo       = 0;
00112   relPos.x         = 0;
00113   relPos.y         = 0;
00114   timeWhenLastSeen = 0;
00115   fresh            = false;
00116 
00117   for (int i=0; i < BitePoint::numOfPositions; ++i)
00118     bitePoint[i].position = BitePoint::Position(i);
00119 }
00120 
00121 void OCBridge::addPercept(double aAngleTo, double aDistanceTo)
00122 {
00123   angleTo      = aAngleTo;
00124   distanceTo   = aDistanceTo;
00125   relPos.x     = sgn(pi_2 - fabs(aAngleTo)) * (cos(fabs(aAngleTo))*aDistanceTo);
00126   relPos.y     = sgn(aAngleTo) * (sin(fabs(aAngleTo))*aDistanceTo);
00127 
00128   timeWhenLastSeen = SystemCall::getCurrentSystemTime();
00129 
00130   fresh = true;
00131 }
00132 
00133 In& operator>>(In& stream,OCBridge& ocBridge)
00134 {
00135   stream.read(&(ocBridge.lastSeenSide),     sizeof(OCBridge::Side));
00136   stream.read(&(ocBridge.angleTo),          sizeof(double));
00137   stream.read(&(ocBridge.distanceTo),       sizeof(double));
00138   stream.read(&(ocBridge.relPos),           sizeof(Vector2<double>));
00139   stream.read(&(ocBridge.timeWhenLastSeen), sizeof(unsigned long));
00140   stream.read(&(ocBridge.fresh),            sizeof(bool));
00141 
00142   for (int i=0; i < BitePoint::numOfPositions; ++i)
00143     stream >> ocBridge.bitePoint[i];
00144 
00145   return stream;
00146 }
00147  
00148 Out& operator<<(Out& stream, const OCBridge& ocBridge)
00149 {
00150   stream.write(&(ocBridge.lastSeenSide),     sizeof(OCBridge::Side));
00151   stream.write(&(ocBridge.angleTo),          sizeof(double));
00152   stream.write(&(ocBridge.distanceTo),       sizeof(double));
00153   stream.write(&(ocBridge.relPos),           sizeof(Vector2<double>));
00154   stream.write(&(ocBridge.timeWhenLastSeen), sizeof(unsigned long));
00155   stream.write(&(ocBridge.fresh),            sizeof(bool));
00156 
00157   for (int i=0; i < BitePoint::numOfPositions; ++i)
00158     stream << ocBridge.bitePoint[i];
00159 
00160   return stream;
00161 }
00162 
00163 
00164 
00165 
00166 SpecialPercept::SpecialPercept()
00167 {
00168   reset();
00169 }
00170 
00171 void SpecialPercept::reset(unsigned long frameNum)
00172 {
00173   type = none;
00174   pan = tilt = 0;
00175   mostMovement = Vector2<long>(0,0);
00176   leastMovement = Vector2<long>(0,0);
00177   checkerPose = Pose2D(0,0,0);
00178   barCodeId = -1;
00179   orientation = 0;
00180   frameNumber = frameNum;
00181   shutterSelected  = false;
00182   
00183   countAngleOfPinkFlags = 0;
00184 }
00185 
00186 In& operator>>(In& stream,SpecialPercept& specialPercept)
00187 {
00188   specialPercept.reset();
00189   stream >> specialPercept.frameNumber;
00190   char temp;
00191   stream >> temp;
00192   specialPercept.type = (SpecialPercept::Type)temp;
00193   switch(specialPercept.type)
00194   {
00195   case SpecialPercept::motionDetection: stream >> specialPercept.mostMovement.x >> specialPercept.mostMovement.y >> specialPercept.leastMovement.x >> specialPercept.leastMovement.y;
00196                                         break;
00197   case SpecialPercept::checkerboard: stream >> specialPercept.checkerPose.translation.x >> specialPercept.checkerPose.translation.y >> specialPercept.checkerPose.rotation;
00198                                         break;
00199   case SpecialPercept::barCode: stream >> specialPercept.barCodeId;
00200                                         break;
00201   case SpecialPercept::autoShutter: stream.read(&(specialPercept.shutterSelected), sizeof(bool));
00202                                         break;
00203   case SpecialPercept::openChallengeBridge: stream >> specialPercept.ocBridge;
00204                                         break;
00205   case SpecialPercept::openChallengeRedLine: stream >> specialPercept.ocRedLine;
00206                                         break;
00207   case SpecialPercept::challengeOrientation: stream >> specialPercept.orientation;
00208                                       break;
00209   case SpecialPercept::none:            break;
00210   }
00211 
00212   return stream;
00213 }
00214  
00215 Out& operator<<(Out& stream, const SpecialPercept& specialPercept)
00216 {
00217   stream << specialPercept.frameNumber;
00218   stream << (char)specialPercept.type;
00219   switch(specialPercept.type)
00220   {
00221   case SpecialPercept::motionDetection: stream << specialPercept.mostMovement.x << specialPercept.mostMovement.y << specialPercept.leastMovement.x << specialPercept.leastMovement.y;
00222                                         break;
00223   case SpecialPercept::checkerboard: stream << specialPercept.checkerPose.translation.x << specialPercept.checkerPose.translation.y << specialPercept.checkerPose.rotation;
00224                                         break;
00225   case SpecialPercept::barCode: stream << specialPercept.barCodeId;
00226                                         break;
00227   case SpecialPercept::autoShutter: stream.write(&(specialPercept.shutterSelected), sizeof(bool));
00228                                         break;
00229   case SpecialPercept::openChallengeBridge: stream << specialPercept.ocBridge;
00230                                         break;
00231   case SpecialPercept::openChallengeRedLine: stream << specialPercept.ocRedLine;
00232                                         break;
00233   case SpecialPercept::challengeOrientation: stream << specialPercept.orientation;
00234   case SpecialPercept::none:            break;
00235   }
00236   
00237   return stream;
00238 }
00239 
00240 /*
00241  * Change log :
00242  * 
00243  * $Log: SpecialPercept.cpp,v $
00244  * Revision 1.5  2004/07/01 18:42:08  hamerla
00245  * SLAM challenge find Orientation
00246  *
00247  * Revision 1.4  2004/06/29 15:10:57  kerdels
00248  * Special Vision AutoShutter...
00249  *
00250  * Revision 1.3  2004/06/28 12:58:17  wachter
00251  * Added special-percept for challenge and corresponding symbols.
00252  *
00253  * Revision 1.2  2004/06/01 13:58:14  schumann
00254  * special percept type redLine added,
00255  * part 1 of open challenge added
00256  *
00257  * Revision 1.1.1.1  2004/05/22 17:26:03  cvsadm
00258  * created new repository GT2004_WM
00259  *
00260  * Revision 1.7  2004/05/20 16:30:03  kerdels
00261  * further work on open challenge
00262  *
00263  * Revision 1.6  2004/05/17 01:56:16  kerdels
00264  * prepared some symbols for the open challenge bridge detection
00265  *
00266  * Revision 1.5  2004/01/19 17:25:37  dueffert
00267  * frameNumber is now streamed in all cases
00268  *
00269  * Revision 1.4  2004/01/19 14:53:46  dueffert
00270  * all frameNumbers (and not only some of them) are unsigned long now
00271  *
00272  * Revision 1.3  2003/11/14 19:02:26  goehring
00273  * frameNumber added
00274  *
00275  * Revision 1.2  2003/11/10 13:29:45  dueffert
00276  * frame number added
00277  *
00278  * Revision 1.1  2003/10/07 10:09:36  cvsadm
00279  * Created GT2004 (M.J.)
00280  *
00281  * Revision 1.2  2003/07/30 14:55:54  dueffert
00282  * checkerboard percept improved
00283  *
00284  * Revision 1.1.1.1  2003/07/02 09:40:22  cvsadm
00285  * created new repository for the competitions in Padova from the 
00286  * tamara CVS (Tuesday 2:00 pm)
00287  *
00288  * removed unused solutions
00289  *
00290  * Revision 1.10  2003/05/26 08:12:10  juengel
00291  * Moved angleToFreePartOfGoal from specialPercept to obstaclesPercept.
00292  *
00293  * Revision 1.9  2003/05/01 10:20:58  roefer
00294  * Added distance and width for freePartOfO*Goal
00295  *
00296  * Revision 1.8  2003/04/23 16:12:03  juengel
00297  * Added angleToFreePartOfOwnGoal.
00298  *
00299  * Revision 1.7  2003/04/05 16:46:24  juengel
00300  * Added freePartOfOpponentGoal to streaming operator.
00301  *
00302  * Revision 1.6  2003/04/02 15:36:01  dueffert
00303  * new symbols added
00304  *
00305  * Revision 1.5  2003/03/06 11:48:48  dueffert
00306  * todo comments for missing cases added
00307  *
00308  * Revision 1.4  2003/01/22 15:20:25  dueffert
00309  * checkerboard stuff added
00310  *
00311  * Revision 1.3  2002/11/28 14:43:48  jhoffman
00312  * added a special percept for the motion detector
00313  *
00314  * Revision 1.2  2002/09/25 12:05:43  loetzsch
00315  * removed BarPercept and PatternPercept
00316  *
00317  * Revision 1.1  2002/09/10 15:26:40  cvsadm
00318  * Created new project GT2003 (M.L.)
00319  * - Cleaned up the /Src/DataTypes directory
00320  * - Removed Challenge Code
00321  * - Removed processing of incoming audio data
00322  * - Renamed AcousticMessage to SoundRequest
00323  *
00324  * Revision 1.5  2002/08/30 13:33:05  dueffert
00325  * removed unused includes
00326  *
00327  * Revision 1.4  2002/05/17 11:51:48  brunn
00328  * first experimental version of the barPerceptor
00329  *
00330  * Revision 1.3  2002/05/15 11:24:31  brunn
00331  * barEnd poses instead of complete bar pose
00332  * and initialization added
00333  *
00334  * Revision 1.2  2002/05/11 06:03:32  juengel
00335  * Constructor for PatternPercept added.
00336  *
00337  * Revision 1.1  2002/05/10 17:40:26  juengel
00338  * Added SpecialVision and SpecialPercept.
00339  *
00340  */

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