Conscience Core
CscEntityPositionManager.h
Go to the documentation of this file.
1 #ifndef CscEntityPositionManager_h
2 #define CscEntityPositionManager_h
3 
4 #include <filesystem>
5 #include <map>
6 #include <shared_mutex>
7 #include <string>
8 #include <vector>
9 
10 #include <Util/conscience_log.h>
11 #include <Axiomes/Csc3dTypes.h>
12 using namespace conscience_utils::logging;
13 using namespace conscience_core::axiomes;
14 
15 using std::string, std::shared_mutex, std::vector, std::map, std::pair, std::shared_mutex, std::unique_lock, std::shared_lock;
16 namespace fs = std::filesystem;
17 
19 using namespace conscience_utils;
20 
21 namespace conscience_core::lidar {
22 
27  Entity = 0,
35  Simulator = 2,
40 };
41 
42 // TODO : read position from simulator if no position read from other sources during X millis
43 
45 private:
46  struct PositionEntry {
47  const CscPoint3dOriented *position;
48  unsigned long long timestampMillis;
49  float certitude;
51 
52  ~PositionEntry();
53  };
54  bool isGpsValid = false;
55  const string entitySerialNumber;
57 
58  vector<const PositionEntry *> positionsHistory;
59  mutable shared_mutex positionsHistoryMutex;
60 
61  std::unique_ptr<CscLogger> logger;
62 
63  void persistPositionToEnvironment(const PositionEntry *positionEntry);
64 
68  bool areConsistent(const PositionEntry *entry1, const PositionEntry *entry2, double improbablePositionDistanceCm) const;
69 
70  typedef std::function<void(const CscPoint3dOriented *position, const string serialNumber, CscEntityPositionSource source)> PositionUpdateListener;
71 
72  map<const string, PositionUpdateListener> positionListeners;
73 
74  void emptyPositionHistory();
75 
76  shared_mutex realEntityAccelerationMutex;
77  optional<CscPoint3d> realEntityAcceleration;
78 
79 public:
81  virtual ~CscEntityPositionManager();
82 
83  void addPositionUpdateListener(const string &listenerId, PositionUpdateListener listener);
84 
85  void removePositionUpdateListener(const string &listenerId);
86 
90  const CscPoint3dOriented *getLastPlausiblePosition(double improbablePositionDistanceCm = 50) const;
91 
95  const CscPoint3dOriented *getLastPosition() const;
96 
100  const CscPoint3dOriented *getPositionFromSimulator() const;
101 
105  pair<CscPoint3d, CscQuaternion> getPositionAndOrientationQuaternionFromSimulator() const;
106 
112  void registerPosition(const CscPoint3dOriented *position, float certitude, CscEntityPositionSource source, double improbablePositionDistanceCm = 50, bool forceRegisterPosition = false);
113 
114  const string getEntitySerialNumber() const {
115  return entitySerialNumber;
116  }
117 
119 
120  void setGpsValid(bool isValid);
121  bool getGpsValid() const;
122 
123  map<const string, PositionUpdateListener> getPositionListeners() const;
124 
125 
130  optional<CscPoint3d> getRealEntityAcceleration();
134  void setRealEntityAcceleration(optional<CscPoint3d> acceleration);
135 };
136 
137 }
138 
139 #endif
conscience_log.h
conscience_core::lidar::Entity
@ Entity
Definition: CscEntityPositionManager.h:27
conscience_core::axiomes
Definition: Csc2dTypes.cpp:9
conscience_core::lidar
Definition: CscEntityReflexion.h:42
conscience_core::lidar::CscEntityPositionSource
CscEntityPositionSource
Definition: CscEntityPositionManager.h:23
logger
static std::unique_ptr< CscLogger > logger
Definition: gltfHelpers.cpp:6
conscience_core::lidar::LidarLocalization
@ LidarLocalization
Definition: CscEntityPositionManager.h:31
conscience_utils::logging
Definition: conscience_log.cpp:20
nlohmann::detail::void
j template void())
Definition: json.hpp:4189
Csc3dTypes.h
conscience_core::bridging::commands::globalEnvironmentSimulator
CscEnvironmentSimulator * globalEnvironmentSimulator
Definition: CscCommandsProcessor.cpp:34
conscience_core::lidar::CoreInstruction
@ CoreInstruction
Definition: CscEntityPositionManager.h:39
conscience_utils
Definition: CscEntityReflexion.h:50
conscience_core::lidar::CscEntityPositionManager::getEntitySerialNumber
const string getEntitySerialNumber() const
Definition: CscEntityPositionManager.h:114
CscEnvironmentSimulator
Definition: CscEnvironmentSimulator.h:35
conscience_core::bridging::commands::getEnvironmentSimulator
CscEnvironmentSimulator & getEnvironmentSimulator()
Definition: CscCommandsProcessor.cpp:168
conscience_core::lidar::CscEntityPositionManager
Definition: CscEntityPositionManager.h:44
conscience_core::axiomes::CscPoint3dOriented
Definition: Csc3dTypes.h:265
conscience_core::lidar::Simulator
@ Simulator
Definition: CscEntityPositionManager.h:35