Helios++
Helios software for LiDAR simulations
AbstractBeamDeflector.h
1 #pragma once
2 
3 #include "ScannerSettings.h"
4 
5 #include "maths/Rotation.h"
6 
11 public:
12  // *** ATTRIBUTES *** //
13  // ******************** //
14  // Device definition variables:
27 
28  // Setting variables:
45 
46  // Stat variables:
54  double state_angleDiff_rad = 0;
55 
56  // ############# BEGIN "state cache" members ##############
57  // Members with "_cached" prefix contain values that are derived from state variables and
58  // required multiple times per sim step at different places in the code. In order to avoid
59  // unneccessary re-computations of the same value, they are cached in special variables:
64 
69 
70  // *** CONSTRUCTION / DESTRUCTION *** //
71  // ************************************ //
79  double scanAngleMax_rad,
80  double scanFreqMax_Hz,
81  double scanFreqMin_Hz
82  ) {
83  cfg_device_scanAngleMax_rad = scanAngleMax_rad;
84  cfg_device_scanFreqMax_Hz = scanFreqMax_Hz;
85  cfg_device_scanFreqMin_Hz = scanFreqMin_Hz;
86  }
87 
88  virtual ~AbstractBeamDeflector() {}
89  virtual std::shared_ptr<AbstractBeamDeflector> clone() = 0;
90  virtual void _clone(std::shared_ptr<AbstractBeamDeflector> abd);
91 
92 
93  // *** M E T H O D S *** //
94  // *********************** //
100  virtual void applySettings(std::shared_ptr<ScannerSettings> settings);
105  virtual bool lastPulseLeftDevice();
109  virtual void doSimStep() = 0;
110 
111  // *** GETTERS and SETTERS *** //
112  // ***************************** //
123  {return this->cached_emitterRelativeAttitude;};
128  virtual void setScanAngle_rad(double scanAngle_rad);
133  virtual void setScanFreq_Hz(double scanFreq_hz);
134 };
virtual void applySettings(std::shared_ptr< ScannerSettings > settings)
Apply given scanner settings to beam deflector.
Definition: AbstractBeamDeflector.cpp:32
Base abstract class for beam deflectors.
Definition: AbstractBeamDeflector.h:10
double state_currentBeamAngle_rad
Current beam angle (radians)
Definition: AbstractBeamDeflector.h:50
double cfg_setting_verticalAngleMax_rad
Maximum vertical scanning angle (radians)
Definition: AbstractBeamDeflector.h:44
double cfg_device_scanAngleMax_rad
Maximum scanning angle (radians)
Definition: AbstractBeamDeflector.h:26
Definition: Rotation.h:80
virtual bool lastPulseLeftDevice()
Check if last pulse left device (true) or not (false)
Definition: AbstractBeamDeflector.cpp:75
double state_angleDiff_rad
Angle differential (radians)
Definition: AbstractBeamDeflector.h:54
Rotation getEmitterRelativeAttitude()
Get the relative emitter attitude.
Definition: AbstractBeamDeflector.cpp:56
double cfg_device_scanFreqMax_Hz
Minimum scanning frequency (hertz)
Definition: AbstractBeamDeflector.h:18
double cfg_setting_verticalAngleMin_rad
Minimum vertical scanning angle (radians)
Definition: AbstractBeamDeflector.h:40
double cached_angleBetweenPulses_rad
Angle between pulses (radians)
Definition: AbstractBeamDeflector.h:63
virtual void setScanAngle_rad(double scanAngle_rad)
Set the scan angle.
Definition: AbstractBeamDeflector.cpp:60
virtual void setScanFreq_Hz(double scanFreq_hz)
Set the scanning frequency.
Definition: AbstractBeamDeflector.cpp:79
double cfg_setting_scanAngle_rad
Scanning angle (radians)
Definition: AbstractBeamDeflector.h:36
Rotation cached_emitterRelativeAttitude
Relative emitter attitude.
Definition: AbstractBeamDeflector.h:68
double cfg_setting_scanFreq_Hz
Scanning frequency (hertz)
Definition: AbstractBeamDeflector.h:32
double cfg_device_scanFreqMin_Hz
Maximum scanning frequency (hertz)
Definition: AbstractBeamDeflector.h:22
virtual void doSimStep()=0
Perform computations for current simulation step.
AbstractBeamDeflector(double scanAngleMax_rad, double scanFreqMax_Hz, double scanFreqMin_Hz)
Base constructor for beam deflectors.
Definition: AbstractBeamDeflector.h:78
Rotation & getEmitterRelativeAttitudeByReference()
Get the relative emitter attitude by referencce.
Definition: AbstractBeamDeflector.h:122