Conscience Core
CommandGenerateCompletePath.h
Go to the documentation of this file.
1 #ifndef CommandGenerateCompletePath_h
2 #define CommandGenerateCompletePath_h
3 
4 #include "./Command.h"
5 
6 #include <memory>
7 
10 
11 using namespace conscience_core::ai;
12 using namespace conscience_utils;
13 
14 namespace fs = std::filesystem;
15 using std::ceil, std::map, std::pair, std::make_pair, std::max, std::floor, std::numeric_limits, std::optional, std::array, std::string, std::vector, std::unique_ptr;
16 
18 
20 
21  public:
22  inline static const CommandTypeId COMMAND_ID = "GENERATE_COMPLETE_PATH_FOR_SCENE";
23 
27  CommandGenerateCompletePath(ptr<CscEntityReflexion> entityReflexion, optional<float> tileSizeCmMaybe, optional<CscArea3d*> area, optional<string> placeId);
28  virtual ~CommandGenerateCompletePath() = default;
29 
30  protected:
31  const CscCommandExecutionResultSequence * doExecute(CscEnvironmentSimulator &environmentSimulator) override;
32 
34  return entityReflexion;
35  }
36 
37  private:
38  std::unique_ptr<CscLogger> logger;
39  ptr<CscEntityReflexion> entityReflexion;
40  optional<string> placeId = {};
41 
42  bool areaDefined = false;
43  CscArea3d area;
44  CscArea3d areaPlace;
45  float tileSizeCm = 100.0f;
46  const float BEST_PATH_POINTS_HEIGHT_CM = 10;
47 
48  vector<CscPoint3dOriented *> bestPath;
49  int columnsCount = 0;
50  int tilesPerColumnCount = 0;
51 
52  float tileWidth = 0;
53  float tileHeight = 0;
54 
55  int inaccessibleTilesCount = 0;
56  int visitedOnceTilesCount = 0;
57  int allVisitedTilesCount = 0;
58  CscLocationTag* base = nullptr;
59  void computeBaseTile();
60 
61 
62  struct CSC_DLL_IMPORTEXPORT Tile {
63  public:
64  const int indexX;
65  const int indexY;
66 
67  bool visited = false;
68  bool accessible;
69  vector<int> visitsIndices;
70 
71  Tile(int indexX,
72  int indexY,
73  bool accessible) :indexX(indexX), indexY(indexY),accessible(accessible) {
74 
75  }
76  };
77 
81  struct CSC_DLL_IMPORTEXPORT ColumnChunkCrossroad {
82  public:
83  const int remoteChunkIndexInColumn;
84  const int y;
85  const int tileIndexInRemoteChunk;
86  const bool left;
87  bool disabled = false;
88 
89  ColumnChunkCrossroad(int remoteChunkIndexInColumn,
90  int y,
91  int tileIndexInRemoteChunk,
92  bool left) :
93  remoteChunkIndexInColumn(remoteChunkIndexInColumn), y(y),tileIndexInRemoteChunk(tileIndexInRemoteChunk), left(left) {
94  }
95  };
96 
97  struct CSC_DLL_IMPORTEXPORT ColumnChunk {
98  public:
102  vector<Tile *> tiles;
103 
104  int yMin = -1;
105  int yMax = -1;
106 
107  vector<ColumnChunkCrossroad *> pivotsLeft;
108  vector<ColumnChunkCrossroad *> pivotsRight;
109 
110  bool allTilesVisited() {
111  for (Tile * tile : tiles) {
112  if (!tile->visited) {
113  return false;
114  }
115  }
116  return true;
117  }
118  };
119 
120  struct CSC_DLL_IMPORTEXPORT Image {
121  public:
122  cv::Mat *image;
123  int imageHeight;
124  ~Image();
125  };
126 
127 
128  Image* mapImage = nullptr;
129  CscPoint3d simulatorPlaceShift = CscPoint3d(0,0,0);
130  ColumnChunkCrossroad * lastCrossRoad = nullptr;
131  vector<vector<ColumnChunk>> columns;
132  vector<vector<Tile *>> tiles;
133  void processChunk(int ix, ColumnChunk & current, int currentTileIndexInChunk);
134 
135  pair<int, int> lastTile = make_pair(-1, -1);
136  void addToBestPath(int tileX, int tileY);
137 
138  void initializeDimensions();
139  void generateTiles();
140  bool computeAccessibleTiles(float x2D, float y2D, float height);
141  bool computeAccessibleTilesCartography(vector<CscPoint3d*> *placeVertices);
142  bool computeAccessibleTilesPlace(vector<const CscPoint3d*> *placeVertices);
143  bool initTilesFromPlace(CscWorldPlace *place, CscEnvironmentSimulator &environmentSimulator);
144 
145  void addPathToTargetToBestPath(int tileX, int currentTileY, int targetTileY);
146  void enterCrossroad(int currentColumnIndex, ColumnChunkCrossroad * crossroad);
147  void freeMemory();
149  CscSequencePositions* backToBase(CscEnvironmentSimulator &environmentSimulator, string target, CscPoint3d* lastPosition);
150 
151  };
152 
153 COMMAND_REGISTER(CommandGenerateCompletePath, ptr<CscEntityReflexion>, optional<float>, optional<CscArea3d*>, optional<string>)
154 }
155 
156 #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
conscience_core::bridging::commands::CommandGenerateCompletePath
Definition: CommandGenerateCompletePath.h:19
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:34
conscience_core::ai
Definition: alerts.cpp:12
CscLocationTag
Definition: CscWorldElementParts.h:63
conscience_core::ai::logger
unique_ptr< CscLogger > logger
Definition: CscMrptAutonomousExploration.cpp:49
CscSequencePositions
Definition: CscSequencePositions.h:23
conscience_core::axiomes::CscArea3d
Definition: Csc3dTypes.h:231
Command.h
conscience_core::bridging::commands::result::CscCommandExecutionResultSequence
Definition: CommandExecutionResultSequence.h:15
conscience_core::bridging::commands::CommandTypeId
string CommandTypeId
Definition: Command.h:29
CscEntityReflexion.h
conscience_core::bridging::commands
Definition: cartographyCommands.cpp:4
conscience_core::bridging::commands::CscCommand
Definition: Command.h:40
COMMAND_REGISTER
#define COMMAND_REGISTER(COMMAND_REGISTER_className,...)
Definition: CscCommandAutoParse.h:477
conscience_utils
Definition: CscEntityReflexion.h:50
CscEnvironmentSimulator
Definition: CscEnvironmentSimulator.h:31
CscCommandAutoParse.h
CscWorldPlace
Definition: CscWorldPlace.h:34
conscience_core::bridging::commands::environment_objects::optional< string >
const ptr< CscObjectModel > const string const CscPoint3d const CscPoint3d optional< string >
Definition: environmentObjectsCommands.h:373
ptr
std::shared_ptr< T > ptr
Definition: CscCommon.h:29
conscience_core::bridging::commands::CommandGenerateCompletePath::getEntityReflexion
ptr< CscEntityReflexion > getEntityReflexion() const override
Definition: CommandGenerateCompletePath.h:33