Conscience Core
CscEnvironmentSimulator.h
Go to the documentation of this file.
1 //
2 // CscEnvironmentSimulator.h
3 // ConscienceRobotManager
4 //
5 // Created by Conscience_Hazar on 05/03/2019.
6 // Copyright © 2019 IliesZaoui. All rights reserved.
7 //
8 
9 #ifndef CscEnvironmentSimulator_h
10 #define CscEnvironmentSimulator_h
11 
12 #include "CscCommon.h"
13 #include <mutex>
14 
22 #include "Axiomes/CscGrid.h"
23 
24 
25 using std::mutex, std::function;
26 
27 using namespace conscience_core::core_objects;
28 using namespace conscience_core::simulator;
30 
32 private:
33  CscPhysicsSimulator *physicSimulator = nullptr;
34  map<CscWorldElementId, const CscWorldEntity *> *entities = nullptr;
35  map<CscWorldElementId, function<void()>> onRemoveEntityCallbacks;
36  vector<CscWorldObject *> *objects = nullptr;
37  vector<CscWorldPlace *> *places = nullptr;
38  vector<CscWorldElement *> *otherElements = nullptr;
39  map<string, CscWorldImage *> *sceneImages = nullptr;
40 
41  CscGrid *sceneFloor = nullptr;
42  CscPoint3d *gnssReferencePosition = nullptr;
43 
44  mutex entitiesMutex;
45  mutex placesMutex;
46  mutable mutex objectsMutex;
47  mutex otherElementsMutex;
48  mutex imagesMutex;
49  mutex gnssPositionOperationMutex;
50 
51  inline static std::atomic<unsigned long long> lastId = 0;
52  unsigned long long id;
53 
54  unique_ptr<CscLogger> logger;
55 
56  int getObjectIndexByName(const string &name) const;
57  int getOtherElementIndexByName(const string &name) const;
58 
59  void doRemoveEntity(const CscWorldElementId &entityId);
60 
61 public:
62  CscEnvironmentSimulator(bool autoIncrement);
63  virtual ~CscEnvironmentSimulator();
64 
65  void clear();
66 
67  virtual vector<CscWorldObject *> getObjects(const function<bool(const CscWorldObject *)> filter = [](const CscWorldObject *) { return true; }) const;
68 
69  CscWorldElement *getElementByName(const string &nameIn);
70 
74  float *getConscienceSimulationWorldStatus(bool rotationsAsEuler = false);
75 
76  vector<CscPoint3d *> *getVertexFromStrategy(CscWorldElementId entityId, int strategy);
77  vector<CscPoint3d *> *getPatchFromStrategy(CscWorldElementId entityId, int strategy);
78 
79  void importObject(CscWorldObject *object);
80  void importObjects(vector<CscWorldObject *> *objects);
81  void importPlace(CscWorldPlace *place, bool removeOthers = true);
82  void importLine(CscWorldLine *line);
83  void importImage(CscWorldImage *sceneImage);
84  void removeOtherElementByName(const string &name);
85 
90  void importPointsAsObjects(vector<CscPoint3d *> *points);
91 
92  void importEntity(const CscWorldEntity *entity, bool requiresExternalInit = false, const optional<function<void()>> &onRemoved = {});
93  bool removeEntity(const CscWorldElementId &entityId);
94  virtual void clearEntities();
95  bool hasEntity(const CscWorldElementId &entityId);
96 
97  CscPhysicsSimulator *getPhysicSimulator() const;
98  void setFocusedObjectByIndex(int objectIndex);
99  CscWorldObject *getFocusedObjectCurrent() const;
100  int countObjects();
101  virtual void clearObjects();
103  CscWorldObject *getObjectById(const CscWorldElementId objectId) const;
107  const CscPoint3d *getObjectPositionInSimulator(const string &serialNumber) const;
108 
109  CscWorldObject *getObjectByModelId(int objectModelId);
110  virtual vector<CscWorldObject *> getObjectsByModelId(int objectModelId);
111 
116  CscWorldPlace *getPlace();
117  CscWorldPlace *getPlaceById(const CscWorldElementId &placeId);
118 
119  const vector<CscWorldPlace *> getPlaces(function<bool(const CscWorldPlace *)> filter = [](const CscWorldPlace *) { return true; });
120 
121  const CscWorldEntity *getEntity(const CscWorldElementId &entityId) const;
122  virtual vector<CscWorldEntity *> getEntities(const function<bool(const CscWorldEntity *)> filter = [](const CscWorldEntity *) { return true; });
123  virtual vector<string> getEntitySerialNumbers(const function<bool(const CscWorldEntity *)> filter = [](const CscWorldEntity *) { return true; });
124  const CscEntityModel *getEntityModel(const CscWorldElementId &entityId) const;
125 
126  const MemberState *getEntityMemberStateById(const CscWorldElementId &entityId, int id) const;
127  const MemberState *getEntityMemberState(const CscWorldElementId &entityId, const CscMember *member) const;
128  const MemberState *getEntityMemberStateByName(const CscWorldElementId &entityId, const string &memberName) const;
129 
130  const CscPoint3d *getEntityPosition(const CscWorldElementId &entityId) const;
131  CscPoint3dOriented getEntityPositionAndRotation(const CscWorldElementId &entityId) const;
136  CscPoint3d getEntityAcceleration(const CscWorldElementId &entityId) const;
137  pair<CscPoint3d, CscQuaternion> getEntityPositionAndRotationQuaternion(const CscWorldElementId &entityId) const;
138 
143  void doWithEntities(function<void(const map<CscWorldElementId, const CscWorldEntity *> &entities)> action);
144 
149  void doWithObjects(function<void(const vector<CscWorldObject *> &objects)> action);
150 
155  CscState *getEntityState(const CscWorldElementId &entityId) const;
156 
161  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 = {});
162  void playSequence(const CscWorldElementId &entityId, CscState *init, CscSequence *sequence, const map<int, CscPivotMovementType> &pivotMovementByPivotId, bool geneticAi = false, bool extrapolationRealTime = false);
163  void playState(const CscWorldElementId &entityId, CscState *state, int duration, int delay, bool relativeValues);
164 
165  void setAllPivotsToRelaxedMode(const CscWorldElementId &entityId);
170  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 = {});
171  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);
172  float getJointHingeAngle(const CscWorldElementId &entityId, int jointIdIn) const;
173 
174  void updateMemberEulers(const CscWorldElementId &entityId, int memberId, double eulerX, double eulerY, double eulerZ);
175  void updateMemberPosition(const CscWorldElementId &entityId, int memberId, float posX, float posY, float posZ);
176 
177  void moveObjectToPosition(CscWorldElement *object, const CscPoint3d *targetPosition);
178  void moveObjectToRotation(CscWorldElement *object, const CscPoint3d *targetRotation);
179  void moveObjectToPositionAndRotation(CscWorldElement *object, const CscPoint3d *targetPosition, const CscPoint3d *targetRotation);
180 
181  virtual void clearPlaces();
182  void loadDefaultPlaceFloor();
183  void clearOtherElements();
184  CscGrid *getSceneFloor() const;
185 
186  void focusVisionIntoPosition(float posX, float posY, float posZ);
187 
188  CscWorldObject *getObjectByName(const string &name);
189  CscWorldObject *getObjectByPosition(CscPoint3d *position, float radius);
190  virtual void removeObjectById(CscWorldElementId objectId);
191  void removeObjectByName(const string &name);
192  void removeObjectsByModelId(int objectModelId);
193  void removeObjectsByTag(const string &searchedTag);
194  bool removePlaceById(const string &placeId);
195 
196  bool hasObjectWithModelId(int objectModelId);
197 
201  void dump(fs::path outPath = fs::path(string(CSC_DEFAULT_OUT_DIR) + "/envSim_" + to_string(nowMillis()) + ".png")) const;
202 
206  CscPoint3d *computeConsciencePositionFromGnssPosition(const CscPoint3d *gnssPosition, const string &projection);
210  CscPoint3d *computeGnssPositionFromConsciencePosition(const CscPoint3d *consciencePosition, const string &projection);
211 
215  vector<CscPoint3d *> *computeGnssPositionsFromConsciencePositions(vector<CscPoint3d *> *consciencePositions, const string &projection);
216 
220  void setGnssReferencePosition(CscPoint3d *gnssPoint);
221 
226  bool gnssReferencePositionIsSet();
227 
231  void computeGnssReferencePositionWithConsciencePosition(CscPoint3d *gnssPoint, CscPoint3d *consciencePosition, const string &projection);
232 };
233 
234 #endif /* CscEnvironmentSimulator_h */
CscWorldEntity
Definition: CscWorldEntity.h:19
conscience_core::core_objects::CscWorldImage
Definition: CscWorldImage.h:24
CscMember
Definition: CscMember.h:16
nlohmann::to_string
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition: json.hpp:26470
CscWorldEntity.h
conscience_core::axiomes::CscPoint3d
The CscPoint3d class represents a point in three-dimensional space. It is primarily used to denote a ...
Definition: Csc3dTypes.h:24
conscience_core::core_objects
Definition: CscEntityReflexion.h:33
CscWorldObject
Definition: CscWorldObject.h:26
conscience_core::simulator::lastId
static std::atomic< unsigned long long > lastId
Definition: CscPhysicsSimulator.cpp:106
conscience_core::core_objects::CscWorldLine
Definition: CscWorldLine.h:16
CscEntityModel
Definition: CscEntityModel.h:54
conscience_utils::nowMillis
unsigned long long nowMillis()
Definition: conscience_util.cpp:294
CscGrid
Definition: CscGrid.h:21
CscWorldImage.h
conscience_core::simulator::CscPhysicsSimulator::MemberState
Definition: CscPhysicsSimulator.h:79
MemberState
CscPhysicsSimulator::MemberState MemberState
Definition: CscEnvironmentSimulator.h:29
logger
static std::unique_ptr< CscLogger > logger
Definition: gltfHelpers.cpp:6
CscWorldObject.h
CscEnvironmentSimulator::currentFocusedObjectIndex
int currentFocusedObjectIndex
Definition: CscEnvironmentSimulator.h:102
conscience_core::simulator::CscPhysicsSimulator
Definition: CscPhysicsSimulator.h:77
CSC_DEFAULT_OUT_DIR
#define CSC_DEFAULT_OUT_DIR
Definition: CscCommon.h:22
CscPhysicsSimulator.h
CscState
Definition: CscState.h:24
CscWorldElementId
string CscWorldElementId
Definition: Command.h:15
CscGrid.h
nlohmann::detail::void
j template void())
Definition: json.hpp:4189
CscCommon.h
CscWorldElement
Definition: CscWorldElement.h:23
CscWorldLine.h
conscience_core::simulator
Definition: CscPhysicsSimulator.cpp:92
CscWorldPlace.h
CscEnvironmentSimulator
Definition: CscEnvironmentSimulator.h:31
CscWorldPlace
Definition: CscWorldPlace.h:34
CscEntityModel.h
conscience_core::axiomes::CscPoint3dOriented
Definition: Csc3dTypes.h:265
CscMemberInputStatus
Definition: CscMemberInputStatus.h:26
CscSequence
Definition: CscSequence.h:51