Conscience Core
CscLidar3DEngineSimulated.h
Go to the documentation of this file.
1 //
2 // Created by Louis Grignon on 19/05/2026.
3 //
4 #pragma once
5 
6 #include "CscCommon.h"
7 #include "Lidar/CscLidarEngine.h"
9 
10 #include <atomic>
11 #include <chrono>
12 #include <thread>
13 #include <random>
14 
15 using std::chrono::steady_clock;
16 namespace chrono = std::chrono;
17 
18 namespace conscience_core::lidar {
19 
21 public:
23  const string &entitySerialNumber,
24  CscEnvironmentSimulator &globalEnvironmentSimulator,
25  double maxDistance = 5000.0,
26  unsigned int horizontalSamples = 720,
27  unsigned int verticalSamples = 64,
28  double horizontalFovDeg = 360.0,
29  double verticalFovDeg = 200.0,
30  int periodMillis = 175,
31  double fuzzinessDeg = 10.0);
32 
33  ~CscLidar3DEngineSimulated() override;
34 
35  void startEngine() override;
36  void stopEngine() override;
37 
38  void keepValues();
39 
40 private:
41  CscEnvironmentSimulator &globalEnvironmentSimulator;
42  const string entitySerialNumber;
43 
44  std::atomic_bool threadRunning{false};
45  bool keepValuesEnabled = false;
46 
47  std::thread *updateValuesThread = nullptr;
48 
49  const double maxDistance;
50  const unsigned int horizontalSamples;
51  const unsigned int verticalSamples;
52  const double horizontalFovDeg;
53  const double verticalFovDeg;
54  const int periodMillis;
55 
56  std::optional<CscPoint3d> lastRobotPosition = {};
57  std::optional<double> lastRobotYaw = {};
58  std::optional<steady_clock::time_point> odometryLastTime = {};
59 
60  const double fuzzinessDeg;
61 
62  std::mt19937 randomGenerator;
63  std::uniform_real_distribution<double> fuzzinessDistribution;
64 
65  void initThread();
66  void updateValues();
67  void updateLidarValuesThreadActionLoop();
68 
69  static CscPoint3d worldPointToRobotLocal(
70  const CscPoint3d &worldPoint,
71  const CscPoint3d &entityPosition,
72  const CscQuaternion &entityQuaternion);
73 };
74 
75 }
conscience_core::lidar::CscLidar3DEngineSimulated::keepValues
void keepValues()
Definition: CscLidar3DEngineSimulated.cpp:45
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:246
conscience_core::lidar::CscLidar3DEngineSimulated::~CscLidar3DEngineSimulated
~CscLidar3DEngineSimulated() override
Definition: CscLidar3DEngineSimulated.cpp:41
conscience_core::lidar
Definition: CscEntityReflexion.h:42
CscLidarEngine.h
CscCommon.h
conscience_core::lidar::CscLidar3DEngineSimulated::CscLidar3DEngineSimulated
CscLidar3DEngineSimulated(const string &entitySerialNumber, CscEnvironmentSimulator &globalEnvironmentSimulator, double maxDistance=5000.0, unsigned int horizontalSamples=720, unsigned int verticalSamples=64, double horizontalFovDeg=360.0, double verticalFovDeg=200.0, int periodMillis=175, double fuzzinessDeg=10.0)
Definition: CscLidar3DEngineSimulated.cpp:19
conscience_core::axiomes::CscQuaternion
Definition: Csc3dTypes.h:150
conscience_core::bridging::commands::environment_objects::optional< double >
const ptr< CscObjectModel > const string const CscPoint3d const CscPoint3d optional< double >
Definition: environmentObjectsCommands.h:367
CscEnvironmentSimulator.h
conscience_core::lidar::CscLidar3DEngineSimulated::stopEngine
void stopEngine() override
Definition: CscLidar3DEngineSimulated.cpp:53
CscEnvironmentSimulator
Definition: CscEnvironmentSimulator.h:31
conscience_core::lidar::CscLidar3DEngineSimulated
Definition: CscLidar3DEngineSimulated.h:20
conscience_core::lidar::CscLidar3DEngineSimulated::startEngine
void startEngine() override
Definition: CscLidar3DEngineSimulated.cpp:49