00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __WalkingEngineSelector_h_
00010 #define __WalkingEngineSelector_h_
00011
00012 #include "Tools/Module/ModuleSelector.h"
00013
00014 #include "InvKinWalkingParameterSets.h"
00015 #include "GT2005WalkingEngine.h"
00016 #include "GT2004WalkingEngine.h"
00017
00018
00019
00020
00021
00022
00023 class WalkingEngineSelector : public ModuleSelector, public WalkingEngine
00024 {
00025 public:
00026
00027
00028
00029
00030
00031
00032
00033 WalkingEngineSelector(ModuleHandler &handler,
00034 SolutionRequest::ModuleID moduleID,
00035 const WalkingEngineInterfaces& interfaces,
00036 InvKinWalkingEngine* pInvKinWalkingEngine)
00037 : ModuleSelector(moduleID),
00038 WalkingEngine(interfaces), pInvKinWalkingEngine(pInvKinWalkingEngine)
00039 {
00040 handler.setModuleSelector(moduleID,this);
00041 }
00042
00043
00044
00045
00046
00047
00048
00049
00050 virtual Module* createSolution(SolutionRequest::ModuleSolutionID id)
00051 {
00052 switch(id) {
00053 case SolutionRequest::gt2005WalkingEngine:
00054 return new GT2005WalkingEngine(*this);
00055
00056
00057
00058 case SolutionRequest::gt2004WalkingEngine:
00059 return new GT2004WalkingEngine(*this);
00060
00061
00062
00063 case SolutionRequest::invKinUpsideDownWalkingEngine:
00064 return new ParamInvKinWalkingEngine(new UpsideDownWalkingParameters, pInvKinWalkingEngine);
00065
00066 case SolutionRequest::invKinTurnWithBallWalkingEngine:
00067 return new ParamInvKinWalkingEngine(new TurnWithBallWalkingParameters, pInvKinWalkingEngine);
00068
00069 case SolutionRequest::invKinTurnKickWalkingEngine:
00070 return new ParamInvKinWalkingEngine(new TurnKickWalkingParameters, pInvKinWalkingEngine);
00071
00072 default:
00073 return 0;
00074 }
00075 }
00076
00077
00078 bool executeParameterized(JointData& jointData, const WalkRequest& walkRequest, double positionInWalkingCycle)
00079 {
00080 if (selectedSolution!=0)
00081 {
00082 return ((WalkingEngine*)selectedSolution)->executeParameterized(jointData, walkRequest, positionInWalkingCycle);
00083 }
00084 else
00085 {
00086
00087 jointData.data[JointData::neckTilt] = jointDataInvalidValue;
00088 jointData.data[JointData::headPan] = jointDataInvalidValue;
00089 jointData.data[JointData::headTilt] = jointDataInvalidValue;
00090 return false;
00091 }
00092 }
00093
00094 virtual bool handleMessage(InMessage& message)
00095 {
00096 if (selectedSolution!=0)
00097 return ((WalkingEngine*)selectedSolution)->handleMessage(message);
00098 else return false;
00099 }
00100
00101
00102 InvKinWalkingEngine* pInvKinWalkingEngine;
00103 };
00104
00105 #endif // __WalkingEngineSelector_h_