9 #ifndef CscKnowledgeItemMultiPodWalk_h
10 #define CscKnowledgeItemMultiPodWalk_h
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);
41 void sequencePostTraitment(
CscSequence *sequenceIn)
override;
42 int getSequenceCountAutorized(
float initStateValue)
override;
43 float getExtrapolationResult(
CscSequence *sequenceIn)
override;
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,
67 int nbStateMax,
const map<int, float> &maxDeltaPivotByPivotId,
68 bool optionCutLastestIfTheSameAndWorst,
69 bool optionCutBeginingIfTheSame,
70 bool optionDeltaPerStateMaxDegressive,
73 float percentExtrapolation,
80 map<int, CscPoint3d*> centerOfMassOfAllMemberByMemberId) {
82 vector<const TargetMemberValues *> *targetMembersValues =
new vector<const TargetMemberValues *>();
83 vector<const TargetMemberPonderation *> *inputsTargetPercents =
new vector<const TargetMemberPonderation *>();
86 for (
int i = 0;
i < targetMemberNames.size();
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;
102 targetMembersValues->push_back(targetMemberVal);
106 for (
int i = 0;
i < targetMemberNames.size();
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;
122 inputsTargetPercents->push_back(targetMemberPonderation);
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});
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);
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);
158 int wichStateToBegin(
CscPerson *personToBeCorrected)
const;
164 void interpolateStates(
int previousStateId,
int nextStateId,
int nbStatesToInterpolate,
CscSequence *sequence,
const CscEntityModel *robotModel);
169 vector<CscState *> interpolateStates(
CscState *previousState,
CscState *nextState,
int nbStatesToInterpolate);
174 int calculStateIdFromStageId(
int stageId)
const;
179 void evaluateSpecificsState(
int idState,
CscSequence *sequence);
184 bool oneFootAboveOtherOne(
CscState *state,
CscSide leftOrRightAbove)
const;
192 bool oneFootMostParalleleToGroundOtherOne(
CscState *state,
CscSide leftOrRight)
const;
196 bool coreCloserToTheFrontFoot(
CscState *state,
CscSide sideFrontFoot)
const;
206 bool shouldAlwaysPlayInRealTime()
const override;
216 vector<vector<CscJacobianInverseKinematic::TargetIKParams*>> createFirstSequenceWalk(
CscState *initialState,
const CscWorldEntity *entity);
233 map<int, CscPivotMovementType> createPivotMovementTypeByPivotId(
const CscEntityModel *robotModel)
override;
245 map<int, CscPivotMovementType> getPivotMovementTypeByPivotId(
const CscEntityModel *robotModel)
override;