00001 /** 00002 * @file WalkingEngineSelector.h 00003 * 00004 * Definition of class WalkingEngineSelector 00005 * 00006 * @author Max Risler 00007 */ 00008 00009 #ifndef __WalkingEngineSelector_h_ 00010 #define __WalkingEngineSelector_h_ 00011 00012 #include "Tools/Module/ModuleSelector.h" 00013 00014 #include "InvKinWalkingParameterSets.h" 00015 #include "GT2004WalkingEngine.h" 00016 #include "BB2004InvKinWalkingEngine.h" 00017 #include "MSH2004InvKinWalkingEngine.h" 00018 00019 /** 00020 * @class WalkingEngineSelector 00021 * 00022 * A module selector for WalkingEngine modules. 00023 */ 00024 class WalkingEngineSelector : public ModuleSelector, public WalkingEngine 00025 { 00026 public: 00027 /** 00028 * Constructor. 00029 * @param handler The module handler of the process. 00030 * @param moduleID The module id of the walking engine. 00031 * @param interfaces The paramters of the MotionControl module. 00032 * @param pInvKinWalkingEngine Pointer to an InvKinWalkingEngine to be used to avoid having different engines for different parameter sets. 00033 */ 00034 WalkingEngineSelector(ModuleHandler &handler, 00035 SolutionRequest::ModuleID moduleID, 00036 const WalkingEngineInterfaces& interfaces, 00037 InvKinWalkingEngine* pInvKinWalkingEngine) 00038 : ModuleSelector(moduleID), 00039 WalkingEngine(interfaces), pInvKinWalkingEngine(pInvKinWalkingEngine) 00040 { 00041 handler.setModuleSelector(moduleID,this); 00042 } 00043 00044 00045 /** 00046 * Is called on start and when the selected solution changes 00047 * to create a specific solution. 00048 * @param id The id of the solution to create 00049 * @return The created solution or 0 00050 */ 00051 virtual Module* createSolution(SolutionRequest::ModuleSolutionID id) 00052 { 00053 switch(id) { 00054 // "Real" WalkingEngine solutions 00055 // 00056 case SolutionRequest::gt2004WalkingEngine: 00057 return new GT2004WalkingEngine(*this); 00058 00059 case SolutionRequest::invKinBB2004WalkingEngine: 00060 return new BB2004InvKinWalkingEngine(pInvKinWalkingEngine); 00061 00062 case SolutionRequest::invKinMSH2004WalkingEngine: 00063 return new MSH2004InvKinWalkingEngine(pInvKinWalkingEngine); 00064 00065 // ParamInvKinWalkingEngines 00066 // 00067 case SolutionRequest::invKinUpsideDownWalkingEngine: 00068 return new ParamInvKinWalkingEngine(new UpsideDownWalkingParameters, pInvKinWalkingEngine); 00069 00070 case SolutionRequest::invKinTurnWithBallWalkingEngine: 00071 return new ParamInvKinWalkingEngine(new TurnWithBallWalkingParameters, pInvKinWalkingEngine); 00072 00073 case SolutionRequest::invKinTurnKickWalkingEngine: 00074 return new ParamInvKinWalkingEngine(new TurnKickWalkingParameters, pInvKinWalkingEngine); 00075 00076 default: 00077 return 0; 00078 } 00079 } 00080 00081 /** Executes the module */ 00082 bool executeParameterized(JointData& jointData, const WalkRequest& walkRequest, double positionInWalkingCycle) 00083 { 00084 if (selectedSolution!=0) 00085 { 00086 return ((WalkingEngine*)selectedSolution)->executeParameterized(jointData, walkRequest, positionInWalkingCycle); 00087 } 00088 else 00089 { 00090 //if no WE is enabled, 2do: 00091 jointData.data[JointData::neckTilt] = jointDataInvalidValue; 00092 jointData.data[JointData::headPan] = jointDataInvalidValue; 00093 jointData.data[JointData::headTilt] = jointDataInvalidValue; 00094 return false; 00095 } 00096 } 00097 /** Handles a message */ 00098 virtual bool handleMessage(InMessage& message) 00099 { 00100 if (selectedSolution!=0) 00101 return ((WalkingEngine*)selectedSolution)->handleMessage(message); 00102 else return false; 00103 } 00104 00105 /** The only used InvKinWalkingEngine */ 00106 InvKinWalkingEngine* pInvKinWalkingEngine; 00107 }; 00108 00109 #endif // __WalkingEngineSelector_h_ 00110 00111 /* 00112 * Change log : 00113 * 00114 * $Log: WalkingEngineSelector.h,v $ 00115 * Revision 1.6 2004/07/10 00:13:54 spranger 00116 * renaming for coderelease and preparations for gt2005 00117 * 00118 * Revision 1.5 2004/06/14 16:47:08 juengel 00119 * Removed some WalkingEngineParameterSets. 00120 * 00121 * Revision 1.4 2004/06/07 18:47:50 spranger 00122 * extended interface of executeParametrized by positionInWalkCycle 00123 * 00124 * Revision 1.3 2004/06/02 17:18:23 spranger 00125 * MotionRequest cleanup 00126 * 00127 * Revision 1.2 2004/05/27 17:13:37 jhoffman 00128 * - renaming: tilt1 -> neckTilt, pan -> headPan, tilt2 -> headTilt 00129 * - clipping included for setJoints 00130 * - removed some microrad/rad-bugs 00131 * - bodyPosture constructor and "=" operator fixed 00132 * 00133 * Revision 1.1.1.1 2004/05/22 17:23:12 cvsadm 00134 * created new repository GT2004_WM 00135 * 00136 * Revision 1.21 2004/04/28 17:08:16 goehring 00137 * Head Motion control possible when switched off 00138 * 00139 * Revision 1.20 2004/04/09 11:35:53 roefer 00140 * Bremen Byters German Open check-in 00141 * 00142 * Revision 1.19 2004/04/08 15:33:07 wachter 00143 * GT04 checkin of Microsoft-Hellounds 00144 * 00145 * Revision 1.18 2004/04/07 12:29:00 risler 00146 * ddd checkin after go04 - first part 00147 * 00148 * Revision 1.5 2004/04/02 23:44:40 dthomas 00149 * added new invKinParams for turn with ball 00150 * integrated into rotate-around-ball 00151 * combined with updated catch-ball head-control-mode 00152 * 00153 * Revision 1.4 2004/04/02 09:27:54 Marc 00154 * Removed Opponent Team Code 00155 * 00156 * Revision 1.3 2004/03/31 10:08:08 dthomas 00157 * added new parameterset for ers7 based on jolly pochie 00158 * 00159 * Revision 1.2 2004/03/29 10:06:24 dthomas 00160 * added new ers7 walking engine parameters 00161 * 00162 * Revision 1.1.1.1 2004/03/29 08:28:46 Administrator 00163 * initial transfer from tamara 00164 * 00165 * Revision 1.17 2004/03/22 21:58:13 roefer 00166 * True odometry 00167 * 00168 * Revision 1.16 2004/03/17 15:38:51 thomas 00169 * added walkType debug for debugging WalkingEngineParameterSets 00170 * paramSets-messages send by debug-message are stored in the new debug-walkType only 00171 * 00172 * Revision 1.15 2004/03/17 01:10:51 cesarz 00173 * added MSH2004TurnWithBallWalkingParameters 00174 * 00175 * Revision 1.14 2004/03/16 18:47:09 kindler 00176 * - added real class for MSH2004InvKinWalkingEngine solution. 00177 * 00178 * Revision 1.13 2004/03/10 17:45:21 kindler 00179 * - Added MSH2004 InvKinWalkingEngine parameter set. 00180 * 00181 * Revision 1.12 2004/03/08 02:29:50 roefer 00182 * Interfaces should be const 00183 * 00184 * Revision 1.11 2004/03/04 18:21:21 juengel 00185 * Added ERS7TurnWithBallWalkingParameters. 00186 * 00187 * Revision 1.10 2004/03/03 21:17:07 roefer 00188 * For the sake of consistency, renamed BB* to BB2004* 00189 * 00190 * Revision 1.9 2004/02/04 13:41:33 roefer 00191 * Some place holders for BB2004 modules added 00192 * 00193 * Revision 1.8 2004/01/21 14:31:58 loetzsch 00194 * Module Selectors create only the selected solution. 00195 * When the solution changes, the old solution is erased and the new 00196 * one ist created using createSolution(..) 00197 * 00198 * Revision 1.7 2004/01/13 18:35:23 loetzsch 00199 * added invkin:walkingparameterset ERS7 00200 * 00201 * Revision 1.6 2003/12/29 15:48:54 roefer 00202 * Bremen Byters evo walking added 00203 * 00204 * Revision 1.5 2003/12/02 18:07:14 dueffert 00205 * first working not yet calibrated version of UDWalkingEngine added 00206 * 00207 * Revision 1.4 2003/11/22 09:33:01 jhoffman 00208 * added "Yet Another Inv Kin Walking Engine" 00209 * experimental stage, doesn't do much yet 00210 * no Fourier inside! 00211 * 00212 * Revision 1.3 2003/11/21 15:44:19 dueffert 00213 * fast forward walking added 00214 * 00215 * Revision 1.2 2003/10/24 15:01:25 loetzsch 00216 * added UNSW2003WalkingEngine 00217 * 00218 * Revision 1.1 2003/10/06 14:10:15 cvsadm 00219 * Created GT2004 (M.J.) 00220 * 00221 * Revision 1.5 2003/09/25 10:12:58 juengel 00222 * Removed some walking engines. 00223 * 00224 * Revision 1.4 2003/07/24 13:58:22 risler 00225 * added parameter set UNSW2003 00226 * 00227 * Revision 1.3 2003/07/24 12:41:26 risler 00228 * ParamInvKinWalkingEngine no longer is template class -> 10min boot bug fixed 00229 * 00230 * Revision 1.2 2003/07/02 14:56:58 roefer 00231 * Several walking engines removed 00232 * 00233 * Revision 1.1.1.1 2003/07/02 09:40:24 cvsadm 00234 * created new repository for the competitions in Padova from the 00235 * tamara CVS (Tuesday 2:00 pm) 00236 * 00237 * removed unused solutions 00238 * 00239 * Revision 1.21 2003/06/14 21:45:47 roefer 00240 * GT2003 walking parameters redesign 00241 * 00242 * Revision 1.20 2003/06/12 21:42:27 roefer 00243 * GT2003 walking parameters finished 00244 * 00245 * Revision 1.19 2003/06/09 19:59:05 roefer 00246 * GT2003 walking engine parameters added 00247 * 00248 * Revision 1.18 2003/05/07 17:00:49 goehring 00249 * Added new walking solution 'Swing' 00250 * 00251 * Revision 1.17 2003/04/16 07:00:16 roefer 00252 * Bremen GO checkin 00253 * 00254 * Revision 1.18 2003/04/09 09:39:28 roefer 00255 * InvKin:UNSWLargeStep added 00256 * 00257 * Revision 1.17 2003/04/08 18:28:28 roefer 00258 * bodyTiltOffset added 00259 * 00260 * Revision 1.16 2003/04/04 17:37:38 dueffert 00261 * a bunch of fine tuning 00262 * 00263 * Revision 1.15 2003/03/31 14:16:20 hebbel 00264 * Walking parameters for turning with ball added 00265 * 00266 * Revision 1.14 2003/03/06 12:08:45 dueffert 00267 * execute with parameters renamed to avoid inheritance warnings 00268 * 00269 * Revision 1.13 2003/03/03 17:35:08 risler 00270 * added CMUClone parameter set 00271 * 00272 * Revision 1.12 2003/02/25 11:43:44 dueffert 00273 * line feed and doxygen bugs fixed 00274 * 00275 * Revision 1.11 2003/02/19 16:55:17 hebbel 00276 * Added evolved parameterset for InvKinWalkingEngine 00277 * 00278 * Revision 1.10 2003/02/17 16:17:47 dueffert 00279 * sorry Jan, but Motion needs mysterious 10 minutes to start with Fourier 00280 * 00281 * Revision 1.9 2003/01/23 16:44:10 risler 00282 * only one instance of InvKinWalkingEngine 00283 * parameter sets can now be switched while walking 00284 * added UNSWFastTurn, combining two parameter sets 00285 * 00286 * Revision 1.8 2003/01/18 17:45:59 risler 00287 * added upsideDown parameters 00288 * 00289 * Revision 1.7 2003/01/09 14:04:27 jhoffman 00290 * added Inv Kin Parameter Set 00291 * 00292 * Revision 1.6 2002/12/20 13:50:54 dueffert 00293 * CMU2002WalkingEngine added 00294 * 00295 * Revision 1.4 2002/12/16 14:49:10 dueffert 00296 * changelog added 00297 * 00298 * Revision 1.3 2002/09/22 18:40:54 risler 00299 * added new math functions, removed GTMath library 00300 * 00301 * Revision 1.2 2002/09/11 00:06:59 loetzsch 00302 * continued change of module/solution mechanisms 00303 * 00304 * Revision 1.1 2002/09/10 15:36:16 cvsadm 00305 * Created new project GT2003 (M.L.) 00306 * - Cleaned up the /Src/DataTypes directory 00307 * - Removed challenge related source code 00308 * - Removed processing of incoming audio data 00309 * - Renamed AcousticMessage to SoundRequest 00310 * 00311 * Revision 1.5 2002/09/01 18:06:41 loetzsch 00312 * removed 2 walking engines 00313 * 00314 * Revision 1.4 2002/08/21 11:50:42 cesarz 00315 * GT2001PlayersPerceptor, BerlinSelfLocator, GT2001WalkingEngine, 00316 * DoWalkingEngine, FuzzyBehaviorControl, BremenGOBehaviorControl, 00317 * FuzzyBehaviortesterdlgbar and Behaviortesterdlgbar removed. 00318 * 00319 * Revision 1.3 2002/07/23 13:33:43 loetzsch 00320 * new streaming classes 00321 * 00322 * removed many #include statements 00323 * 00324 * Revision 1.2 2002/06/17 05:06:10 risler 00325 * added FixedSequenceWalkingEngine 00326 * 00327 * Revision 1.1 2002/06/01 13:38:35 risler 00328 * reorganized walking engine selection 00329 * 00330 * Revision 1.3 2002/05/16 15:05:49 risler 00331 * added walk type walkWithBall 00332 * 00333 * Revision 1.2 2002/05/15 08:08:53 risler 00334 * changed default walk, added InvKin:Dortmund to selector 00335 * 00336 * Revision 1.1.1.1 2002/05/10 12:40:17 cvsadm 00337 * Moved GT2002 Project from ute to tamara. 00338 * 00339 * Revision 1.3 2002/05/03 16:10:19 risler 00340 * added UNSWClone InvKinWE Parameters 00341 * 00342 * Revision 1.2 2002/04/29 13:48:20 risler 00343 * added lastWalkType to WalkingEngine execute 00344 * 00345 * Revision 1.1 2002/04/26 13:35:32 risler 00346 * DarmstadtGOWalkingEngine renamed to InvKinWalkingEngine 00347 * added InvKinParameterSets 00348 * 00349 * Revision 1.18 2002/04/25 14:50:35 kallnik 00350 * changed double/float to double 00351 * added several #include GTMath 00352 * 00353 * PLEASE use double 00354 * 00355 * Revision 1.17 2002/04/18 10:25:33 roefer 00356 * Bremen GO 00357 * 00358 * Revision 1.16 2002/04/16 21:11:54 dueffert 00359 * UNSW walk added 00360 * 00361 * Revision 1.15 2002/04/16 16:41:50 dueffert 00362 * no message 00363 * 00364 * Revision 1.14 2002/04/15 13:39:23 rentmeister 00365 * DoWalkingEngine (Dortmunder WalkingEngine) 00366 * 00367 * Revision 1.13 2002/04/05 16:46:34 kosen 00368 * BremenGOWalkingEngine added 00369 * 00370 * Revision 1.12 2002/04/04 15:07:59 rentmeister 00371 * Walk with Ball hinzugefügt 00372 * 00373 * Revision 1.11 2002/03/29 19:36:53 risler 00374 * added DarmstadtGOWalkingEngine 00375 * 00376 * Revision 1.10 2002/03/24 17:45:07 juengel 00377 * Bugs FourierWalking fixed. 00378 * 00379 * Revision 1.9 2002/03/18 09:45:36 kallnik 00380 * GTMathTable updated 00381 * GTMathConfig updated 00382 * several doubles changed in GTMathValue 00383 * 00384 * Revision 1.8 2002/03/12 14:31:58 jhoffman 00385 * added fourier walking engine 00386 * 00387 * Revision 1.7 2002/02/28 16:28:25 risler 00388 * added GT2001WalkingParameters 00389 * 00390 * Revision 1.6 2002/01/20 13:00:18 risler 00391 * changed implementation of selecting default solution 00392 * 00393 * Revision 1.5 2002/01/17 14:35:48 risler 00394 * SolutionRequest added 00395 * 00396 * Revision 1.4 2001/12/10 17:47:08 risler 00397 * change log added 00398 * 00399 */