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