-
Notifications
You must be signed in to change notification settings - Fork 44
Scanners
The scanner is assigned in the <survey>
tag of the survey.xml
together with the survey name
, the scene
, the platform
and optionally seed
. Referencing the different components is done by specifying the absolute or relative path of the XML file, followed by a hash (#) and the ID of the entry.
<survey name="toyblocks_als" platform="data/platforms.xml#sr22" scanner="data/scanners_als.xml#riegl_vq-880g" scene="data/scenes/toyblocks/toyblocks_scene.xml#toyblocks_scene">
Scanners are defined in the two XML files data/scanners_als.xml
and data/scanners_tls.xml
. For an overview of all possible tags and parameters in these XML files, go to XML Tag and Parameter Summary at the bottom of the page. Here is an example definition for the RIEGL VUX-1UAV:
<!-- ##### BEGIN RIEGL VUX-1UAV ##### -->
<scanner id = "riegl_vux-1uav"
accuracy_m = "0.01"
beamDivergence_rad = "0.0005"
name = "RIEGL VUX-1UAV"
optics = "oscillating"
pulseFreqs_Hz = "50000,100000,200000,300000,380000,550000"
pulseLength_ns = "4"
rangeMin_m = "3"
scanAngleMax_deg = "195"
scanAngleEffectiveMax_deg = "195"
scanFreqMin_Hz = "10"
scanFreqMax_Hz = "200">
<beamOrigin x="0" y="0.085" z="0.06">
<rot axis="x" angle_deg="90" />
<rot axis="z" angle_deg="90" />
</beamOrigin>
<headRotateAxis x="0" y="0" z="1"/>
</scanner>
Within the <scanner>
tag, sensor specifications are given:
-
id
: the scanner ID. It is used to reference it in the survey file, using the (relative) path to the scanner XML file, followed by a hash and the scanner ID. -
name
: name of the scanner
Head:
-
headRotatePerSecMax_deg
: Maximum speed of scanner head rotation [deg]. -
<headRotateAxis >
: Axis around which the scanner head is rotated. -
<beamOrigin>
: Origin of the laser beam. The position (x,y,z coordinates) and the attitude (rotations about X,Y,Z) can be provided. The offset and rotations are defined in the same manner as for thescannerMount
tag in the Platforms XML. By default, the beam origin is assumed to be in the center of the scanner, and the axes of the beam to be aligned with the axes of the scanner. The rotation defined in<beamOrigin>
is applied before the one of the<scannerMount>
in the Platforms XML. We suggest to use thebeamOrigin
rotation to point the scanner downwards and have it scan left-to-right (for airborne systems), as this is the default use case. If no rotation is provided, the scanner looks to the front of the platform and scans up-down:
The rotation can be given in local
mode by setting <beamOrigin [...] rotations="local">
, where axes are rotated. By default, axes are kept fixed in the global
mode. Also see rotations section of the page on platforms.
The x, y, z coordinates of the position of the origin of the laser beam are set in the following coordinate system:
Emitter:
-
beamDivergence_rad
: the$1/e^2$ beam divergence full-angle [rad] (default: 0.0003). If a technical sheet gives the beam divergence at the$1/e$ power points or at 50% peak intensity (full width half maximum/FWHM), it has to be converted:$\theta_{1/e^2} = \sqrt{2} \theta_{1/e}$ $\theta_{1/e^2} = \frac{2 FWHM}{\sqrt{2 \ln 2}}$
-
pulseFreqs_Hz
: List of supported pulse frequency or frequencies [Hz]. -
pulseLength_ns
: Laser pulse length/duration [ns] (default: 4.0). -
wavelength_nm
: Wavelength [nm] (default: 1064). -
averagePower_w
: The average power emitted by the laser. Integrating the whole footprint will give this power [W] (default: 4.0).
Deflector:
-
optics
: Laser beam deflector. The supported deflectors are:-
(a) rotating mirror (
rotating
)- with the optional parameter
scanAngleEffectiveMax_deg
- with the optional parameter
-
(b) fiber array (
line
)- with the optional parameter
numFibers
- with the optional parameter
-
(c) oscillating mirror (
oscillating
)- with the optional parameter
scanProduct
. The maximum scan product determines the maximum scanner velocity. It is the product of the maximum scan rate and maximum scan angle, which are inversely proportional to each other (Ussyshkin et al. 2008).
- with the optional parameter
-
(d) conic mirror (
conic
)- note that the parameter
scanAngle_deg
in thescannerSettings
of a survey XML is not used for this beam deflector because this scanner type does not have a selectable scan angle. ThemaxScanAngle_deg
defined in the scanner XML is used as half-opening angle of the cone.
- note that the parameter
-
(e) risley prims (
risley
)- with the parameters
rotorFreq1_Hz
androtorFreq2_Hz
, i.e., the rotational speeds of the two prisms. - note that the parameter
scanFreq_Hz
is not used for this beam deflector!
- with the parameters
-
(a) rotating mirror (
Figure: Different scan patterns supported by HELIOS++.
-
scanAngleMax_deg
: Maximum possible scan angle [deg], defined as half-angle. Forconic
("Palmer-") scanners, this parameter determines the half-opening angle of the conical scan pattern. -
scanAngleEffectiveMax_deg
: Effective maximum possible scan angle [deg] - only for rotational mirrors. If a data sheet provides an "effective measurement rate" different from the pulse repetition rate (PRR) (pulse frequency), obtain the ratio of PRR to effective measurement rate. Multiply the maximum scan angle (as in the data sheet) with this ratio to obtain thescanAngleMax_deg
and supply the maximum scan angle (as in the data sheet) asscanAngleEffectiveMax_deg
. Background: For rotating prisms, the actual output window might be smaller than the maximum output window. The reason not to utilize the full available angular domain is that the beam has a finite size, i.e., the spot on the mirror will not "jump" from one face of the deflector to the next - resulting in scattering in not-well defined directions. The available angular domain may further be contrained by occlusions, e.g., by the casing or mounting of the scanner. -
scanFreqMin_Hz
andscanFreqMax_Hz
: Minimum and maximum values to define the possible scan frequency range [Hz]
Detector:
-
rangeMin_m
: Minimum range in m -
accuracy_m
: Sensor accuracy in m -
maxNOR
: Maximum number of returns per pulse, e.g., if maxNOR equals 1, only the first return is recorded for each pulse. IfmaxNOR
is 0 (default), the number of returns per pulse is not limited.
Other parameters:
-
<FWFSettings>
, see Full Waveform Simulation:beamSampleQuality
binSize_ns
maxFullwaveRange_ns
winSize_ns
-
beamQualityFactor
: How well the beam is focussed. The beam waist radius$w_0$ is calculated as$\Large w_0=\frac{beamQualityFactor \cdot \lambda}{\pi \cdot beamDivergence}$ and is assumed at the minimum range as defined above. Do not confuse with thebeamSampleQuality
, which defines the number of subrays used (default: 1.0). -
opticalEfficiency
: Efficiency of the scanner, i.e.$\eta_{Sys}$ in the LiDAR Equation (Höfle & Pfeifer 2007) (default: 0.99). -
atmosphericVisibility_km
: Used to calculate atmospheric attenuation, i.e.$\eta_{Atm}$ by Carlsson et al. (2001). The calculation depends on the wavelength (default: 23.0 km). -
receiverDiameter_m
: Unused (default: 0.15 m).
With these parameters, custom scanners can be defined from scanner datasheets. Furthermore, configurations can be specified. For instance, the following XML snippet defines a RIEGL VZ-400 terrestrial laser scanner with a 30° tilt mount:
<!-- ##### BEGIN RIEGL VZ-400 upward tilt 30° ##### -->
<scanner id = "riegl_vz400"
name = "RIEGL VZ-400"
accuracy_m = "0.005"
beamDivergence_rad = "0.0003"
headRotatePerSecMax_deg = "60"
optics = "rotating"
pulseFreqs_Hz = "100000,300000"
pulseLength_ns = "5"
rangeMin_m = "1.5"
scanAngleMax_deg = "50"
scanAngleEffectiveMax_deg = "50"
scanFreqMin_Hz = "3"
scanFreqMax_Hz = "120">
<FWFSettings beamSampleQuality="3"/>
<beamOrigin x="0" y="0" z="0.2">
<rot axis="y" angle_deg="0" />
<rot axis="z" angle_deg="0" />
<rot axis="x" angle_deg="30" />
</beamOrigin>
<headRotateAxis x="0" y="0" z="1"/>
</scanner>
<!-- ##### END RIEGL VZ-400 upward tilt 30° ##### -->
Scanner settings are defined with the <scannerSettings>
tag in the survey XML file for each leg.
<scannerSettings active="true" pulseFreq_hz="100000" verticalAngleMin_deg="-50.0" verticalAngleMax_deg="50.0" scanFreq_hz="120" headRotatePerSec_deg="10.00" headRotateStart_deg="0.0" headRotateStop_deg="360.0"/>
The possible parameters are:
-
active
: Boolean, "true" or "false". This parameter is relevant e.g. for offline (i.e. scanner is turned off) flight lines in airborne surveys. (default: "true"). -
pulseFreq_hz
: Pulse repetition frequency (PRF) = number of laser pulses per second [Hz] (default: 0.0). -
scanFreq_hz
: Number of scan lines per second [Hz] (default: 0.0). -
trajectoryTimeInterval_s
: Time interval in seconds for the trajectory output file. If this is set to 0, no trajectory is written. For a measurement frequency of 100 Hz, enter 0.01 (default: 0.0). -
verticalResolution_deg
: Targeted resolution in degrees within the scan plane. Setting this will overwrite thescanFreq_Hz
value. -
horizontalResolution_deg
: Targeted resolution in degrees in the direction of the head rotation (forstatic
platforms). Setting this will overwrite theheadRotatePerSec_deg
value.
If the verticalResolution_deg
or horizontalResolution_deg
cannot be achieved due to scanner constraints (e.g. due to the scanFreqMin_Hz
/scanFreqMax_Hz
or the headRotatePerSecMax_deg
values defined above), an error message will be printed and execution will be stopped.
Horizontal Field of View (FOV):
-
headRotateStart_deg
andheadRotateStop_deg
: Angles to start and stop scanner head rotation to define the horizontal FOV. 0° is pointing to the primary (i.e. X-) axis of the scene coordinate system. If using a projected coordinate system like UTM, the primary axis is pointing north. Angles are assumed mathematically positive, i.e. going counter-clockwise, which is contrary to an azimuth value. -
headRotatePerSec_deg
: Speed of scanner head rotation in degrees per second. Can be positive for counterclockwise rotation or negative for clockwise rotation. Make sure thatheadRotateStart_deg
is larger thanheadRotateStop_deg
if setting a negative value.
Vertical Field of View:
-
scanAngle_deg
: (Vertical) half scan angle in degrees.scanAngle_deg
= 30 corresponds to +- 30° (60° swath). -
verticalAngleMin_deg
andverticalAngleMax_deg
: Independent minimum and maximum vertical scan angle. Can be positive or negative.scanAngle_deg
="30" would correspond toverticalAngleMin_deg
="-30" andverticalAngleMax_deg
= "30"
We suggest to use the +- scan angle range for ALS surveys, and setting the minimum and maximum vertical angles for TLS surveys.
Figure: Definition of the horizontal and vertical field with different HELIOS parameters.
For ease of use, the parameters verticalResolution_deg
and horizontalResolution_deg
in the <scannerSettings >
tag of each leg
should be used. However, they can also be calculated from the scanAngle_deg
, scanFreq_Hz
, pulseFreq_Hz
and the headRotatePerSec_Hz
values. For a single-axis scanner (typically used in ALS/MLS scenarios), the horizontalResolution_deg
is dependent on the flight speed (movePerSec_m
) of the leg.
Formula:
verticalResolution_deg
= 2 x scanAngle_deg
x scanFreq_hz
/ pulseFreq_hz
Example for a Riegl VZ400: 2 x 40° x 50 Hz / 100000 Hz = 0.04°
Formula:
horizontalResolution_deg
= headRotatePerSec_deg
/ scanFreq_hz
Example for a Riegl VZ400: 2°/s / 50 Hz = 0.04°
-
Example for TLS:
Scanning a wall at 50 meters with vertical and horizontal angular resolutions of 0.04º and 0.02º respectively:
Vertical point spacing = 50 m x tan(0.04º) = 0.0349 m
Horizontal point spacing = 50 m x tan(0.02º) = 0.0175 m -
Example for ALS: Scanning flat ground at 650 meters at 60 m/s of speed with 60 Hz of scan rate and FOV of 40º:
Vertical point spacing = (2 x 650 m x tan(40º/2)) / (100000 Hz / 60 Hz) = 0.2839 m (also known as across track spacing)*
Horizontal point spacing = 60 m/s / 60 Hz = 1.0 m (also known as along track spacing)*In the case of a Z-shaped scan (e.g. oscillating mirror) it should be multiplied by 2 because of the current scan line definition
For quick calculation of the scanner parameters from a given resolution, we provide a MS Excel worksheet: rot_speed_from_spacing.xlsx
In order to write the trajectories, a time interval is provided to the parameter trajectoryTimeInterval_s
in the <scannerSettings >
tag of each <leg>
. For a measurement frequency of 100 Hz, enter 0.01. By default, trajectoryTimeInterval_s
is 0.0, which means there is no trajectory file output. For TLS surveys, only one position will be written per leg, as it does not change during the scan.
There is a number of full waveform (FWF) settings that are specified in the <FWFSettings>
tag in the survey XML file. If they are not provided here, they may be read from the scanner definition or else default values are used, which are indicated in brackets:
-
binSize_ns
: Size of bins to discretize the entire temporal domain of the FWF signal [ns]. It determines the number of bins:numFullwaveBin = floor[min(maxHitTime_ns - minHitTime_ns, maxFullwaveRange_ns) / binSize_ns] (default: 0.25).
-
maxFullwaveRange_ns
: Maximum range of the full waveform [ns]. It is used to avoid negative influences on runtime in case of large ranges. Information afterminHitTime_ns
+maxFullwaveRange
is discarded and a warning message is displayed. ThemaxFullwaveRange_ns
is only applied if it is larger than 0 (default: 0). -
winSize_ns
: Number of neigbhoring samples to check (i.e. 1D window size) when finding local maxima for Gaussian decomposition (default:pulseLength_ns
/4, see Scanner definition (above)). -
beamSampleQuality
: Quality of spatial discretization of the subrays (higher value = more subrays within the laser cone). (default: 3 ( = 19 subrays)). For details, see the page on Fullwave processing. The number of subrays can be calculated as follows:
$$n_{Rays} = 1 + \sum_{i=1}^{bSQ} \lfloor 2 \pi i \rfloor$$
Figure: Figure of the simulation of beam divergence using mutliple subsampling rays. Each black dot represents one subsampling ray. For visualization purposes, the rays themselves are not shown and the illustration is not to scale. Reprinted from Bechtold & Höfle 2016.
It is possible to configure a scanner to be a MultiScanner or Multi-channel scanner. First, it is necessary to have a standard scanner definition. This specification will then be used as the default configuration for each channel. Second, it is possible to define a <channels>
element with as many <channel>
elements inside as desired. For each channel, it is possible to define almost all attributes that can be defined for a single scanner, including the optics. Thus, it is possible to have different channels with different beam deflection methods. The only attributes all channels must share are those related to the pulse frequency. At the moment, HELIOS++ uses the pulse frequency to define the simulation frequency. Therefore, it does not support channels with different pulse frequencies.
The XML snippet below defines two channels with different beam origins. The first channel will have a cone center looking left 30 degrees, while the second one will have a cone center looking right 30 degrees. Besides, the identifier of each channel is explicitly set. All the variables that define the scanner but the beam origin will be the same for any channel.
<scanner ...>
<channels>
<channel id="0">
<beamOrigin x="0" y="0" z="0">
<rot axis="z" angle_deg="-30"/>
</beamOrigin>
</channel>
<channel id="1">
<beamOrigin x="0" y="0" z="0">
<rot axis="z" angle_deg="30"/>
</beamOrigin>
</channel>
</channels>
</scanner>
The argument --splitByChannel
can be used to make multi-channel scanners write their output point clouds to a different file per channel. This output strategy can also be requested from the PyHelios side by calling simBuilder.setSplitByChannel(True)
on a SimulationBuilder instance (see PyHelios doc for more information on PyHelios).
Attribute | Default value | Comment |
---|---|---|
id |
REQUIRED | |
name |
||
accuracy_m |
0.0 | |
beamDivergence_rad |
0.0003 | |
optics |
REQUIRED possible values: "rotating", "line", "oscillating", "conic", "risley" |
|
pulseFreqs_Hz |
List of supported pulse frequencies | |
pulseLength_ns |
4.0 | |
wavelength_nm |
1064 | |
averagePower_w |
4.0 | |
maxNOR |
0 | Maximum number of returns per pulse. If maxNOR = 0 (default), there is no limit to the number of returns per pulse. |
rangeMin_m |
0.0 | |
rangeMax_m |
inf | default: maximum range of a double , i.e., 1.8·10308
|
scanFreqMin_Hz |
0.0 | |
scanFreqMax_Hz |
0.0 | |
scanAngleMax_deg |
0.0 | |
scanAngleEffectiveMax_deg |
specific to "rotating" deflector | |
numFibers |
1 | specific to "line" deflector |
scanProduct |
1000000 | specific to "oscillating" deflector |
beamQualityFactor |
1.0 | |
opticalEfficiency |
0.99 | |
atmosphericVisibility_km |
23.0 | |
headRotatePerSecMax_deg |
0.0 | |
rotorFreq_1_Hz |
7294 | specific to "risley" deflector |
rotorFreq_2_Hz |
-4664 | specific to "risley" deflector |
Attribute | Default value | Comment |
---|---|---|
beamSampleQuality |
3 | |
binSize_ns |
0.25 | |
maxFullwaveRange_ns |
0 | |
winSize_ns |
pulseLength_ns /4 |
Attribute | Default value | Comment |
---|---|---|
x |
0 | |
y |
0 | |
z |
1 |
Attribute | Default value | Comment |
---|---|---|
x |
0 | x position relative to platform position |
y |
0 | y position relative to platform position |
z |
0 | z position relative to platform position |
rotations |
"global" | possible values: "global", "local" |
Attribute | Default value | Comment |
---|---|---|
angle_deg |
||
axis |
possible values: "x", "y" and "z" (upper or lower case spelling) |
Airplane model CC-BY Emmanuel Baranger
Bechtold, S. & Höfle, B. (2016): HELIOS: A Multi-purpose LiDAR Simulation Framework for Research, Planning and Training of Laser Scanning Operations With Airborne, Ground-based Mobile and Stationary Platforms. In: ISPRS Ann. Photogramm. Remote Sens. Spatial Inf. Sci., III-3, pp. 161-168. DOI: 10.5194/isprs-annals-III-3-161-2016.
Carlsson, T., Steinvall, O. & Letalick, D. (2001): Signature simulation and signal analysis for 3-D laser radar: scientific report. Linköping: Sensor Technology, Swedish Defence Research Agency (Sensorteknik, Totalförsvarets forskningsinstitut (FOI). Online access.
Höfle, B. & Pfeifer, N. (2007): Correction of laser scanning intensity data: Data and model-driven approaches. In: ISPRS Journal of Photogrammetry & Remote Sensing 62, pp. 415-433. DOI: 10.1016/j.isprsjprs.2007.05.008.
Ussyshkin, V., Boba, M. & Sitar, M. (2008): Performance Characterization of an Airborne Lidar System: Bridging System Specifications and Expected Performance. In: ISPRS Archives, XXXVII-B1, Beijing, pp. 177-182.