3 #include <maths/Rotation.h>
4 #include <maths/Directions.h>
5 #include <assetloading/Asset.h>
6 #include <scanner/ScannerHead.h>
7 #include <scanner/FWFSettings.h>
8 #include <scanner/SimulatedPulse.h>
9 #include <scanner/beamDeflector/AbstractBeamDeflector.h>
11 #include <scene/RaySceneIntersection.h>
12 #include <noise/NoiseSource.h>
14 #include <glm/glm.hpp>
18 #include <unordered_map>
200 std::string
const id,
201 double const beamDiv_rad,
202 glm::dvec3
const beamOrigin,
204 std::list<int>
const &pulseFreqs,
206 double const averagePower,
210 double const atmosphericVisibility_km,
254 unsigned int legIndex,
255 double const currentGpsTime,
256 int const simFreq_Hz,
258 glm::dvec3
const &platformPosition,
261 std::function<
void(
SimulatedPulse const &sp)> handlePulseComputation
278 std::vector<double>
const &_tMinMax,
279 int const circleStep,
280 double const circleStep_rad,
282 double const divergenceAngle,
284 std::map<double, double> &reflections,
285 vector<RaySceneIntersection> &intersects
287 std::vector<double>
const &tMinMax,
289 std::map<double, double> &reflections,
290 std::vector<RaySceneIntersection> &intersects
296 double const minHitDist_m,
297 double const maxHitDist_m,
298 double &minHitTime_ns,
299 double &maxHitTime_ns,
301 double &distanceThreshold,
354 double const incidenceAngle,
355 double const targetRange,
356 double const targetReflectivity,
357 double const targetSpecularity,
358 double const targetSpecularExponent,
359 double const targetArea,
369 double const targetRange,
373 int calcTimePropagation(
374 std::vector<double> &timeWave
Base abstract class for detectors.
Definition: AbstractDetector.h:20
Base class for all assets.
Definition: Asset.h:10
static const glm::dvec3 right
x : left-right direction
Definition: Directions.h:18
Full Waveform settings.
Definition: FWFSettings.h:12
Class representing a multi scanner. It is, a scanner that can emit more than one pulse per time insta...
Definition: MultiScanner.h:14
Definition: Rotation.h:80
Class representing a scanner asset.
Definition: Scanner.h:28
bool isActive() const
Check if scanner is active (true) or not (false)
Definition: Scanner.h:1063
void handleSimStepNoise(glm::dvec3 &absoluteBeamOrigin, Rotation &absoluteBeamAttitude)
Handle position and attitude noise.
Definition: Scanner.cpp:287
std::shared_ptr< UniformNoiseSource< double > > intersectionHandlingNoiseSource
Uniform noise source for single thread mode.
Definition: Scanner.h:171
Class representing a scanning device. Any scanner needs to be composed of at least one scanning devic...
Definition: ScanningDevice.h:32
int numRays
Number of rays computed by the calcRaysNumber function.
Definition: ScanningDevice.h:123
double beamDivergence_rad
Beam divergence (radians)
Definition: ScanningDevice.h:62
double pulseLength_ns
Pulse length (nanoseconds)
Definition: ScanningDevice.h:66
std::shared_ptr< AbstractDetector > detector
Detector composing the scanner.
Definition: ScanningDevice.h:113
void configureBeam()
Configure beam related attributes. It is recommended to reconfigure beam attributes always that beam ...
Definition: ScanningDevice.cpp:80
double cached_Dr2
understood as the square of receiver diameter
Definition: ScanningDevice.h:180
FWFSettings FWF_settings
Full wave form settings for the scanner.
Definition: ScanningDevice.h:118
std::shared_ptr< AbstractBeamDeflector > beamDeflector
Beam deflector composing the scanner.
Definition: ScanningDevice.h:108
size_t devIdx
The index of the scanning device in the MultiScanner context.
Definition: ScanningDevice.h:45
double wavelength_m
Wave length (meters)
Definition: ScanningDevice.h:90
double beamWaistRadius
Beam waist radius.
Definition: ScanningDevice.h:98
int numTimeBins
Number of bins defining the discretization size.
Definition: ScanningDevice.h:142
int maxNOR
Maximum number of returns per pulse. When 0, it means there is not maximum at all.
Definition: ScanningDevice.h:133
Rotation headRelativeEmitterAttitude
Head relative emitter attitude.
Definition: ScanningDevice.h:57
bool initializeFullWaveform(double const minHitDist_m, double const maxHitDist_m, double &minHitTime_ns, double &maxHitTime_ns, double &nsPerBin, double &distanceThreshold, int &peakIntensityIndex, int &numFullwaveBins)
Definition: ScanningDevice.cpp:233
bool state_lastPulseWasHit
Flag specifying if last pulse was hit (true) or not (false)
Definition: ScanningDevice.h:166
std::vector< double > time_wave
Time discretization vector.
Definition: ScanningDevice.h:153
double beamQuality
Beam quality.
Definition: ScanningDevice.h:74
void doSimStep(unsigned int legIndex, double const currentGpsTime, int const simFreq_Hz, bool const isActive, glm::dvec3 const &platformPosition, Rotation const &platformAttitude, std::function< void(glm::dvec3 &, Rotation &)> handleSimStepNoise, std::function< void(SimulatedPulse const &sp)> handlePulseComputation)
Do the simulation steps of the scanning device.
Definition: ScanningDevice.cpp:123
double averagePower_w
Average power (watts)
Definition: ScanningDevice.h:70
double atmosphericExtinction
Atmospheric extinction.
Definition: ScanningDevice.h:94
double calcIntensity(double const incidenceAngle, double const targetRange, double const targetReflectivity, double const targetSpecularity, double const targetSpecularExponent, double const targetArea, double const radius) const
Compute intensity. It is the strength of the laser going back to the detector considering the emitted...
Definition: ScanningDevice.cpp:284
int state_currentPulseNumber
Current pulse number.
Definition: ScanningDevice.h:160
std::list< int > supportedPulseFreqs_Hz
Pulse frequencies (hertz) supoported by the scanner.
Definition: ScanningDevice.h:127
Rotation calcAbsoluteBeamAttitude(Rotation platformAttitude)
Compute the absolute beam attitude of the scanning device with respect to given absolute platform att...
Definition: ScanningDevice.cpp:170
void computeSubrays(std::function< void(std::vector< double > const &_tMinMax, int const circleStep, double const circleStep_rad, Rotation &r1, double const divergenceAngle, NoiseSource< double > &intersectionHandlingNoiseSource, std::map< double, double > &reflections, vector< RaySceneIntersection > &intersects)> handleSubray, std::vector< double > const &tMinMax, NoiseSource< double > &intersectionHandlingNoiseSource, std::map< double, double > &reflections, std::vector< RaySceneIntersection > &intersects)
Definition: ScanningDevice.cpp:180
void setLastPulseWasHit(bool const value)
Specify if last pulse was hit (true) or not (false)
Definition: ScanningDevice.cpp:338
bool lastPulseWasHit() const
Check if last pulse was hit (true) or not (false) for the scanning device.
Definition: ScanningDevice.h:390
void calcRaysNumber()
Compute the number of rays depending on beam sample quality.
Definition: ScanningDevice.cpp:104
void setHeadRelativeEmitterPosition(glm::dvec3 const &headRelativeEmitterPosition)
Set the relative emitter position.
Definition: ScanningDevice.h:401
void setHeadRelativeEmitterAttitude(Rotation const &headRelativeEmitterAttitude)
Set the relative emitter attitude.
Definition: ScanningDevice.h:409
ScanningDevice(size_t const devIdx, std::string const id, double const beamDiv_rad, glm::dvec3 const beamOrigin, Rotation const beamOrientation, std::list< int > const &pulseFreqs, double const pulseLength_ns, double const averagePower, double const beamQuality, double const efficiency, double const receiverDiameter_m, double const atmosphericVisibility_km, double const wavelength_m)
ScanningDevice constructor from given values.
Definition: ScanningDevice.cpp:9
double efficiency
Device efficiency.
Definition: ScanningDevice.h:78
double receiverDiameter_m
Receiver diameter (meters)
Definition: ScanningDevice.h:82
void setFWFSettings(std::shared_ptr< FWFSettings > FWF_settings)
Set the Full Waveform settings of the scanning device.
Definition: ScanningDevice.h:422
double calcAtmosphericAttenuation() const
Compute the atmospheric attenuation to be used as the atmospheric extinction.
Definition: ScanningDevice.cpp:87
std::shared_ptr< ScannerHead > scannerHead
Scanner head composing the scanning device.
Definition: ScanningDevice.h:103
FWFSettings const & getFWFSettings()
Obtain the Full Waveform settings of the scanning device.
Definition: ScanningDevice.h:417
double visibility_km
Visibility (kilometers)
Definition: ScanningDevice.h:86
int peakIntensityIndex
Index of bin containing the intensity peak. It is computed through calcTimePropagation function.
Definition: ScanningDevice.h:149
glm::dvec3 headRelativeEmitterPosition
Head relative emitter position.
Definition: ScanningDevice.h:53
double cached_Bt2
understood as the square of beam divergence
Definition: ScanningDevice.h:190
Class representing a simulated laser pulse.
Definition: SimulatedPulse.h:10
Class representing a single scanner. It is, a scanner that can only emit one pulse per time instant.
Definition: SingleScanner.h:12