Helios++
Helios software for LiDAR simulations
AbstractDetector.h
1 #pragma once
2 
3 #include <boost/asio/thread_pool.hpp>
4 #include <boost/asio/post.hpp>
5 #include <boost/filesystem.hpp>
6 namespace fs = boost::filesystem;
7 
8 #include "Scanner.h"
9 #include "ScannerSettings.h"
10 
11 #include "Measurement.h"
12 #include "MeasurementsBuffer.h"
13 #include "SimpleSyncFileWriter.h"
14 #include "LasSyncFileWriter.h"
15 #include "ZipSyncFileWriter.h"
16 
21 public:
22  // *** ATTRIBUTES *** //
23  // ******************** //
27  std::shared_ptr<Scanner> scanner;
31  std::shared_ptr<MeasurementsBuffer> mBuffer;
35  std::shared_ptr<SyncFileWriter> sfw;
36 
45 
46  // File output:
52  bool lasOutput;
57  bool zipOutput;
63  double lasScale;
64 
72  "%.3f %.3f %.3f %.4f %.4f %d %d %d %s %d";
73 
77  fs::path outputFilePath;
78 
79  // *** CONSTRUCTION / DESTRUCTION *** //
80  // ************************************ //
88  std::shared_ptr<Scanner> scanner,
89  double accuracy_m,
90  double rangeMin_m
91  ){
92  this->lasOutput = false;
93  this->zipOutput = false;
94  this->lasScale = 0.0001;
95  this->cfg_device_accuracy_m = accuracy_m;
96  this->cfg_device_rangeMin_m = rangeMin_m;
97  this->scanner = std::move(scanner);
98  }
99  virtual ~AbstractDetector() {}
100  virtual std::shared_ptr<AbstractDetector> clone() = 0;
101  virtual void _clone(std::shared_ptr<AbstractDetector> ad);
102 
103  // *** M E T H O D S *** //
104  // *********************** //
108  virtual void shutdown();
113  void writeMeasurement(Measurement & m);
118  void writeMeasurements(std::list<Measurement*> & m);
123  virtual void applySettings(std::shared_ptr<ScannerSettings> & settings) {};
124 
133  virtual void simulatePulse(
134  thread_pool & pool,
135  glm::dvec3 absoluteBeamOrigin,
136  Rotation absoluteBeamAttitude,
137  int state_currentPulseNumber,
138  long currentGpsTime
139  ) = 0;
140 
141  // *** GETTERS and SETTERS *** //
142  // ***************************** //
147  void setOutputFilePath(std::string path);
148 };
void writeMeasurements(std::list< Measurement *> &m)
Write a list of measurements.
Definition: AbstractDetector.cpp:67
double cfg_device_accuracy_m
Detector accuracy in meters.
Definition: AbstractDetector.h:40
virtual void shutdown()
Shutdown the detector when simulation has finished.
Definition: AbstractDetector.cpp:58
bool lasOutput
Flag specifying if detector output must be written in LAS format (true) or not (false) ...
Definition: AbstractDetector.h:52
Definition: Rotation.h:80
std::string outputFileLineFormatString
Format string for output file line.
Definition: AbstractDetector.h:71
double lasScale
Scale factor specification to be used when LAS output format specified.
Definition: AbstractDetector.h:63
Base abstract class for detectors.
Definition: AbstractDetector.h:20
Class representing a thread pool to deal with multi threading tasks.
Definition: ThreadPool.h:14
Class representing a measurement.
Definition: Measurement.h:12
virtual void simulatePulse(thread_pool &pool, glm::dvec3 absoluteBeamOrigin, Rotation absoluteBeamAttitude, int state_currentPulseNumber, long currentGpsTime)=0
Compute pulse simulation.
virtual void applySettings(std::shared_ptr< ScannerSettings > &settings)
Apply scanner settings to the detector.
Definition: AbstractDetector.h:123
std::shared_ptr< SyncFileWriter > sfw
Synchronous file writer.
Definition: AbstractDetector.h:35
AbstractDetector(std::shared_ptr< Scanner > scanner, double accuracy_m, double rangeMin_m)
Base constructor for abstract detector.
Definition: AbstractDetector.h:87
std::shared_ptr< Scanner > scanner
Scanner which the detector belongs to.
Definition: AbstractDetector.h:27
fs::path outputFilePath
Path to output file.
Definition: AbstractDetector.h:77
void setOutputFilePath(std::string path)
Set path to output file.
Definition: AbstractDetector.cpp:31
void writeMeasurement(Measurement &m)
Write a measurement.
Definition: AbstractDetector.cpp:62
double cfg_device_rangeMin_m
Minimum range for detector in meters.
Definition: AbstractDetector.h:44
std::shared_ptr< MeasurementsBuffer > mBuffer
Buffer to store measurements.
Definition: AbstractDetector.h:31
bool zipOutput
Flag specifying if detector output must be zipped (true) or not (false)
Definition: AbstractDetector.h:57