Skip to content
han16nah edited this page Dec 29, 2021 · 4 revisions

Output formats

helios++ supports multiple output formats for point clouds, trajectory data and fullwave data.

The output point clouds and (optionally) the full waveform and the trajectory files are stored in
[cwd]/output/Survey Playback/[name of survey as defined in survey.xml]/[time stamp of simulation start]/points/[number of scan position].[xyz|las]

e.g. helios-plusplus/output/Survey Playback/TLS Arbaro/2016-09-28_15-17-52/points/leg000_points.xyz

ASCII point format

By default, the point clouds of each leg are written to separate ASCII XYZ files (.xyz) in the format:

X Y Z intensity echoWidth returnNumber numberOfReturns fullwaveIndex hitObjectId class gpsTime

The echo width is only computed if the command line attribute --calcEchowidth is set, otherwise it will be set to 0.000 for all points.

returnNumber corresponds to the number of the current hit in a single pulse and numberOfReturns to the total number of hits in the pulse. In complex scenes, it may be highly influenced by the quality of the fullwave simulation - especially when using the diffuse voxel model.

fullwaveIndex is an index that corresponds to the line index in the fullwave.txt output file, if such a file was generated. It is the same as a pulse ID, so echos from the same pulse have the same fullwaveIndex. Use it to look up the exact waveform of specific points in the simulated point cloud. For example, consider the following highlighted lines (entry 107 starts a line earlier on the right side, and only the fullwave data is highlighted. See section ASCII FWF for details.):

image

Here, the pulse with fullwaveIndex=107 created two returns, and the waveform also shows two seperate peaks (with a number of 0.000 in between). The previous and next pulses only show one return.

The hitObjectId is the ID of the respective object in the scene. The IDs are starting with ´0´ and corresponding to the order of objects as stored in the scene except for scene parts to which custom IDs were assigned in the scene XML. The IDs are unique for every <part> tag in the scene XML file. When using the efilepath parameter, the geometry from each file will receive a unique incremental ID unless a custom ID was supplied. In this case, the geomtries all receive the same ID (see section geometry loaders).

The class is taken from the primitive material, which is specified through the helios_classification field in a material MTL file (see page Scene).

Finally, gpsTime relates the point to the trajectory, if it is exported. It represents the timestamp at which the pulse is sent out in seconds after the beginning of the GPS week (which starts on Sunday, 0:00 A.M.) + 300,000. The simulation start date is taken from the system clock and thereafter continued using the simulation time (i.e. rotation/flight speeds from the XML files) rather than real time.

LAS point format

With the parameter --lasOutput, point clouds can be written to ASPRS LAS 1.4 format (Point Data Record Format 6; .las) instead of ASCII. echo_width, fullwaveIndex and hitObjectId are stored as extra bytes, the other fields in the respective fields of the LAS Format.

The coordinates of the point cloud are shifted to the lower-left corner of the bounding box of the scene, and a scale is applied. By default, the scale is 0.0001 (corresponding to 1/10 mm resolution), but can be changed by using the --lasScale argument on the command line.

ASCII trajectory format

If a trajectoryTimeInterval_s attribute is defined in the survey XML file within the scannerSettings tag, the trajectory will be written in the format

X Y Z gpsTime roll pitch yaw

gpsTime is given in seconds after the beginning of GPS week + 300,000 and corresponds to the gpsTime in the point cloud output. The angles around the aircraft principal axes are provided in degrees, the position and attitude is related to the origin and axes of the platform in the global reference frame, and does not necessarily show the position and orientation of the scanner. This position/orientation may be changed in the survey or platform XML by supplying lever arm and misalignment as mounting parameters (see Platforms)

ASCII FWF format

Full waveform (FWF) output can be activated using the option --writeWaveform. The output will be one file per leg. Every line corresponds to one outgoing pulse. Only pulses that returned an echo are recorded. The link to the point output is established via the fullwaveIndex. The FWF output format is:

fullwaveIndex beamOrigin.x beamOrigin.y beamOrigin.z beamDir.x beamDir.y beamDir.z minTime maxTime gpsTime FWFIntensities

Here, the beamOrigin is in the global coordinate system, and represents (in contrast to the position given in the trajectory) the position of the laser scanner reference center (i.e. the beam origin). The beamDir is a unit vector showing the axis of the beam cone.

minTime and maxTime are times after beam transmission in nanoseconds for the first and last record in the FWFIntensities vector, respectively.

gpsTime is the same as for the point cloud and trajectory files, and is added for completeness.

The FWFIntensities is a vector of (sampled) amplitudes. For details on the simulation, see fullwave. Every value represents a bin of size binSize_ns (set in the survey XML <FWFSettings [...]/> tag) in nanoseconds. These bins are summed up amplitude values from the individual subrays.

For example, the waveform from the highlighted example above (fullwaveIndex=107) looks like this:

image

Compressing

The output files can be compressed using the parameter --zipOutput. This generates bin compressed ASCII files for both the point clouds and the waveform information. If used in combination with --lasOutput, the point clouds will be exported in LAZ format. Trajectory information is not compressed.

HELIOS++ outputs can be unzipped with the --unzip parameter:

helios --unzip [input_path] [output_path]

For example:

helios --unzip my_pointcloud.bin my_pointcloud.xyz

Unzipping also works for HELIOS++-created LAZ files.

Logging

By default, logging will be output to the console and only information and errors are displayed. However, there is also the option to output a log file:

  • --logFile: Logging will be output to a file "helios.log" in the current directory, not only to standard output.
  • --logFileOnly: Logging will be output ONLY to a file.

The content to be reported can be controlled by the following parameters when calling a survey:

  • --silent: Disable logging output.
  • -q or quiet: Only errors are reported.
  • -vt: Errors and time are reported.
  • -v: Errors, information and warnings are reported.
  • -v2: All messages are reported.

By default, only information and errors are reported.