9 #ifndef CscEnvironmentSimulator_h
10 #define CscEnvironmentSimulator_h
29 using std::mutex, std::function;
38 map<CscWorldElementId, const CscWorldEntity *> *entities =
nullptr;
40 vector<CscWorldObject *> *objects =
nullptr;
41 vector<CscWorldPlace *> *places =
nullptr;
42 vector<CscWorldElement *> *otherElements =
nullptr;
43 map<string, CscWorldImage *> *sceneImages =
nullptr;
50 mutable mutex objectsMutex;
51 mutex otherElementsMutex;
53 mutex gnssPositionOperationMutex;
55 inline static std::atomic<unsigned long long>
lastId = 0;
56 unsigned long long id;
58 unique_ptr<CscLogger>
logger;
60 int getObjectIndexByName(
const string &name)
const;
61 int getOtherElementIndexByName(
const string &name)
const;
71 virtual vector<CscWorldObject *> getObjects(
const function<
bool(
const CscWorldObject *)> filter = [](
const CscWorldObject *) {
return true; })
const;
78 float *getConscienceSimulationWorldStatus(
bool rotationsAsEuler =
false);
80 vector<CscPoint3d *> *getVertexFromStrategy(
CscWorldElementId entityId,
int strategy);
81 vector<CscPoint3d *> *getPatchFromStrategy(
CscWorldElementId entityId,
int strategy);
84 void importObjects(vector<CscWorldObject *> *objects);
85 void importPlace(
CscWorldPlace *place,
bool removeOthers =
true);
88 void removeOtherElementByName(
const string &name);
94 void importPointsAsObjects(vector<CscPoint3d *> *points);
96 void importEntity(
const CscWorldEntity *entity,
bool requiresExternalInit =
false,
const optional<
function<
void()>> &onRemoved = {});
98 virtual void clearEntities();
102 void setFocusedObjectByIndex(
int objectIndex);
105 virtual void clearObjects();
111 const CscPoint3d *getObjectPositionInSimulator(
const string &serialNumber)
const;
114 virtual vector<CscWorldObject *> getObjectsByModelId(
int objectModelId);
123 const vector<CscWorldPlace *> getPlaces(
function<
bool(
const CscWorldPlace *)> filter = [](
const CscWorldPlace *) {
return true; });
126 virtual vector<CscWorldEntity *> getEntities(
const function<
bool(
const CscWorldEntity *)> filter = [](
const CscWorldEntity *) {
return true; });
127 virtual vector<string> getEntitySerialNumbers(
const function<
bool(
const CscWorldEntity *)> filter = [](
const CscWorldEntity *) {
return true; });
141 pair<CscPoint3d, CscQuaternion> getEntityPositionAndRotationQuaternion(
const CscWorldElementId &entityId)
const;
147 void doWithEntities(
function<
void(
const map<CscWorldElementId, const CscWorldEntity *> &entities)> action);
153 void doWithObjects(
function<
void(
const vector<CscWorldObject *> &objects)> action);
165 void forceState(
const CscWorldElementId &entityId,
CscState *aState,
int memberIdForInputs,
const bool applyPos[3],
const bool applyRot[3],
const bool applyAcc[3], optional<int> nbMaxIteration = {}, optional<int> maxLoopDurationMillis = {});
166 void playSequence(
const CscWorldElementId &entityId,
CscState *init,
CscSequence *sequence,
const map<int, CscPivotMovementType> &pivotMovementByPivotId,
bool geneticAi =
false,
bool extrapolationRealTime =
false);
174 void forceMemberValues(
const CscWorldElementId &entityId,
const CscMemberInputStatus *inputsValues,
const bool applyPosition[3],
const bool applyEuler[3],
const bool applyAcceleration[3], optional<int> nbMaxIteration = {}, optional<int> maxLoopDurationMillis = {});
175 int moveMemberToStateFromMember(
const CscWorldElementId &entityId,
const CscMemberInputStatus *inputsValues,
const bool applyPosition[3],
const bool applyEuler[3],
const bool applyAcceleration[3],
int nbMaxIteration = 40,
int tryNumber = 0);
176 float getJointHingeAngle(
const CscWorldElementId &entityId,
int jointIdIn)
const;
178 void updateMemberEulers(
const CscWorldElementId &entityId,
int memberId,
double eulerX,
double eulerY,
double eulerZ);
179 void updateMemberPosition(
const CscWorldElementId &entityId,
int memberId,
float posX,
float posY,
float posZ);
185 virtual void clearPlaces();
186 void loadDefaultPlaceFloor();
187 void clearOtherElements();
188 CscGrid *getSceneFloor()
const;
190 void focusVisionIntoPosition(
float posX,
float posY,
float posZ);
195 void removeObjectByName(
const string &name);
196 void removeObjectsByModelId(
int objectModelId);
197 void removeObjectsByTag(
const string &searchedTag);
198 bool removePlaceById(
const string &placeId);
200 bool hasObjectWithModelId(
int objectModelId);
210 CscPoint3d *computeConsciencePositionFromGnssPosition(
const CscPoint3d *gnssPosition,
const string &projection);
214 CscPoint3d *computeGnssPositionFromConsciencePosition(
const CscPoint3d *consciencePosition,
const string &projection);
219 vector<CscPoint3d *> *computeGnssPositionsFromConsciencePositions(vector<CscPoint3d *> *consciencePositions,
const string &projection);
224 void setGnssReferencePosition(
CscPoint3d *gnssPoint);
230 bool gnssReferencePositionIsSet();
235 void computeGnssReferencePositionWithConsciencePosition(
CscPoint3d *gnssPoint,
CscPoint3d *consciencePosition,
const string &projection);