Helios++
Helios software for LiDAR simulations
AbstractPulseRunnable Class Referenceabstract

Base abstract class for pulse runnables. More...

#include <AbstractPulseRunnable.h>

Inheritance diagram for AbstractPulseRunnable:
Collaboration diagram for AbstractPulseRunnable:

Public Member Functions

 AbstractPulseRunnable (std::shared_ptr< AbstractDetector > detector, glm::dvec3 absoluteBeamOrigin, Rotation absoluteBeamAttitude, int pulseNumber, long gpsTime)
 Base constructor for pulse runnables. More...
 
double calcCrossSection (double f, double Alf, double theta)
 Compute cross section. More...
 
double phongBDRF (double incidenceAngle, double targetSpecularity, double targetSpecularExponent)
 Compute the phong model. More...
 
double calcAtmosphericFactor (double targetRange)
 Compute atmospheric factor \(f\), understood as the energy left after attenuation by air particles in range \([0, 1]\). More...
 
double calcReceivedPower (double emittedPower, double targetRange, double incidenceAngle, double targetReflectivity, double targetSpecularity, double targetSpecularExponent, double targetArea)
 Solve the laser radar equation. More...
 
double calcReceivedPower (double emittedPower, double targetRange, double sigma)
 Alternative received power computation method. More...
 
void capturePoint (Measurement &m, RandomnessGenerator< double > &rg, std::vector< Measurement > *allMeasurements, std::mutex *allMeasurementsMutex, std::vector< Measurement > *cycleMeasurements, std::mutex *cycleMeasurementsMutex)
 Capture point if proceed and write it. More...
 
void applyMeasurementError (RandomnessGenerator< double > &rg, double &distance, glm::dvec3 &beamOrigin, glm::dvec3 &beamDirection)
 Apply error to received measurement. More...
 
virtual void operator() ()=0
 Abstract operator. It must be overridden by any implementation which concretes AbstractPulseRunnable.
 

Static Public Member Functions

static double _calcReceivedPower (double Pt, double Dr2, double R, double Bt2, double etaSys, double etaAtm, double sigma)
 Compute received power \(P_{r}\). More...
 

Public Attributes

std::shared_ptr< AbstractDetectordetector = nullptr
 Detector used to simulate pulse.
 
glm::dvec3 absoluteBeamOrigin
 Beam origin in absolute coordinates.
 
Rotation absoluteBeamAttitude
 Beam attitude.
 
int currentPulseNum
 Number of current pulse.
 
long currentGpsTime
 Current GPS time in milliseconds.
 
bool writeGround = true
 Flag to specify if ground points must be captured (true) or not (false)
 

Detailed Description

Base abstract class for pulse runnables.

Constructor & Destructor Documentation

◆ AbstractPulseRunnable()

AbstractPulseRunnable::AbstractPulseRunnable ( std::shared_ptr< AbstractDetector detector,
glm::dvec3  absoluteBeamOrigin,
Rotation  absoluteBeamAttitude,
int  pulseNumber,
long  gpsTime 
)
inline

Member Function Documentation

◆ _calcReceivedPower()

double AbstractPulseRunnable::_calcReceivedPower ( double  Pt,
double  Dr2,
double  R,
double  Bt2,
double  etaSys,
double  etaAtm,
double  sigma 
)
inlinestatic

Compute received power \(P_{r}\).

\[ P_{r} = \textrm{etaSys} \cdot \textrm{etaAm} \cdot \sigma \cdot \frac{P_{t} \cdot D_{r2}}{4{\pi} \cdot R^{4} \cdot B_{t2}} \]

◆ applyMeasurementError()

void AbstractPulseRunnable::applyMeasurementError ( RandomnessGenerator< double > &  rg,
double &  distance,
glm::dvec3 &  beamOrigin,
glm::dvec3 &  beamDirection 
)

Apply error to received measurement.

Parameters
rgRandomnessGenerator to be used to apply error to the measure
distanceReference to the distance where error shall be applied
beamOriginReference to the beam originWaypoint where error shall be applied beamDirection Reference to the beam direction where error shall be applied

◆ calcAtmosphericFactor()

double AbstractPulseRunnable::calcAtmosphericFactor ( double  targetRange)
inline

Compute atmospheric factor \(f\), understood as the energy left after attenuation by air particles in range \([0, 1]\).

Parameters
targetRange\(r\)

Let \(A_{e}\) be the atmospheric extinction

\[ f = e^{-2r \cdot A_{e}} \]

Returns
\(f\)

◆ calcCrossSection()

double AbstractPulseRunnable::calcCrossSection ( double  f,
double  Alf,
double  theta 
)

Compute cross section.

\[ C_{S} = 4{\pi} \cdot f \cdot A_{lf} \cdot \cos(\theta) \]


Paper DOI: 10.1016/j.isprsjprs.2010.06.007

Returns
Cross section

◆ calcReceivedPower() [1/2]

double AbstractPulseRunnable::calcReceivedPower ( double  emittedPower,
double  targetRange,
double  incidenceAngle,
double  targetReflectivity,
double  targetSpecularity,
double  targetSpecularExponent,
double  targetArea 
)

Solve the laser radar equation.


Report title: Signature simulation and signal analysis for 3-D laser radar
Report authors: Tomas Carlsson, Ove Steinvall and Dietmar Letalick

◆ calcReceivedPower() [2/2]

double AbstractPulseRunnable::calcReceivedPower ( double  emittedPower,
double  targetRange,
double  sigma 
)

Alternative received power computation method.

Parameters
emittedPowerEmitted power
targetRangeThe distance with respect to intersection multiplied by the sine of the divergence angle
sigmaSigma value taken from LadLut specification
Returns
Received power
See also
LadLut
AbstractPulseRunnable::_calcReceivedPower

◆ capturePoint()

void AbstractPulseRunnable::capturePoint ( Measurement m,
RandomnessGenerator< double > &  rg,
std::vector< Measurement > *  allMeasurements,
std::mutex *  allMeasurementsMutex,
std::vector< Measurement > *  cycleMeasurements,
std::mutex *  cycleMeasurementsMutex 
)

Capture point if proceed and write it.

Parameters
mMeasurement
rgRandomness generator
allMeasurementsVector of all measurements to store captured point if requested
allMeasurementsMutexMutex to handle concurrent access to vector of all measurements
cycleMeasurementsVector of current cycle measurements to store captured point if requested
cycleMeasurementsMutexMutex to handle concurrent access to vector of current cycle measurements

◆ phongBDRF()

double AbstractPulseRunnable::phongBDRF ( double  incidenceAngle,
double  targetSpecularity,
double  targetSpecularExponent 
)

Compute the phong model.


Paper title: NORMALIZATION OF LIDAR INTENSITY DATA BASED ON RANGE AND SURFACE INCIDENCE ANGLE
Paper authors: B. Jutzi, H. Gross


The documentation for this class was generated from the following files: