Conscience Core
CscLidarEngine.h
Go to the documentation of this file.
1 //
2 // CscLidarEngine.hpp
3 // ConscienceRobotManager
4 //
5 // Created by Iliès Zaoui on 14/07/2019.
6 // Copyright © 2020 Conscience Robotics. All rights reserved.
7 //
8 
9 #ifndef CscLidarEngine_h
10 #define CscLidarEngine_h
11 
12 #include <mutex>
13 
14 #include "CscCommon.h"
15 #include "Axiomes/Csc3dTypes.h"
16 
17 using namespace conscience_core::axiomes;
18 using std::mutex;
19 
20 namespace conscience_core::lidar {
21 
22 struct OdometryData {
38  double deltaYaw;
39  string toString() const;
40 };
41 
42 struct LidarValues {
46  map<double, double> lidarValues;
47  unsigned long long timestamp;
48  optional<OdometryData> odometry = {};
49 };
50 
51 typedef uint64_t CscLidarMode;
53  cscLidarModePaused = 1ULL << 0,
54  cscLocalisation = 1ULL << 2,
55 
59  cscSlam = 1ULL << 4,
60 };
61 
63 public:
64  static bool isSlamAutoEnabled();
65 
67  virtual void startEngine();
68  virtual void stopEngine();
73  const LidarValues &getCurrentValues();
77  LidarValues getCurrentValuesCopy();
78 
82  void integrateValuesAtTime(const map<double, double> &newValues, unsigned long long timestamp, optional<OdometryData> odometry = {});
83 
84  virtual ~CscLidarEngine();
85  void activateLidarMode(CscLidarMode newLidarMode);
86  void addLidarMode(CscLidarMode newLidarMode);
87  void removeLidarMode(CscLidarMode lidarModeToRemove);
88  bool isLidarModeRunning(CscLidarMode lidarModeSearched);
89  bool isLidarModeActive(CscLidarMode lidarModeSearched);
90  bool isLidarEngineActivated();
91  void stopLidarEngine();
92 
93  unsigned long long getLastLidarValuesTime() const;
94  unsigned long long getLidarValuesTimeToRetrieve() const;
95  unsigned long long getLidarValuesTimeBetweenUpdate() const;
96 
97  void setOnNewValuesListener(const optional<function<void(const LidarValues &)>> &onNewValues = {});
98  optional<function<void()>> getOnActivatedListener() const;
99  void setOnActivatedListener(const optional<function<void()>> &onActivated = {});
100 
109  static vector<CscPoint3d *> toWorldPoints(const LidarValues &lidarValues, const CscQuaternion &entityOrientation, const CscPoint3d &entityPosition, double y = 0);
110 
111 private:
112  mutex cartographyMutex;
113  mutex lidarReadingsMutex;
114 
115  CscLidarMode lidarMode = cscLidarModePaused;
116 
117  unsigned long long lidarValuesTimeToRetrieveInMillis = 0;
118  unsigned long long lidarValuesTimeBetweenUpdateInMillis = 0;
119 
120 protected:
123  optional<function<void(const LidarValues &)>> onNewValues = {};
124  optional<function<void()>> onActivated = {};
125 
126  std::unique_ptr<CscLogger> logger;
127 };
128 
129 }
130 
131 #endif /* CscLidarEngine */
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::lidar::CscLidarEngine
Definition: CscLidarEngine.h:62
conscience_core::lidar::LidarValues::timestamp
unsigned long long timestamp
Definition: CscLidarEngine.h:47
conscience_core::lidar::LidarValues::lidarValues
map< double, double > lidarValues
Definition: CscLidarEngine.h:46
conscience_core::axiomes
Definition: Csc2dTypes.cpp:9
conscience_core::lidar::CscLidarEngine::logger
std::unique_ptr< CscLogger > logger
Definition: CscLidarEngine.h:126
conscience_core::lidar
Definition: CscEntityReflexion.h:42
conscience_core::lidar::CscLidarModeList
CscLidarModeList
Definition: CscLidarEngine.h:52
conscience_core::lidar::OdometryData
Definition: CscLidarEngine.h:22
conscience_core::lidar::CscLidarEngine::lidarValuesMutex
mutex lidarValuesMutex
Definition: CscLidarEngine.h:121
conscience_core::lidar::LidarValues
Definition: CscLidarEngine.h:42
conscience_core::lidar::cscLocalisation
@ cscLocalisation
Definition: CscLidarEngine.h:54
conscience_core::lidar::cscLidarModePaused
@ cscLidarModePaused
Definition: CscLidarEngine.h:53
nlohmann::detail::void
j template void())
Definition: json.hpp:4189
CscCommon.h
conscience_core::lidar::cscSlam
@ cscSlam
Definition: CscLidarEngine.h:59
Csc3dTypes.h
conscience_core::lidar::CscLidarEngine::values
LidarValues values
Definition: CscLidarEngine.h:122
conscience_core::axiomes::CscQuaternion
Definition: Csc3dTypes.h:138
conscience_core::lidar::CscLidarMode
uint64_t CscLidarMode
Definition: CscLidarEngine.h:51
conscience_core::lidar::OdometryData::deltaPositionY
double deltaPositionY
Definition: CscLidarEngine.h:30
conscience_core::lidar::OdometryData::deltaYaw
double deltaYaw
Definition: CscLidarEngine.h:38
conscience_core::lidar::OdometryData::deltaPositionZ
double deltaPositionZ
Definition: CscLidarEngine.h:34
conscience_core::lidar::OdometryData::deltaPositionX
double deltaPositionX
Definition: CscLidarEngine.h:26