1 #ifndef CscEntityPositionManager_h
2 #define CscEntityPositionManager_h
6 #include <shared_mutex>
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;
46 struct PositionEntry {
48 unsigned long long timestampMillis;
54 bool isGpsValid =
false;
55 const string entitySerialNumber;
58 vector<const PositionEntry *> positionsHistory;
59 mutable shared_mutex positionsHistoryMutex;
61 std::unique_ptr<CscLogger>
logger;
63 void persistPositionToEnvironment(
const PositionEntry *positionEntry);
68 bool areConsistent(
const PositionEntry *entry1,
const PositionEntry *entry2,
double improbablePositionDistanceCm)
const;
72 map<const string, PositionUpdateListener> positionListeners;
74 void emptyPositionHistory();
76 shared_mutex realEntityAccelerationMutex;
77 optional<CscPoint3d> realEntityAcceleration;
83 void addPositionUpdateListener(
const string &listenerId, PositionUpdateListener listener);
85 void removePositionUpdateListener(
const string &listenerId);
90 const CscPoint3dOriented *getLastPlausiblePosition(
double improbablePositionDistanceCm = 50)
const;
105 pair<CscPoint3d, CscQuaternion> getPositionAndOrientationQuaternionFromSimulator()
const;
115 return entitySerialNumber;
120 void setGpsValid(
bool isValid);
121 bool getGpsValid()
const;
123 map<const string, PositionUpdateListener> getPositionListeners()
const;
130 optional<CscPoint3d> getRealEntityAcceleration();
134 void setRealEntityAcceleration(optional<CscPoint3d> acceleration);