Conscience Core
CscMoveForwardInGroup.h
Go to the documentation of this file.
1 //
2 // CscMoveForwardInGroup.hpp
3 // ConscienceRobotManager
4 //
5 // Created by Max Lhermitte on 15/02/2023.
6 // Copyright © 2023 IliesZaoui. All rights reserved.
7 //
8 
9 #ifndef CscMoveForwardInGroup_hpp
10 #define CscMoveForwardInGroup_hpp
11 
12 #include "../../Simulator/CscEnvironmentSimulator.h"
14 #include "Axiomes/Csc3dTypes.h"
15 #include "CscCommon.h"
19 
20 #include <mutex>
21 
22 namespace conscience_core::ai {
23 class CscEntityReflexion;
24 }
25 using namespace conscience_core::lidar;
26 
28 
29 
34 public:
35  bool hasAlreadySentSequenceStop = false;
37  private:
38  std::optional<float> angle;
39  std::optional<float> distance;
40  std::optional<float> height;
41 
42  public:
43  FollowParameters(std::optional<float> angle = 0.0f,
44  std::optional<float> distance = 0.0f,
45  std::optional<float> height = 0.0f);
46 
47  float getAngle() const;
48  float getDistance() const;
49  float getHeight() const;
50  };
51 
53  private:
54  const string serialNumber;
55  CscPoint3d *position;
56  CscPoint3d *positionTarget;
57  const FollowParameters *followParams;
58  CscEntityPositionManager *posManager;
59 
60  public:
61  SlaveMoveParameters(const string &serialNumber, const FollowParameters *followParams, CscEntityPositionManager *posManager);
63 
64  const string &getSerialNumber() const;
65  CscPoint3d *getPosition() const;
66  CscPoint3d *getPositionTarget() const;
67  const FollowParameters *getFollowParams() const;
68  CscEntityPositionManager *getPosManager() const;
69  void setPosition(CscPoint3d *position);
70  void setPositionTarget(CscPoint3d *positionTarget);
71  };
72 
74  public:
75  FollowState(CscPoint3d* targetOnImage, CscPoint3dOriented* robotPositionAndRotation);
76  ~FollowState();
77 
78  bool hasSimilarityWith(const FollowState &other) const;
79 
80  private :
81  CscPoint3d* targetOnImage;
82  CscPoint3dOriented* robotPositionAndRotation;
83  };
84 
86  ptr<CscMoveForwardInGroupTarget> masterReference,
87  ptr<CscEntityReflexion> entitySlaveReflexion,
88  const FollowParameters *followParameters,
89  const CscEnvironmentSimulator &environmentSimulator);
90 
92 
93  void moveForwardInGroupLoopTick();
94  const string &getFollowTargetWorldId() const;
95  void addSlave(ptr<CscEntityReflexion> slave, const CscMoveForwardInGroup::FollowParameters *params);
96  void removeSlave(const string &serialNumberSlaveToRemove);
97 
98  vector<SlaveMoveParameters *> getSlaveMoveParameters();
99  vector<string> getSlaveSerialNumbers();
100 
101 private:
102  unique_ptr<CscLogger> logger = CscLogger::getForCategory("CscMoveForwardInGroup");
103  const CscEnvironmentSimulator &globalEnvironment;
104  ptr<CscMoveForwardInGroupTarget> masterReference;
105  ptr<CscEntityReflexion> entitySlaveReflexion;
106  string followTargetWorldId;
107  CscPoint3d *masterPosition;
108  CscPoint3d *masterOrientation;
109  vector<SlaveMoveParameters *> slavesMoveParameters;
110  recursive_mutex slaveMutex;
111 
112  FollowState* lastFollowState = nullptr;
113 
114  bool updateMasterPosition();
115  void updateSlavesPositionsTarget();
116 
120  bool isDetectionUpdated();
121 
126  CscPoint3d* computeTargetPositionFromRover(const CscPoint3dOriented *positionAndRotationFromSimulator, const CscPoint3d *tagetPosition);
127  CscPoint3d* computeTargetPositionFromDrone(const CscPoint3dOriented *positionAndRotationFromSimulator, const CscPoint3d *tagetPosition, FieldOfView fov, float followDistance);
128 
129  CscPoint3dOriented* getEntitySlavePositionAndRotation();
130 };
131 
132 }
133 
134 #endif
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
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:34
conscience_core::ai
Definition: alerts.cpp:12
conscience_core::lidar
Definition: CscEntityReflexion.h:42
conscience_core::ai::multi_entity::CscMoveForwardInGroup::SlaveMoveParameters
Definition: CscMoveForwardInGroup.h:52
conscience_core::lidar::logger
static std::unique_ptr< CscLogger > logger
Definition: CscLidarEngine.cpp:22
conscience_core::ai::multi_entity::CscMoveForwardInGroup
This class is made to allow entities called slave entities to know a position to follow another entit...
Definition: CscMoveForwardInGroup.h:33
conscience_core::ai::multi_entity
Definition: CscMoveForwardInGroup.cpp:19
conscience_core::ai::multi_entity::CscMoveForwardInGroup::FollowParameters
Definition: CscMoveForwardInGroup.h:36
FieldOfView
Definition: CscEntityModel.h:49
CscCommon.h
CscMoveForwardInGroupTarget.h
Csc3dTypes.h
CscEnvironmentSimulator
Definition: CscEnvironmentSimulator.h:31
CscMoveForwardInGroupTargetObject.h
conscience_core::lidar::CscEntityPositionManager
Definition: CscEntityPositionManager.h:44
conscience_core::axiomes::CscPoint3dOriented
Definition: Csc3dTypes.h:277
f
double f
Definition: HybridAStar.cpp:190
conscience_core::ai::multi_entity::CscMoveForwardInGroup::FollowState
Definition: CscMoveForwardInGroup.h:73
CscEntityPositionManager.h
ptr
std::shared_ptr< T > ptr
Definition: CscCommon.h:29