Conscience Core
CscKnowledgeItemMultiPodWalk.h
Go to the documentation of this file.
1 //
2 // CscKnowledgeItemMultiPodWalk.h
3 // ConscienceRobotManager
4 //
5 // Created by Max Lhermitte on 16/11/2022.
6 // Copyright © 2022 IliesZaoui. All rights reserved.
7 //
8 
9 #ifndef CscKnowledgeItemMultiPodWalk_h
10 #define CscKnowledgeItemMultiPodWalk_h
11 
16 
17 enum CscSide {
20 };
21 
22 enum WalkStep {
23  BendKnees = 0,
31 };
32 
34 
36  public:
37  // constructor
38  CscKnowledgeItemMultiPodWalk(int knoItemIdIn, string knoItemNameIn, int stepCountTarget, int nbLegs, const vector<const TargetMemberValues *> *inputsTargetValuesIn, const vector<const TargetMemberPonderation *> *inputsTargetPercentsIn, map<string, float> *outputsCanMoveValues, CscUnitType unitTypeIn, string targetOriginMember, bool symemtrySearch, int nbStateMax, const map<int, float> &maxDeltaPivotByPivotId, bool optionCutLastestIfTheSameAndWorst, bool optionCutBeginingIfTheSame, bool optionDeltaPerStateMaxDegressive, float percentAvg, float percentMax, float percentExtrapolation, int stateDuration, int stateDelay, float solvedAt, float processedAt, CscArtificialIntelligenceTypes aiTypes, CscKnowledgeItemTargetMemberToState *memberToState);
39 
40  // methods to override
41  void sequencePostTraitment(CscSequence *sequenceIn) override;
42  int getSequenceCountAutorized(float initStateValue) override;
43  float getExtrapolationResult(CscSequence *sequenceIn) override;
44  bool isStatesSupportOf(CscState *state1, CscState *state2) override;
45  bool isObjectiveSupportOf(CscKnowledgeItem *knowledgeItem) override;
46  float evaluateState(CscState *stateIn, const CscWorldEntity *entity, CscState *initialState) override;
47  float evaluateSequence(CscSequence *sequence, const CscWorldEntity *entity, CscState *initialStateInit) override;
48  CscPerson *generatePerson(CscEnvironmentSimulator *environment, const CscWorldEntity *entity, CscState *initialState, int personId, int generationId, CscGeneration *currentGeneration, CscGeneration *previousGeneration) override;
49 
50  // destructor
52 
53  // methode create
54  static CscKnowledgeItemMultiPodWalk *create(int targetId, string targetName,
55  int stepCountTarget, int nbLegs,
56  vector<string> targetMemberNames,
57  vector<string> relativeToMemberNames,
58  vector<float> posX, vector<float> posY, vector<float> posZ,
59  vector<float> posPondX, vector<float> posPondY, vector<float> posPondZ,
60  vector<float> pitch, vector<float> yaw, vector<float> roll,
61  vector<float> pitchPond, vector<float> yawPond, vector<float> rollPond,
62  vector<float> accX, vector<float> accY, vector<float> accZ,
63  vector<float> accPondX, vector<float> accPondY, vector<float> accPondZ,
64  vector<string> outputsCanMoveNames, vector<float> outputsCanMovePonderations,
65  CscUnitType unitType, string targetOriginMember,
66  bool symemtrySearch,
67  int nbStateMax, const map<int, float> &maxDeltaPivotByPivotId,
68  bool optionCutLastestIfTheSameAndWorst,
69  bool optionCutBeginingIfTheSame,
70  bool optionDeltaPerStateMaxDegressive,
71  float percentAvg,
72  float percentMax,
73  float percentExtrapolation,
74  int stateDuration,
75  int stateDelay,
76  float solvedAt,
77  float processedAt,
78  bool outputTypes[],
80  map<int, CscPoint3d*> centerOfMassOfAllMemberByMemberId) {
81 
82  vector<const TargetMemberValues *> *targetMembersValues = new vector<const TargetMemberValues *>();
83  vector<const TargetMemberPonderation *> *inputsTargetPercents = new vector<const TargetMemberPonderation *>();
84 
85  // State objective
86  for (int i = 0; i < targetMemberNames.size(); i++) {
87  TargetMemberValues *targetMemberVal = new TargetMemberValues();
88  CscMemberInputStatus *inputsFinalCore = new CscMemberInputStatus(targetMemberNames.at(i));
89  map<CscInputType, float> inputsTargetValuesCore;
90  inputsTargetValuesCore[POS_X] = posX.at(i);
91  inputsTargetValuesCore[POS_Y] = posY.at(i);
92  inputsTargetValuesCore[POS_Z] = posZ.at(i);
93  inputsTargetValuesCore[PITCH] = pitch.at(i);
94  inputsTargetValuesCore[YAW] = yaw.at(i);
95  inputsTargetValuesCore[ROLL] = roll.at(i);
96  inputsTargetValuesCore[ACC_X] = accX.at(i);
97  inputsTargetValuesCore[ACC_Y] = accY.at(i);
98  inputsTargetValuesCore[ACC_Z] = accZ.at(i);
99  inputsFinalCore->values = inputsTargetValuesCore;
100  targetMemberVal->memberValues = inputsFinalCore;
101  targetMemberVal->relativeToMemberName = relativeToMemberNames.at(i);
102  targetMembersValues->push_back(targetMemberVal);
103  }
104 
105  // State Percents
106  for (int i = 0; i < targetMemberNames.size(); i++) {
107  TargetMemberPonderation *targetMemberPonderation = new TargetMemberPonderation();
108  CscMemberInputPonderation *percentsFInalCore = new CscMemberInputPonderation(targetMemberNames.at(i));
109  map<CscInputType, float> inputsTargetPercentsCore;
110  inputsTargetPercentsCore[POS_X] = posPondX.at(i);
111  inputsTargetPercentsCore[POS_Y] = posPondY.at(i);
112  inputsTargetPercentsCore[POS_Z] = posPondZ.at(i);
113  inputsTargetPercentsCore[PITCH] = pitchPond.at(i);
114  inputsTargetPercentsCore[YAW] = yawPond.at(i);
115  inputsTargetPercentsCore[ROLL] = rollPond.at(i);
116  inputsTargetPercentsCore[ACC_X] = accPondX.at(i);
117  inputsTargetPercentsCore[ACC_Y] = accPondY.at(i);
118  inputsTargetPercentsCore[ACC_Z] = accPondZ.at(i);
119  percentsFInalCore->values = inputsTargetPercentsCore;
120  targetMemberPonderation->memberValues = percentsFInalCore;
121  targetMemberPonderation->relativeToMemberName = relativeToMemberNames.at(i);
122  inputsTargetPercents->push_back(targetMemberPonderation);
123  }
124 
125  // OutputsCanMove
126  map<string, float> *outputsCanMoveValues = new map<string, float>;
127  for (int i = 0; i < outputsCanMoveNames.size(); i++) {
128  if (outputsCanMovePonderations.at(i) > 0.0f) {
129  string name = outputsCanMoveNames.at(i);
130  float ponderation = outputsCanMovePonderations.at(i);
131  outputsCanMoveValues->insert({name, ponderation});
132  }
133  }
134 
135  CscKnowledgeItemTargetMemberToState *memberToState = CscKnowledgeItemTargetMemberToState::create(targetId, targetName, targetMemberNames, relativeToMemberNames, posX, posY, posZ, posPondX, posPondY, posPondZ, pitch, yaw, roll, pitchPond, yawPond, rollPond, accX, accY, accZ, accPondX, accPondY, accPondZ, outputsCanMoveNames, outputsCanMovePonderations, unitType, targetOriginMember, symemtrySearch, nbStateMax, maxDeltaPivotByPivotId, optionCutLastestIfTheSameAndWorst, optionCutBeginingIfTheSame, optionDeltaPerStateMaxDegressive, percentAvg, percentMax, percentExtrapolation, stateDuration, stateDelay, solvedAt, processedAt, outputTypes, aiTypes, centerOfMassOfAllMemberByMemberId);
136 
137  return new CscKnowledgeItemMultiPodWalk(targetId, targetName, stepCountTarget, nbLegs, targetMembersValues, inputsTargetPercents, outputsCanMoveValues, unitType, targetOriginMember, symemtrySearch, nbStateMax, maxDeltaPivotByPivotId, optionCutLastestIfTheSameAndWorst, optionCutBeginingIfTheSame, optionDeltaPerStateMaxDegressive, percentAvg, percentMax, percentExtrapolation, stateDuration, stateDelay, solvedAt, processedAt, aiTypes, memberToState);
138  }
139 
140  protected:
141  /*
142  Addition of states that allow to check if the sequence can be repeated to walk without the robot falling
143  */
144  void addExtrapolationStates(CscSequence *sequenceIn, const CscWorldEntity *entity) override;
145  private:
146  // private attributes
148 
150 
151  CscState *bendKneesState;
152 
153  // private methods
154 
155  /*
156  Determines at which state to start applying the walking constraints according to the individual's creation strategy
157  */
158  int wichStateToBegin(CscPerson *personToBeCorrected) const;
159 
160  /*
161  Find logic intermediate states between two states in modify it sequence given
162  * if previousStateId = -1, previousStateId = initialState
163  */
164  void interpolateStates(int previousStateId, int nextStateId, int nbStatesToInterpolate, CscSequence *sequence, const CscEntityModel *robotModel);
165 
166  /*
167  Find logic intermediate states between two states and return it in a vector
168  */
169  vector<CscState *> interpolateStates(CscState *previousState, CscState *nextState, int nbStatesToInterpolate);
170 
171  /*
172  Calculate which state id corresponds to which step
173  */
174  int calculStateIdFromStageId(int stageId) const;
175 
176  /*
177  Adds a bonus to the objectiveValue of the states, if they meet certain requirements
178  */
179  void evaluateSpecificsState(int idState, CscSequence *sequence);
180 
181  /*
182  Evaluates if a foot is above the other
183  */
184  bool oneFootAboveOtherOne(CscState *state, CscSide leftOrRightAbove) const;
185  /*
186  Evaluates if a foot is in front of the other
187  */
188  bool oneFootInFront(CscState *state, CscSide leftOrRightAbove) const;
189  /*
190  Evaluates if a foot is most parallele to the ground the other
191  */
192  bool oneFootMostParalleleToGroundOtherOne(CscState *state, CscSide leftOrRight) const;
193  /*
194  Evaluates whether the body is closer to the front foot than the back foot
195  */
196  bool coreCloserToTheFrontFoot(CscState *state, CscSide sideFrontFoot) const;
197  /*
198  Evaluates if the foot does not go backwards
199  */
200  bool footDontGoBack(CscState *state, CscState *previousStageState, CscSide footLeftOrRight) const;
201 
202  /*
203  Determine if all playSequence in physicsSimulator must be played in realTime.
204  By default it return false but not with MultiPodWalk.
205  */
206  bool shouldAlwaysPlayInRealTime() const override;
207  /*
208  Randomly draw a strategy with a predefined probability for each strategy
209  */
210  CscStrategyType randomlyDrawStrategyType() const;
211 
212  /*
213  Creates a complete sequence of targetIKParams for first generation
214  */
215 
216  vector<vector<CscJacobianInverseKinematic::TargetIKParams*>> createFirstSequenceWalk(CscState *initialState, const CscWorldEntity *entity);
217 
218  /*
219  Creates a InverseKinematic target from foot to move, initialState of sequence and deplacement required for each axes
220  */
221 
222  CscJacobianInverseKinematic::TargetIKParams* createFootTarget(CscState* initialState, CscSide footSide, float xRelativeInit, float yRelativeInit, float zRelativeInit);
223 
233  map<int, CscPivotMovementType> createPivotMovementTypeByPivotId(const CscEntityModel *robotModel) override;
234 
245  map<int, CscPivotMovementType> getPivotMovementTypeByPivotId(const CscEntityModel *robotModel) override;
246  };
247 
248 }
249 #endif /* CscKnowledgeItemMultiPodWalk_h */
WalkStep
WalkStep
Definition: CscKnowledgeItemMultiPodWalk.h:22
CscKnowledgeItemTargetMemberToState.h
POS_Y
@ POS_Y
Definition: CscMemberInputStatus.h:15
CscWorldEntity
Definition: CscWorldEntity.h:19
conscience_core::knowledge::CscKnowledgeItemTarget
Definition: CscKnowledgeItemTarget.h:22
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::create
static CscKnowledgeItemTargetMemberToState * create(int targetId, string targetName, vector< string > targetMemberNames, vector< string > relativeToMemberNames, vector< float > posX, vector< float > posY, vector< float > posZ, vector< float > posPondX, vector< float > posPondY, vector< float > posPondZ, vector< float > pitch, vector< float > yaw, vector< float > roll, vector< float > pitchPond, vector< float > yawPond, vector< float > rollPond, vector< float > accX, vector< float > accY, vector< float > accZ, vector< float > accPondX, vector< float > accPondY, vector< float > accPondZ, vector< string > outputsCanMoveNames, vector< float > outputsCanMovePonderations, CscUnitType unitType, string targetOriginMember, bool symemtrySearch, int nbStateMax, const map< int, float > &maxDeltaPivotByPivotId, bool optionCutLastestIfTheSameAndWorst, bool optionCutBeginingIfTheSame, bool optionDeltaPerStateMaxDegressive, float percentAvg, float percentMax, float percentExtrapolation, int stateDuration, int stateDelay, float solvedAt, float processedAt, bool outputTypes[], CscArtificialIntelligenceTypes aiTypes, map< int, CscPoint3d * > centerOfMassOfAllMemberByMemberId)
Definition: CscKnowledgeItemTargetMemberToState.h:47
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:34
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues::memberValues
CscMemberInputStatus * memberValues
Definition: CscKnowledgeItem.h:79
Left
@ Left
Definition: CscKnowledgeItemMultiPodWalk.h:18
CscUnitType
CscUnitType
Definition: CscUnitType.h:14
conscience_core::knowledge::CscKnowledgeItemTargetArmToPosition
Definition: CscKnowledgeItemTargetArmToPosition.h:17
CscEntityModel
Definition: CscEntityModel.h:54
ACC_Y
@ ACC_Y
Definition: CscMemberInputStatus.h:14
StandLeftLeg
@ StandLeftLeg
Definition: CscKnowledgeItemMultiPodWalk.h:24
CscMemberInputStatus::values
map< CscInputType, float > values
Definition: CscMemberInputStatus.h:56
ROLL
@ ROLL
Definition: CscMemberInputStatus.h:16
ACC_Z
@ ACC_Z
Definition: CscMemberInputStatus.h:14
Right
@ Right
Definition: CscKnowledgeItemMultiPodWalk.h:19
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState
Definition: CscKnowledgeItemTargetMemberToState.h:18
CscJacobianInverseKinematic::TargetIKParams
Definition: CscJacobianInverseKinematic.h:41
conscience_core::knowledge::CscArtificialIntelligenceTypes
uint64_t CscArtificialIntelligenceTypes
Definition: CommandParser.h:21
conscience_core::knowledge
Definition: CscEntityReflexion.h:35
CscSide
CscSide
Definition: CscKnowledgeItemMultiPodWalk.h:17
PITCH
@ PITCH
Definition: CscMemberInputStatus.h:16
CscPerson
Definition: CscPerson.h:19
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues::relativeToMemberName
optional< string > relativeToMemberName
Definition: CscKnowledgeItem.h:80
TransfertWeightLeftLeg
@ TransfertWeightLeftLeg
Definition: CscKnowledgeItemMultiPodWalk.h:30
CscKnowledgeItemTarget.h
CscState
Definition: CscState.h:24
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues
Definition: CscKnowledgeItem.h:78
CscSupervisedLearningRegression.h
CscGeneration
Definition: CscGeneration.h:20
conscience_core::knowledge::CscKnowledgeItem::TargetMemberPonderation::relativeToMemberName
optional< string > relativeToMemberName
Definition: CscKnowledgeItem.h:85
CscKnowledgeItemTargetArmToPosition.h
POS_Z
@ POS_Z
Definition: CscMemberInputStatus.h:15
SetLeftFoot
@ SetLeftFoot
Definition: CscKnowledgeItemMultiPodWalk.h:29
CscMemberInputPonderation
Definition: CscMemberInputPonderation.h:19
CscStrategyType
CscStrategyType
Definition: CscStrategyType.h:11
conscience_core::knowledge::CscKnowledgeItemMultiPodWalk::create
static CscKnowledgeItemMultiPodWalk * create(int targetId, string targetName, int stepCountTarget, int nbLegs, vector< string > targetMemberNames, vector< string > relativeToMemberNames, vector< float > posX, vector< float > posY, vector< float > posZ, vector< float > posPondX, vector< float > posPondY, vector< float > posPondZ, vector< float > pitch, vector< float > yaw, vector< float > roll, vector< float > pitchPond, vector< float > yawPond, vector< float > rollPond, vector< float > accX, vector< float > accY, vector< float > accZ, vector< float > accPondX, vector< float > accPondY, vector< float > accPondZ, vector< string > outputsCanMoveNames, vector< float > outputsCanMovePonderations, CscUnitType unitType, string targetOriginMember, bool symemtrySearch, int nbStateMax, const map< int, float > &maxDeltaPivotByPivotId, bool optionCutLastestIfTheSameAndWorst, bool optionCutBeginingIfTheSame, bool optionDeltaPerStateMaxDegressive, float percentAvg, float percentMax, float percentExtrapolation, int stateDuration, int stateDelay, float solvedAt, float processedAt, bool outputTypes[], CscArtificialIntelligenceTypes aiTypes, map< int, CscPoint3d * > centerOfMassOfAllMemberByMemberId)
Definition: CscKnowledgeItemMultiPodWalk.h:54
YAW
@ YAW
Definition: CscMemberInputStatus.h:16
POS_X
@ POS_X
Definition: CscMemberInputStatus.h:15
BendKnees
@ BendKnees
Definition: CscKnowledgeItemMultiPodWalk.h:23
CscEnvironmentSimulator
Definition: CscEnvironmentSimulator.h:31
SetRightFoot
@ SetRightFoot
Definition: CscKnowledgeItemMultiPodWalk.h:26
CscMemberInputPonderation::values
map< CscInputType, float > values
Definition: CscMemberInputPonderation.h:22
conscience_core::knowledge::CscKnowledgeItemMultiPodWalk
Definition: CscKnowledgeItemMultiPodWalk.h:35
CscMemberInputStatus
Definition: CscMemberInputStatus.h:26
TransfertWeightRightLeg
@ TransfertWeightRightLeg
Definition: CscKnowledgeItemMultiPodWalk.h:27
conscience_core::knowledge::CscKnowledgeItem::TargetMemberPonderation::memberValues
CscMemberInputPonderation * memberValues
Definition: CscKnowledgeItem.h:84
conscience_core::knowledge::CscKnowledgeItem::TargetMemberPonderation
Definition: CscKnowledgeItem.h:83
conscience_core::knowledge::CscKnowledgeItem
Definition: CscKnowledgeItem.h:43
CscSequence
Definition: CscSequence.h:51
RaiseRightFoot
@ RaiseRightFoot
Definition: CscKnowledgeItemMultiPodWalk.h:25
ThrowBackLegForward
@ ThrowBackLegForward
Definition: CscKnowledgeItemMultiPodWalk.h:28
i
int i
Definition: HybridAStar.cpp:191
ACC_X
@ ACC_X
Definition: CscMemberInputStatus.h:14