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

Processes/CMD/Motion.cpp

Go to the documentation of this file.
00001 /** 
00002 * @file Motion.cpp
00003 * Implementation of class Motion
00004 */
00005 #include "Motion.h"
00006  
00007 #include "Platform/Sensors.h"
00008 #include "Tools/RobotConfiguration.h"
00009 #include "Tools/Debugging/Stopwatch.h"
00010 
00011 /*
00012 * that's very fine - with this blocking sender
00013 * the robot can call for a new set of data and
00014 * decide itself when motion should be started
00015 */
00016 Motion::Motion () :
00017 INIT_DEBUGGING,
00018 INIT_RECEIVER_SENSORDATA(false),
00019 INIT_RECEIVER(PackageCognitionMotion,false),
00020 
00021 INIT_SENDER_MOTORCOMMANDS(true),
00022 INIT_SENDER_SOUNDDATA(false),
00023 INIT_SENDER(PackageMotionCognition,false),
00024 INIT_SENDER(OdometryData,false),
00025 
00026 gameSpeed(1.0),
00027 headIsBlockedBySpecialActionOrWalk(false),
00028 motionControlExecuteSlowMotion(1)
00029 {
00030   frameNumber = 0;
00031   debugIn.setSize(200000);
00032   debugOut.setSize(2000);
00033   
00034   SensorDataProcessorInterfaces sensorDataProcessorInterfaces(    
00035     theSensorDataBufferReceiver,theSensorDataBufferReceiver.frame[0].frameNumber,
00036     thePackageMotionCognitionSender.motionInfo,
00037     bodyPercept, bodyPosture, cameraMatrix, psdPercept);
00038   pSensorDataProcessor = new SensorDataProcessorSelector(moduleHandler, sensorDataProcessorInterfaces);
00039   // PRINT("Motion:: SensorDataProcessor created");
00040   
00041 
00042   HeadControlInterfaces headControlInterfaces(
00043     frameNumber,
00044     theSensorDataBufferReceiver, 
00045     cameraMatrix,
00046     theOdometryDataSender,
00047     bodyPosture,
00048     thePackageCognitionMotionReceiver.ballModel,
00049     thePackageCognitionMotionReceiver.robotPose,
00050     thePackageCognitionMotionReceiver.landmarksState,
00051     thePackageCognitionMotionReceiver.robotState,
00052     thePackageMotionCognitionSender.motionInfo,
00053     thePackageCognitionMotionReceiver.headControlMode,
00054     headIsBlockedBySpecialActionOrWalk,
00055     headMotionRequest,
00056     theMotorCommandsSender.pidData
00057   );
00058   pHeadControl = new HeadControlSelector(moduleHandler, headControlInterfaces);
00059   // PRINT("Motion:: HeadControl created");
00060   
00061   LEDControlInterfaces ledControlInterfaces(
00062     frameNumber,
00063     thePackageCognitionMotionReceiver.ledRequest,
00064     thePackageCognitionMotionReceiver.wLanStatus, 
00065     theMotorCommandsSender.ledValue);
00066   pLEDControl = new LEDControlSelector(moduleHandler, ledControlInterfaces);
00067   // PRINT("Motion:: LEDControl created");
00068   
00069   MotionControlInterfaces motionControlInterfaces(
00070     frameNumber,
00071     thePackageCognitionMotionReceiver.motionRequest, headMotionRequest, theSensorDataBufferReceiver, bodyPosture,
00072     thePackageCognitionMotionReceiver.invKinWalkingParameters,
00073     thePackageCognitionMotionReceiver.gt2004WalkingParameters,
00074     thePackageCognitionMotionReceiver.walkParameterTimeStamp,
00075     theSensorDataBufferReceiver.receivedNew(),
00076     theMotorCommandsSender.jointDataBuffer,
00077     theMotorCommandsSender.pidData,
00078     theOdometryDataSender,
00079     thePackageMotionCognitionSender.motionInfo,
00080     headIsBlockedBySpecialActionOrWalk);
00081   pMotionControl = new MotionControlSelector(moduleHandler, motionControlInterfaces);
00082   // PRINT("Motion:: MotionControl created");
00083   
00084   SoundControlInterfaces soundControlInterfaces(
00085     thePackageCognitionMotionReceiver.soundRequest, theSoundDataSender);
00086   pSoundControl = new SoundControlSelector(moduleHandler, soundControlInterfaces);
00087   // PRINT("Motion:: SoundControl created");
00088   
00089 }
00090 
00091 Motion::~Motion()
00092 {
00093   delete pSensorDataProcessor;
00094   delete pHeadControl;
00095   delete pLEDControl;
00096   delete pMotionControl;
00097   delete pSoundControl;
00098 }
00099 
00100 int Motion::main() 
00101 {
00102   if(theSensorDataBufferReceiver.receivedNew())
00103   {
00104     frameNumber = theSensorDataBufferReceiver.frame[0].frameNumber;
00105     // without STOP_TIME
00106     pSensorDataProcessor->execute();
00107   }
00108   else
00109   {
00110     frameNumber++;
00111   }
00112   INFO(sendJointData,idJointData,bin,theMotorCommandsSender.jointDataBuffer.frame[0]);
00113   
00114 #ifndef _WIN32
00115   if (
00116     SystemCall::getTimeSince(thePackageCognitionMotionReceiver.timeStamp) > 2000
00117     &&
00118     frameNumber > 3000 // don't swing if the Motion process is called the first time
00119     )
00120   {
00121     thePackageCognitionMotionReceiver.motionRequest.motionType = MotionRequest::specialAction;
00122     thePackageCognitionMotionReceiver.motionRequest.specialActionRequest.specialActionType = SpecialActionRequest::swing;
00123     OUTPUT(idText, text, "framNumber: " << frameNumber << " Motion: no packages from Cognition for 2000ms");
00124   }
00125 #endif
00126 
00127 #ifndef _WIN32
00128   if (thePackageCognitionMotionReceiver.motionRequest.updateRP)
00129   {
00130     if((lastFrameRobotPoseWasUpdated != thePackageCognitionMotionReceiver.robotPose.frameNumber) &&
00131     (frameNumber != thePackageCognitionMotionReceiver.robotPose.frameNumber))
00132     {
00133       int frameDifference = (int)(frameNumber - 
00134         thePackageCognitionMotionReceiver.robotPose.frameNumber);
00135 
00136        // OUTPUT(idText, text, "+ new rp! " << frameDifference << ", " << thePackageCognitionMotionReceiver.robotPose.frameNumber);
00137 
00138       thePackageCognitionMotionReceiver.robotPose += 
00139         (theOdometryDataSender - odometryHistory.getEntry(frameDifference + 1));
00140     } 
00141     else
00142     {
00143       thePackageCognitionMotionReceiver.robotPose += (theOdometryDataSender - lastOdometry);  
00144     }  
00145   lastOdometry = theOdometryDataSender;
00146   odometryHistory.add(theOdometryDataSender);
00147   lastFrameRobotPoseWasUpdated = thePackageCognitionMotionReceiver.robotPose.frameNumber;
00148   }
00149 
00150   // OUTPUT(idText, text, "[" << frameNumber << "] od: " << theOdometryDataSender.rotation << " rp: " << thePackageCognitionMotionReceiver.robotPose.rotation);
00151 #endif
00152 
00153   STOP_TIME_ON_REQUEST(headControl,pHeadControl->execute(););
00154   getPlayer().setTeamColor(thePackageCognitionMotionReceiver.teamColor);
00155   pLEDControl->execute();
00156   
00157   // slow down the motion request if requested
00158   thePackageCognitionMotionReceiver.motionRequest.walkRequest.walkParams.translation.x *= gameSpeed;
00159   thePackageCognitionMotionReceiver.motionRequest.walkRequest.walkParams.translation.y *= gameSpeed;
00160   thePackageCognitionMotionReceiver.motionRequest.walkRequest.walkParams.rotation *= gameSpeed;
00161   
00162   if(frameNumber % motionControlExecuteSlowMotion == 0){
00163     
00164     STOP_TIME_ON_REQUEST(motionControl,pMotionControl->execute(););
00165     thePackageMotionCognitionSender.motionInfo.executedMotionRequest.setFrameNumber(frameNumber);
00166     
00167   }
00168   
00169   theMotorCommandsSender.send();
00170   
00171   INFO(sendMotionInfo, idMotionInfo, bin, thePackageMotionCognitionSender.motionInfo);
00172   INFO(sendBodyPosture, idBodyPosture, bin, bodyPosture);
00173   
00174   if(theSoundDataSender.requestedNew())
00175   {
00176     STOP_TIME_ON_REQUEST(soundControl,pSoundControl->execute(););
00177     if (theSoundDataSender.isInUse) theSoundDataSender.send();            
00178   }
00179   
00180   // speed up the executed motion request again
00181   thePackageMotionCognitionSender.motionInfo.executedMotionRequest.walkRequest.walkParams.translation.x /= gameSpeed;
00182   thePackageMotionCognitionSender.motionInfo.executedMotionRequest.walkRequest.walkParams.translation.x /= gameSpeed;
00183   thePackageMotionCognitionSender.motionInfo.executedMotionRequest.walkRequest.walkParams.rotation /= gameSpeed;
00184   thePackageMotionCognitionSender.timeStamp = SystemCall::getCurrentSystemTime();
00185 
00186   theOdometryDataSender.send();
00187   thePackageMotionCognitionSender.send();
00188   theDebugSender.send();
00189   
00190   return 0;
00191 }
00192 
00193 
00194 bool Motion::handleMessage(InMessage& message)
00195 {
00196   switch (message.getMessageID())
00197   {
00198   case idOdometryData:
00199     message.bin >> theOdometryDataSender;
00200     return true;
00201   case idHeadMotionRequest:
00202     message.bin >> headMotionRequest;
00203     return true;
00204   case idPIDData:
00205     message.bin >> theMotorCommandsSender.pidData;
00206     return true;
00207   case idGameSpeed:
00208     message.bin >> gameSpeed;
00209     return true;
00210   case idMotionControlSlowMotion:
00211     {
00212       double newMCSLowMo;
00213       message.bin >> newMCSLowMo;
00214       if(newMCSLowMo>=1){
00215         motionControlExecuteSlowMotion = (unsigned  int)newMCSLowMo;
00216       }
00217     }
00218     return true;
00219   case idBodyOffsets:
00220     getRobotConfiguration().handleMessage(message);
00221     return true;
00222   case idXabsl2DebugRequest:
00223     return pHeadControl->handleMessage(message);
00224   case idOdometryScale:
00225     pMotionControl->handleMessage(message);
00226     return true;
00227   default:
00228     return Process::handleMessage(message);
00229   }
00230 }
00231 
00232 MAKE_PROCESS(Motion);
00233 
00234 /*
00235 * Change log :
00236 * 
00237 * $Log: Motion.cpp,v $
00238 * Revision 1.26  2004/07/10 00:13:56  spranger
00239 * renaming for coderelease and preparations for gt2005
00240 *
00241 * Revision 1.25  2004/06/23 17:52:50  juengel
00242 * don't swing if the Motion process is called the first time
00243 *
00244 * Revision 1.24  2004/06/21 20:03:40  dueffert
00245 * shiny new bug fixed
00246 *
00247 * Revision 1.23  2004/06/21 18:05:23  dueffert
00248 * smarter recognition of missing packages between Motion and Cognition
00249 *
00250 * Revision 1.22  2004/06/17 21:06:25  spranger
00251 * added OUTPUT for not receiving packages from Cognition
00252 *
00253 * Revision 1.21  2004/06/17 17:29:52  spranger
00254 * added timeStamp to package motioncognition
00255 *
00256 * Revision 1.20  2004/06/17 14:15:27  spranger
00257 * replaced executedMotionRequest-debugKeys and Messages with motionInfo from Motion
00258 *
00259 * Revision 1.19  2004/06/14 16:24:09  spranger
00260 * changed the motionrequest to playdead (from swing) if theres no recent motionrequest from cognition
00261 *
00262 * Revision 1.18  2004/06/09 18:58:31  spranger
00263 * added MotionControl-slowmotion
00264 *
00265 * Revision 1.17  2004/06/09 07:45:57  juengel
00266 * Added frameNumber to LEDControlInterfaces.
00267 *
00268 * Revision 1.16  2004/06/08 15:31:13  juengel
00269 * Added frameNumber to MotionControlInterfaces.
00270 *
00271 * Revision 1.15  2004/06/02 17:18:24  spranger
00272 * MotionRequest cleanup
00273 *
00274 * Revision 1.14  2004/05/29 18:21:27  dueffert
00275 * walk parameter evolution, measurement and calibration stuff ported to GT2004_WM
00276 *
00277 * Revision 1.13  2004/05/27 10:53:55  spranger
00278 * bug fixx
00279 *
00280 * Revision 1.12  2004/05/27 10:20:13  loetzsch
00281 * clean up in the robot pose update
00282 *
00283 * Revision 1.11  2004/05/27 09:40:09  loetzsch
00284 * clean up
00285 *
00286 * Revision 1.10  2004/05/27 09:29:28  loetzsch
00287 * removed executedMotionRequest from Interfaces
00288 *
00289 * Revision 1.9  2004/05/26 20:17:12  juengel
00290 * Removed calculation RobotVertices.
00291 *
00292 * Revision 1.8  2004/05/26 18:36:03  loetzsch
00293 * cleanup in the head control interfaces
00294 *
00295 * Revision 1.7  2004/05/26 17:31:34  dueffert
00296 * better data types used
00297 *
00298 * Revision 1.6  2004/05/26 17:12:55  juengel
00299 * Added idBodyPosture.
00300 *
00301 * Revision 1.5  2004/05/26 15:18:44  juengel
00302 * Added BodyPosture.
00303 *
00304 * Revision 1.4  2004/05/25 12:49:07  tim
00305 * added RobotState to HeadControl
00306 *
00307 * Revision 1.3  2004/05/23 18:56:33  spranger
00308 * added framenumber to HeadControl interface
00309 *
00310 * Revision 1.2  2004/05/22 22:52:02  juengel
00311 * Renamed ballP_osition to ballModel.
00312 *
00313 * Revision 1.1.1.1  2004/05/22 17:24:58  cvsadm
00314 * created new repository GT2004_WM
00315 *
00316 * Revision 1.23  2004/05/18 11:38:16  loetzsch
00317 * the Motion process now also executes a SensorDataProcessor for the calculation of the cameraMatrix
00318 *
00319 * Revision 1.22  2004/05/17 19:21:51  loetzsch
00320 * renamed all Variables "cameraMatrix" to "cameraMatrix2"
00321 *
00322 * Revision 1.21  2004/05/17 18:38:27  loetzsch
00323 * continued support for multiple Xabsl engines in different modules
00324 *
00325 * Revision 1.20  2004/05/14 14:12:08  wachter
00326 * - Added communication support for 5 robots
00327 * - rewrote parts of team-communication to be faster and more stable
00328 *
00329 * Revision 1.19  2004/05/10 10:30:15  juengel
00330 * Added executedMotionRequest to HeadControlInterfaces.
00331 *
00332 * Revision 1.18  2004/04/11 18:49:45  roefer
00333 * Team color is sent again from Cognition to Motion.
00334 * Otherwise, messages sent by Motion may contain the wrong team color.
00335 *
00336 * Revision 1.17  2004/04/07 14:42:56  risler
00337 * moved LandsmarksState to Cognition directory, generated by SelfLocator
00338 *
00339 * Revision 1.16  2004/04/07 13:00:47  risler
00340 * ddd checkin after go04 - second part
00341 *
00342 * Revision 1.2  2004/04/01 19:52:44  Charlie
00343 * added LandmarkState
00344 *
00345 * Revision 1.1.1.1  2004/03/29 08:28:46  Administrator
00346 * initial transfer from tamara
00347 *
00348 * Revision 1.15  2004/03/28 14:06:41  jhoffman
00349 * renamed headcontrolmode ATH2004 in ATH2004ERS7
00350 *
00351 * Revision 1.15  2004/03/28 14:06:41  jhoffman
00352 * renamed headcontrolmode ATH2004 in ATH2004ERS7
00353 *
00354 * Revision 1.14  2004/03/27 14:45:08  loetzsch
00355 * removed team color from PackageCognitionMotion
00356 *
00357 * Revision 1.13  2004/03/22 21:58:14  roefer
00358 * True odometry
00359 *
00360 * Revision 1.12  2004/03/20 17:20:01  juengel
00361 * Added selector for LEDControl
00362 *
00363 * Revision 1.11  2004/03/20 09:55:26  roefer
00364 * Preparation for improved odometry
00365 *
00366 * Revision 1.10  2004/03/16 14:00:21  juengel
00367 * Integrated Improvments from "Günne"
00368 * -ATH2004ERS7Behavior
00369 * -ATHHeadControl
00370 * -KickSelectionTable
00371 * -KickEditor
00372 *
00373 * Revision 1.9  2004/03/10 12:17:50  roefer
00374 * Player bug fixed
00375 *
00376 * Revision 1.8  2004/03/08 15:29:11  tim
00377 * Sending the Player object to the Motion process
00378 *
00379 * Revision 1.2  2004/03/15 17:11:40  hoffmann
00380 * - added ATH2004HeadControl
00381 * - added ATH2004LEDControl
00382 * - headmotiontester shows "tilt2"
00383 * - motion process updates odometry while no new robotPose is received, added to motion request
00384 * - some ui adjustments
00385 * - added member function to "field" to find out if robot is in own penalty area for use in the obstacles locator
00386 *
00387 * Revision 1.7  2004/03/04 16:00:21  fritsche
00388 * added pidData to HeadControlInterfaces
00389 *
00390 * Revision 1.6  2004/03/04 10:05:26  jhoffman
00391 * - motion process now uses odometry to propagate the robot pose while no new robot pose is being sent (this makes headcontrol a little better)
00392 * - removed headcontrol member variable "propagatedPose" from headcontrol and cognition->motion-sender
00393 *
00394 * Revision 1.5  2004/02/16 17:57:43  dueffert
00395 * packageCognitionMotion extended with invkin parameters
00396 *
00397 * Revision 1.4  2003/12/16 19:02:45  loetzsch
00398 * The motion net file Config/spec_act.dat can be sent through WLAN to a robot.
00399 *
00400 * Revision 1.3  2003/11/24 15:31:20  dueffert
00401 * SpecialPercept removed from PackageCognition
00402 *
00403 * Revision 1.2  2003/11/14 19:02:26  goehring
00404 * frameNumber added
00405 *
00406 * Revision 1.1  2003/10/07 10:07:01  cvsadm
00407 * Created GT2004 (M.J.)
00408 *
00409 * Revision 1.7  2003/09/26 11:41:17  juengel
00410 * - sorted tools
00411 * - clean-up in DataTypes
00412 *
00413 * Revision 1.6  2003/09/05 16:47:12  juengel
00414 * idOdometryData is handled again.
00415 *
00416 * Revision 1.5  2003/09/05 14:38:44  juengel
00417 * idOdometryData is not handled any longer.
00418 *
00419 * Revision 1.4  2003/07/05 09:49:05  roefer
00420 * Generic debug message for bodyOffsets improved
00421 *
00422 * Revision 1.3  2003/07/03 22:50:41  dueffert
00423 * no spastic startup movements anymore: sending after calculating
00424 *
00425 * Revision 1.2  2003/07/02 10:48:17  loetzsch
00426 * removed a PRINT() statement
00427 *
00428 * Revision 1.1.1.1  2003/07/02 09:40:25  cvsadm
00429 * created new repository for the competitions in Padova from the 
00430 * tamara CVS (Tuesday 2:00 pm)
00431 *
00432 * removed unused solutions
00433 *
00434 * Revision 1.27  2003/06/15 22:42:22  loetzsch
00435 * no message
00436 *
00437 * Revision 1.26  2003/05/27 16:16:23  juengel
00438 * Added headIsBlockedBySpecialActionOrWalk.
00439 *
00440 * Revision 1.25  2003/05/13 11:42:05  goehring
00441 * CollisionDetector removed
00442 *
00443 * Revision 1.24  2003/05/03 16:20:43  roefer
00444 * bodyOffsets generic debug data
00445 *
00446 * Revision 1.23  2003/05/02 18:26:17  risler
00447 * SensorDataBuffer added
00448 * replaced SensorData with SensorDataBuffer
00449 * full SensorData resolution now accessible
00450 *
00451 * Revision 1.22  2003/04/26 11:36:21  juengel
00452 * Added delete pCollisionDetector.
00453 *
00454 * Revision 1.21  2003/04/25 19:49:44  goehring
00455 * Added new module CollisionDetector
00456 *
00457 * Revision 1.20  2003/04/16 07:00:16  roefer
00458 * Bremen GO checkin
00459 *
00460 * Revision 1.21  2003/04/08 18:28:28  roefer
00461 * bodyTiltOffset added
00462 *
00463 * Revision 1.20  2003/04/08 16:26:36  timrie
00464 * added current MotionRequest
00465 *
00466 * Revision 1.19  2003/04/07 16:51:31  jhoffman
00467 * send odometry to headcontrol
00468 *
00469 * Revision 1.18  2003/03/20 20:34:21  loetzsch
00470 * Game Toolbar now can adjust the game speed
00471 *
00472 * Revision 1.17  2003/03/07 19:04:59  juengel
00473 * Added INFO for the executedMotionRequest
00474 *
00475 * Revision 1.16  2002/12/07 16:40:45  roefer
00476 * Blocking for theDebugReceiver changed
00477 *
00478 * Revision 1.15  2002/11/28 23:06:12  hebbel
00479 * sending wavedata only if necessary
00480 *
00481 * Revision 1.14  2002/11/28 14:49:50  jhoffman
00482 * no message
00483 *
00484 * Revision 1.13  2002/11/19 17:12:47  risler
00485 * added datatype PIDData
00486 * support for sending new pid values at runtime
00487 *
00488 * Revision 1.12  2002/10/10 13:09:50  loetzsch
00489 * First experiments with the PSD Sensor
00490 * - SensorDataProcessor now calculates PSDPercept
00491 * - Added the PerceptBehaviorControl solution PSDTest
00492 * - Added the RadarViewer3D to RobotControl, which can display the Points3D structure
00493 *
00494 * Revision 1.11  2002/10/10 11:48:43  juengel
00495 * WATCH(sendJointData ...  and  WATCH(sendSensorData ...
00496 * replaced by
00497 * INFO(sendJointData ...  and  INFO(sendSensorData ...
00498 *
00499 * Revision 1.10  2002/09/19 12:15:13  loetzsch
00500 * made compilable for the gcc compiler.
00501 *
00502 * Revision 1.9  2002/09/18 19:52:36  loetzsch
00503 * the head state is now sent from Motion to Cognition using the package.
00504 *
00505 * Revision 1.8  2002/09/17 23:55:22  loetzsch
00506 * - unraveled several datatypes
00507 * - changed the WATCH macro
00508 * - completed the process restructuring
00509 *
00510 * Revision 1.7  2002/09/16 17:34:23  dueffert
00511 * anonymous contructors returns &CLASS with VS, but CLASS with gcc.
00512 *
00513 * Revision 1.6  2002/09/12 14:20:05  juengel
00514 * Created a package for all data sent from Cognition to Motion.
00515 *
00516 * Revision 1.5  2002/09/11 20:06:19  loetzsch
00517 * continued experiments with modules/solutions
00518 *
00519 * Revision 1.4  2002/09/11 17:26:31  loetzsch
00520 * continued change of module/solution mechanisms
00521 *
00522 * Revision 1.3  2002/09/11 13:43:19  loetzsch
00523 * Created a package for all data that are sent from Motion to Cognition.
00524 * Removed all previous Senders
00525 *
00526 * Revision 1.2  2002/09/11 00:06:59  loetzsch
00527 * continued change of module/solution mechanisms
00528 *
00529 * Revision 1.1  2002/09/10 15:41:25  cvsadm
00530 * Created new project GT2003 (M.L.)
00531 * - Cleaned up the /Src/DataTypes directory
00532 * - Removed challenge related source code
00533 * - Removed processing of incoming audio data
00534 * - Renamed AcousticMessage to SoundRequest
00535 * - Removed all process layouts
00536 * - Added process layout CMD
00537 *
00538 * Revision 1.10  2002/07/23 13:40:52  loetzsch
00539 * - new streaming classes
00540 * - removed many #include statements
00541 * - new design of debugging architecture
00542 * - exchanged StaticQueue with MessageQueue
00543 * - new debug message handling
00544 * - general clean up
00545 *
00546 * Revision 1.9  2002/06/28 10:30:51  roefer
00547 * OUTPUT is possible in constructors
00548 *
00549 * Revision 1.8  2002/05/29 15:54:29  cesarz
00550 * Removed deadlock in acoustic communication
00551 *
00552 * Revision 1.7  2002/05/27 15:39:13  fischer
00553 * Added SoundState (Sender and Receiver)
00554 *
00555 * Revision 1.6  2002/05/25 22:52:19  roefer
00556 * WLan, first working approach
00557 *
00558 * Revision 1.5  2002/05/23 12:15:19  hebbel
00559 * sends acoustic messages only if there is no other dog sending
00560 *
00561 * Revision 1.4  2002/05/16 22:36:11  roefer
00562 * Team communication and GTMath bugs fixed
00563 *
00564 * Revision 1.3  2002/05/15 07:28:55  hebbel
00565 * Uses Soundprotocol
00566 *
00567 * Revision 1.2  2002/05/14 18:54:30  hebbel
00568 * Sending audiodata only if it is not mute
00569 *
00570 * Revision 1.1.1.1  2002/05/10 12:40:19  cvsadm
00571 * Moved GT2002 Project from ute to tamara.
00572 *
00573 * Revision 1.33  2002/05/06 16:03:48  hebbel
00574 * Added buffered Sender for SoundDataOut
00575 *
00576 * Revision 1.32  2002/05/04 17:47:44  loetzsch
00577 * LEDControl now has access to an instance of WLanStatus
00578 * (which shall be displayed then with the green leds. follows next)
00579 *
00580 * Revision 1.31  2002/05/03 17:15:57  giese
00581 * StopTimeOnRequest for SoundOutControl added
00582 *
00583 * Revision 1.30  2002/04/29 17:17:28  hebbel
00584 * Put SoundPlay to Motion Process
00585 *
00586 * Revision 1.29  2002/04/23 10:38:30  risler
00587 * renamed headOdometry to headState
00588 *
00589 * Revision 1.28  2002/04/02 13:10:21  dueffert
00590 * big change: odometryData and cameraMatrix in image now, old logfiles may be obsolete
00591 *
00592 * Revision 1.27  2002/02/21 14:22:47  loetzsch
00593 * added several STOP_WATCH_ON_REQUEST macros
00594 *
00595 * Revision 1.26  2002/02/08 17:48:57  risler
00596 * SensorData to MotionControl
00597 *
00598 * Revision 1.25  2002/02/05 20:02:16  risler
00599 * handleDebugMessage now returns bool, added debug message handling to ImageProcessor
00600 *
00601 * Revision 1.24  2002/02/05 04:19:04  loetzsch
00602 * replaced several team color hacks by getPlayer().getTeamColor()
00603 *
00604 * added a few new module selectors
00605 *
00606 * changed distribution of debug messages completely
00607 *
00608 * Revision 1.23  2002/01/30 17:29:56  loetzsch
00609 * handleDebugMessage um Parameter timestamp erweitert
00610 *
00611 * Revision 1.22  2002/01/28 14:01:07  loetzsch
00612 * INFO macros for JointData and SensorData added
00613 *
00614 * Revision 1.21  2002/01/26 20:26:27  juengel
00615 * Nichts geändert
00616 *
00617 * Revision 1.20  2002/01/26 18:10:16  juengel
00618 * DebugDrawingManager umstrukturiert.
00619 *
00620 * Revision 1.19  2002/01/23 13:51:55  loetzsch
00621 * from Debug Queues odometry data is now sent to Motion and not to Perception
00622 *
00623 * Revision 1.18  2002/01/19 21:36:26  risler
00624 * added HeadMotionTester, HeadControlSelector
00625 *
00626 * Revision 1.17  2002/01/19 12:43:16  risler
00627 * enabled SolutionRequest, changed HandleDebugMessage calls
00628 *
00629 * Revision 1.16  2002/01/18 23:30:45  loetzsch
00630 * Distribution of HeadControlModes, HeadMotionRequests and SolutionRequests added
00631 *
00632 * Revision 1.15  2002/01/18 02:17:39  loetzsch
00633 * MotionTester dialog and distribution of MotionRequests
00634 * to the processes programmed.
00635 *
00636 * Revision 1.14  2001/12/21 14:09:39  roefer
00637 * Added several destructors
00638 *
00639 * Revision 1.13  2001/12/19 16:03:55  bach
00640 * SystemDataTypes replaced by Sensors
00641 *
00642 * Revision 1.12  2001/12/15 20:32:08  roefer
00643 * Senders and receivers are now part of the processes
00644 *
00645 * Revision 1.11  2001/12/14 12:34:09  dueffert
00646 * no message
00647 *
00648 * Revision 1.10  2001/12/12 18:08:56  loetzsch
00649 * Streaming- Operatoren für Bilder eingebaut, DebugKeyTable nicht- statisch gemacht, Debuggin Mechanismen weitergemacht, Bilder aus Logfiles in RobotControl anzeigen, Logfiles in HU1/Debug auf den Stick schreiben
00650 *
00651 * Revision 1.9  2001/12/11 18:14:45  kosen
00652 * SensorData added.
00653 *
00654 * problems with Receiver (multiple definition error) solved.
00655 *
00656 * Revision 1.8  2001/12/11 16:15:10  kosen
00657 * reihenfolge angepasst :)
00658 *
00659 * Revision 1.7  2001/12/11 16:06:49  kosen
00660 * aufruf von HeadControl::execute() angepasst.
00661 *
00662 * Revision 1.6  2001/12/10 17:47:08  risler
00663 * change log added
00664 *
00665 */

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