Notebook: Lukas Winiwarter, 2022
This demo scene showcases two highly detailed tree models scanned from two TLS scanning positions. We will use the command-line access of HELIOS++ to run the simulation, and use Python just for displaying the input XMLs and the resulting point clouds.
from pathlib import Path
from IPython.display import Code
from pyhelios.util.xmldisplayer import display_xml, find_playback_dir
import os
os.chdir("..")
Let us look at the XML files in the simulation. First, we investigate the survey XML file, tls_arbaro_demo.xml
:
Code(display_xml('./data/surveys/demo/tls_arbaro_demo.xml'), language='XML')
<document>
<!-- Default scanner settings: -->
<scannerSettings id="profile1" active="true" pulseFreq_hz="100000" scanFreq_hz="120" scanAngle_deg="100" headRotatePerSec_deg="10.0" />
<survey name="arbaro_demo_tls" scene="data/scenes/demo/arbaro_demo.xml#arbaro_demo" platform="data/platforms.xml#tripod" scanner="data/scanners_tls.xml#riegl_vz400">
<FWFSettings binSize_ns="0.2" beamSampleQuality="3" />
<leg>
<platformSettings x="1.0" y="25.5" onGround="true" />
<scannerSettings template="profile1" verticalAngleMin_deg="-40.0" verticalAngleMax_deg="60" headRotateStart_deg="100" headRotateStop_deg="225" trajectoryTimeInterval_s="1.0" />
</leg>
<leg>
<platformSettings x="-4.0" y="-2.5" onGround="true" />
<scannerSettings template="profile1" verticalAngleMin_deg="-40.0" verticalAngleMax_deg="60" headRotateStart_deg="-45" headRotateStop_deg="45" trajectoryTimeInterval_s="1.0" />
</leg>
</survey>
</document>
We can see that there are two leg
elements corresponding to the two scan positions (SPs) at (1.0, 25.5)
and (-4.0, -2.5)
, respectively. Both of them have individual horizontal fields of view (SP1 from 100
to 255
deg, SP2 from -45
to 45
deg).
For each SP, a pre-configured profile of scannerSettings
is used, which is defined as template
in the beginning of the document. Here, pulse frequency [Hz] (pulseFreq_hz
), scan frequency [Hz] (scanFreq_hz
) and rotational speed of the scanner head [°/s] (headRotatePerSec_deg
) are defined.
Note that instead of scan frequency and head rotation speed, we can also provide vertical and horizontal resolution in degrees (verticalResolution_deg
and horizontalResolution_deg
) as we do for real TLS. The following survey file shows an example of the same scan, once configured with scan frequency and head rotation speed, once with vertical and horizontal resolution.
Code(display_xml('data/surveys/demo/tls_arbaro_demo_angular_resolution.xml'), language='XML')
<document>
<!-- Default scanner settings: -->
<scannerSettings id="profile1" active="true" pulseFreq_hz="100000" scanAngle_deg="100" />
<survey name="arbaro_demo_tls" scene="data/scenes/demo/arbaro_demo.xml#arbaro_demo" platform="data/platforms.xml#tripod" scanner="data/scanners_tls.xml#riegl_vz400">
<FWFSettings binSize_ns="0.2" beamSampleQuality="3" />
<leg>
<platformSettings x="-4.0" y="-2.5" onGround="true" />
<scannerSettings template="profile1" verticalAngleMin_deg="-40.0" verticalAngleMax_deg="60" headRotateStart_deg="-45" headRotateStop_deg="45" trajectoryTimeInterval_s="1.0" verticalResolution_deg="0.2" horizontalResolution_deg="0.2" />
</leg>
<leg>
<platformSettings x="-4.0" y="-2.5" onGround="true" />
<scannerSettings template="profile1" verticalAngleMin_deg="-40.0" verticalAngleMax_deg="60" headRotateStart_deg="-45" headRotateStop_deg="45" trajectoryTimeInterval_s="1.0" scanFreq_hz="84.0" headRotatePerSec_deg="16.8" />
</leg>
</survey>
</document>
We see that the tripod
platform in data/platforms.xml
is referenced, so let's look at that next:
Code(display_xml('python/pyhelios/data/platforms.xml', 'tripod'))
<platform id="tripod" name="TLS Tripod" type="static" drag="0">
<scannerMount x="0" y="0" z="1.5">
</scannerMount>
</platform>
This is a very simple static
type platform. Note the scannerMount
parameter, indicating an elevation of 1.5
meters above the ground.
Now let's look at the scanner that is placed on this platform, the riegl_vz400
defined in data\scanners_tls.xml
(as shown in the survey XML):
Code(display_xml('python/pyhelios/data/scanners_tls.xml', 'riegl_vz400'))
<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="120" 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="0" />
</beamOrigin>
<headRotateAxis x="0" y="0" z="1" />
</scanner>
Here we see a lot of scanner-specific settings, including the minium range (rangeMin_m
), the maximum scan angle (scanAngleMax_deg
) that defines the polygonal mirror deflector, the resulting effective vertical field of view (scanAngleEffectiveMax_deg
), and more. Additionally, we see the beamOrigin
is set to 0.2
meters in z
. Adding this to the platform offset, we arrive at a height of 1.7 meters above ground for the laser beam origin.
Finally, let us take a look at the scene, arbaro_demo
in data/scenes/demo/arbaro_demo.xml
:
Code(display_xml('data/scenes/demo/arbaro_demo.xml', 'arbaro_demo'))
<scene id="arbaro_demo" name="Arbaro Demo">
<part id="0">
<filter type="objloader">
<param type="string" key="filepath" value="data/sceneparts/basic/groundplane/groundplane.obj" />
</filter>
<filter type="scale">
<param type="double" key="scale" value="100" />
</filter>
</part>
<part id="1">
<filter type="objloader">
<param type="string" key="filepath" value="data/sceneparts/arbaro/black_tupelo_low.obj" />
<param type="string" key="up" value="y" />
</filter>
<filter type="translate">
<param type="vec3" key="offset" value="0;15;0" />
</filter>
<filter type="scale">
<param type="double" key="scale" value="0.5" />
</filter>
</part>
<part id="2">
<filter type="objloader">
<param type="string" key="filepath" value="data/sceneparts/arbaro/sassafras_low.obj" />
<param type="string" key="up" value="y" />
</filter>
<filter type="translate">
<param type="vec3" key="offset" value="-10;15;0" />
</filter>
<filter type="scale">
<param type="double" key="scale" value="0.5" />
</filter>
</part>
</scene>
Here we see three objects (with id
s 0, 1, and 2). The first object is a basic plane (groundplane
) and acts as a baseplate for this simulation. We then add two different tree models (that were generated with the Arbaro Tree Generator) at the locations (0, 15, 0)
and (-10, 15, 0)
. We additionally scale the trees by a factor of 0.5
(and the groundplane by a factor of 100
to ensure it covers the entire scene).
Now, we are ready to run the simulation. In Jupyter Notebooks, we can run external commands with the !command
syntax, but you can also just run it from the command line.
!helios data/surveys/demo/tls_arbaro_demo.xml
HELIOS++ VERSION 2.0.0a3.dev10+g9e1844ae.d20240528 CWD: "E:\Software\_helios_versions\helios" seed: AUTO surveyPath: "data/surveys/demo/tls_arbaro_demo.xml" assetsPath: ["E:\Software\_helios_versions\helios", "E:\Software\_helios_versions\helios\python\pyhelios", "E:\Software\_helios_versions\helios\python\pyhelios\data", "assets/", ] outputPath: "output/" writeWaveform: 0 writePulse: 0 calcEchowidth: 0 fullWaveNoise: 0 splitByChannel: 0 parallelization: 1 njobs: 0 chunkSize: 32 warehouseFactor: 4 platformNoiseDisabled: 0 legNoiseDisabled: 0 rebuildScene: 0 writeScene: 1 lasOutput: 0 las10: 0 fixedIncidenceAngle: 0 gpsStartTime: kdtType: 4 kdtJobs: 0 kdtGeomJobs: 0 sahLossNodes: 32 xmlDocFilename: tls_arbaro_demo.xml xmlDocFilePath: E:\Software\_helios_versions\helios\data/surveys/demo xmlDocFilename: scanners_tls.xml xmlDocFilePath: E:\Software\_helios_versions\helios\python\pyhelios\data Using default value for attribute 'averagePower_w' : 4 Using default value for attribute 'beamQualityFactor' : 1 Using default value for attribute 'opticalEfficiency' : 0.99 Using default value for attribute 'receiverDiameter_m' : 0.15 Using default value for attribute 'atmosphericVisibility_km' : 23 Using default value for attribute 'wavelength_nm' : 1064 Scanner: riegl_vz400 Device[0]: riegl_vz400 Average Power: 4 W Beam Divergence: 0.3 mrad Wavelength: 1064 nm Visibility: 23 km Using default value for attribute 'maxNOR' : 0 Using default value for attribute 'rangeMax_m' : 1.79769e+308 Using default value for attribute 'binSize_ns' : 0.25 Using default value for attribute 'winSize_ns' : 1.25 Using default value for attribute 'maxFullwaveRange_ns' : 0 Using default value for attribute 'apertureDiameter_m' : 0.15 Number of subsampling rays (riegl_vz400): 19 Using default value for attribute 'receivedEnergyMin_W' : 0.0001 xmlDocFilename: platforms.xml xmlDocFilePath: E:\Software\_helios_versions\helios\python\pyhelios\data No platform type specified. Using static platform. Using default value for attribute 'winSize_ns' : 1.25 Using default value for attribute 'maxFullwaveRange_ns' : 0 Using default value for attribute 'apertureDiameter_m' : 0.15 Number of subsampling rays (riegl_vz400): 19 Using default value for attribute 'numRuns' : 1 Using default value for attribute 'simSpeed' : 1 Using default value for attribute 'stripId' : NULL_STRIP_ID Using platform default value for attribute 'z' : 0 Using platform default value for attribute 'stopAndTurn' : 1 Using platform default value for attribute 'smoothTurn' : 0 Using platform default value for attribute 'slowdownEnabled' : 1 Using platform default value for attribute 'movePerSec_m' : 70 Using scanner default value for attribute 'beamDivergence_rad' : 0.003 Using scanner default value for attribute 'trajectoryTimeInterval_s' : 0 Using default value for attribute 'name' : Unnamed scannerSettings asset Using scanner default value for attribute 'active' : 1 Using scanner default value for attribute 'pulseFreq_hz' : 100000 Using scanner default value for attribute 'scanFreq_hz' : 120 Using scanner default value for attribute 'beamDivergence_rad' : 0.003 Using default value for attribute 'stripId' : NULL_STRIP_ID Using platform default value for attribute 'z' : 0 Using platform default value for attribute 'stopAndTurn' : 1 Using platform default value for attribute 'smoothTurn' : 0 Using platform default value for attribute 'slowdownEnabled' : 1 Using platform default value for attribute 'movePerSec_m' : 70 Using scanner default value for attribute 'active' : 1 Using scanner default value for attribute 'pulseFreq_hz' : 100000 Using scanner default value for attribute 'scanFreq_hz' : 120 Using scanner default value for attribute 'beamDivergence_rad' : 0.003 Loading Scene... Reading serial scene wrapper object from E:\Software\_helios_versions\helios\data/scenes/demo/arbaro_demo.scene ... Building KD-Grove... KDTree (num. primitives 226860) : Max. # primitives in leaf: 77 Min. # primitives in leaf: 1 Max. depth reached: 38 KDTree axis-aligned surface area: 91156.3 Interior nodes: 421922 Leaf nodes: 350744 Total tree cost: 6.16345 KDGrove stats: Number of trees: 1 Number of static trees: 1 Number of dynamic trees: 0 Statistics (min, max, total, mean, stdev): Building time: (0.5320, 0.5320, 0.5320, 0.5320, 0.0000) Tree primitives: (226860, 226860, 226860, 226860.0000, 0.0000) Max primitives in leaf: (77, 77, 77, 77.0000, 0.0000) Min primitives in leaf: (1, 1, 1, 1.0000, 0.0000) Maximum depth: (38, 38, 38, 38.0000, 0.0000) Axis-aligned surface area: (91156.3160, 91156.3160, 91156.3160, 91156.3160, 0.0000) Number of interior nodes: (421922, 421922, 421922, 421922.0000, 0.0000) Number of leaf nodes: (350744, 350744, 350744, 350744.0000, 0.0000) Tree cost: (6.1634, 6.1634, 6.1634, 6.1634, 0.0000) KDG built in 0.533s Scene loaded in 1.351s Reading Spectral Library... Using default value for attribute 'seed' : AUTO Output directory: "output/\arbaro_demo_tls\2024-05-28_18-32-40\" Simulation: Scanner changed! Starting leg 0 Pulse frequency set to 100000 Scan angle set to 100 Applying settings for PolygonMirrorBeamDeflector... Vertical angle min/max -0.698132/1.0472 Leg0 waypoints: Origin: (1, 25.5, -6.9727) Target: (-4, -2.5, -6.9727) Next: (-4, -2.5, -6.9727) Running simulation... Starting simulation loop 1 ... Clearing point cloud: "output/\arbaro_demo_tls\2024-05-28_18-32-40\leg000_points.xyz" Survey 0.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 1.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 1.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 2.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 1.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 3.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 2.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 4.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 2.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 5.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 3.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 6.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 3.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 7.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 4.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 8.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 4.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 9.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 5.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 10.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 5.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 11.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 6.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 12.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 6.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 13.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 7.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 14.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 7.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 15.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 8.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 16.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 8.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 17.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 9.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 18.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 9.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 19.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 10.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 20.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 10.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 21.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 11.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 22.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 11.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 23.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 12.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 24.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 12.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 25.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 13.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 26.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 13.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 27.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 14.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 28.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 14.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 29.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 15.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 30.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 15.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 31.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 16.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 32.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 16.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 33.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 17.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 34.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 17.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 35.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 18.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 36.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 18.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 37.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 19.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 38.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 19.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 39.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 20.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 40.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 20.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 41.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 21.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 42.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 21.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 43.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 22.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 44.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 22.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 45.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 23.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 46.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 23.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 47.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 24.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 48.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 24.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 49.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 25.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 50.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 25.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 51.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 26.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 52.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 26.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 53.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 27.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 54.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 27.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 55.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 28.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 56.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 28.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 57.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 29.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 58.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 29.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 59.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 30.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 60.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 30.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 61.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 31.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 62.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 31.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 63.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 32.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 64.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 32.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 65.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 33.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 66.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 33.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 67.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 34.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 68.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 34.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 69.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 35.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 70.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 35.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 71.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 36.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 72.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 36.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 73.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 37.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 74.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 37.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 75.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 38.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 76.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 38.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 77.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 39.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 78.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 39.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 79.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 40.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 80.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 40.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 81.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 41.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 82.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 41.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 83.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 42.00% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 84.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 42.50% Elapsed 00 00:00:00 Remaining 00 00:00:01 Leg1/2 85.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 43.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 86.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 43.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 87.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 44.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 88.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 44.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 89.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 45.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 90.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 45.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 91.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 46.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 92.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 46.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 93.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 47.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 94.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 47.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 95.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 48.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 96.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 48.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 97.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 49.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 98.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 49.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 99.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Survey 50.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg1/2 100.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Starting leg 1 Pulse frequency set to 100000 Scan angle set to 100 Applying settings for PolygonMirrorBeamDeflector... Vertical angle min/max -0.698132/1.0472 Clearing point cloud: "output/\arbaro_demo_tls\2024-05-28_18-32-40\leg001_points.xyz" Survey 50.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg2/2 1.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 51.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg2/2 2.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 51.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg2/2 3.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 52.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg2/2 4.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 52.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg2/2 5.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 53.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg2/2 6.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 53.50% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg2/2 7.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 54.00% Elapsed 00 00:00:01 Remaining 00 00:00:01 Leg2/2 8.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 54.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 9.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 55.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 10.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 55.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 11.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 56.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 12.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 56.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 13.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 57.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 14.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 57.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 15.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 58.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 16.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 58.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 17.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 59.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 18.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 59.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 19.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 60.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 20.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 60.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 21.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 61.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 22.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 61.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 23.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 62.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 24.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 62.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 25.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 63.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 26.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 63.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 27.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 64.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 28.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 64.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 29.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 65.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 30.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 65.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 31.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 66.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 32.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 66.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 33.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 67.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 34.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 67.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 35.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 68.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 36.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 68.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 37.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 69.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 38.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 69.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 39.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 70.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 40.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 70.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 41.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 71.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 42.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 71.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 43.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 72.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 44.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 72.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 45.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 73.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 46.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 73.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 47.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 74.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 48.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 74.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 49.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 75.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 50.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 75.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 51.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 76.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 52.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 76.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 53.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 77.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 54.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 77.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 55.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 78.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 56.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 78.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 57.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 79.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 58.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 79.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 59.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 80.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 60.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 80.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 61.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 81.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 62.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 81.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 63.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 82.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 64.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 82.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 65.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 83.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 66.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 83.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 67.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 84.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 68.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 84.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 69.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 85.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 70.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 85.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 71.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 86.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 72.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 86.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 73.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 87.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 74.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 87.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 75.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 88.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 76.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 88.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 77.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 89.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 78.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 89.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 79.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 90.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 80.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 90.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 81.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 91.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 82.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 91.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 83.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 92.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 84.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 92.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 85.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 93.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 86.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 93.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 87.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 94.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 88.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 94.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 89.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 95.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 90.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 95.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 91.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 96.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 92.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 96.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 93.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 97.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 94.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 97.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 95.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 98.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 96.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 98.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 97.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 99.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 98.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 99.50% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 99.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Survey 100.00% Elapsed 00 00:00:01 Remaining 00 00:00:00 Leg2/2 100.00% Elapsed 00 00:00:00 Remaining 00 00:00:00 Finishing simulation loop 1 ... Finished simulation loop 1. Elapsed simulation steps = 2150003 Elapsed virtual time = 21.5 sec. Main thread simulation loop finished in 1.89258 sec. Waiting for completion of pulse computation tasks... Pulse computation tasks finished in 1.89276 sec. Total simulation time: 0:00:2
Now let's find the output files and display a (2D) plot. For a 3D impression, we suggest using external software such as CloudCompare.
import numpy as np
import matplotlib.pyplot as plt
output_path = find_playback_dir(r"data/surveys/demo/tls_arbaro_demo.xml")
print("Loading points from", Path(output_path))
SP1 = np.loadtxt(Path(output_path) / 'leg000_points.xyz')
SP2 = np.loadtxt(Path(output_path) / 'leg001_points.xyz')
# discard points outside of [-20, -20] to [20, 20] (x, y)
SP1 = SP1[(SP1[:, 0] > -20) & (SP1[:, 1] > -20) & (SP1[:, 0] < 20) & (SP1[:, 1] < 20), :]
SP2 = SP2[(SP2[:, 0] > -20) & (SP2[:, 1] > -20) & (SP2[:, 0] < 20) & (SP2[:, 1] < 20), :]
fig, ax = plt.subplots(figsize=(15, 10))
ax.scatter(SP1[:, 0], SP1[:, 2], s=0.1, label="Points from SP1") # select X and Z coordinates
ax.scatter(SP2[:, 0], SP2[:, 2], s=0.1, label="Points from SP2")
plt.axis('equal')
ax.tick_params(labelsize=16)
plt.xlabel('X', fontsize=18)
plt.ylabel('Z', fontsize=18, rotation=0)
plt.legend(fontsize=18, markerscale=20)
plt.show()
Loading points from E:\Software\_helios_versions\helios\output\arbaro_demo_tls\2024-05-28_18-32-40