-
Notifications
You must be signed in to change notification settings - Fork 44
Change log
Lukas Winiwarter edited this page Jan 20, 2021
·
6 revisions
HELIOS++
version 1.0 is the major release of the Heidelberg LiDAR Operations Simulator in C++ with Python Bindings, ported from the original Java implementation. The original implementation is still available here.
A guide to update existent surveys (XML files) for simulations in HELIOS++
is given at the bottom of this page.
New features and improvements are listed below, detailed explanations on all functionalities can be found in the Wiki documentation.
List of fixed bugs is without claim to completeness. Use of HELIOS++
is recommended for all future simulations. The Java implementation is considered deprecated.
- Simulation of errors / random noise
- Support of voxel format as scene input with detailedVoxels for advanced vegetation simulation
- Extensions dynamic platform functionality, especially UAV with smoothTurn and stopAndTurn options
- pyHELIOS:
HELIOS++
Python bindings
- Performance:
HELIOS++
is around 3x faster than the previous implementation - New output formats:
HELIOS++
can output point clouds in LAS format and compressed output (zip) - More control over output information:
- Trajectory files of non-static surveys can be written
- Full waveform output is now optional
- Seed for random numbers can be fixed
- Improved parametrization of the fullwave detector (
binSize
instead ofnumTimeBins
andnumFullwaveBin
) - Extensive logging with different levels
- Fully revised and extended documentation in this wiki
- Revision of airborne platforms (especially UAV)
- Revision of peak detection in full waveform simulation
- Revision of combinations between scanner and platform settings
Tag | HELIOS (Java) | HELIOS++ | Comment |
---|---|---|---|
<survey [...]> |
defaultScannerSettings |
- | deprecated |
<FWFSettings [...]> |
numFullWaveBins |
binSize_ns and maxFullwaveRange_ns
|
replaced, see Full Waveform Simulation |
<scannerSettings> |
- | trajectoryTimeInterval_s |
new |
<platformSettings> (multicopter only) |
- |
stopAndTurn and smoothTurn mode, yawAtDeparture
|
new, see dynamic platforms |
Tag | HELIOS (Java) | HELIOS++ | Comment |
---|---|---|---|
<scene> |
<sunDir> , <skybox>
|
- | deprecated |
<param> in objloader |
castShadows , receiveShadows , recomputeVertexNormals
|
- | deprecated |
Rotation filter |
pitch , roll , yaw
|
x , y , z
|
naming of axes replaced, see Scene#Coordinate transformations, REQUIRED |
<param> in xyzloader |
- |
estimateNormals , snapNeighborNormal , matfile , matname , RGB and Normals index specifiers |
new, see XYZ Point Cloud Loader |
<filter [...]> |
- | detailedVoxels |
new voxel geometry loader with different modes, see detailedVoxels |
param of all loaders (objloader, xyzloader, detailedVoxels, geotiffloader) | - | efilepath |
new option for loading multiple geometry files with the same configurations, see Loaders |
Rotation filter | - |
rotations="global" (default) or rotations="local"
|
new modes of rotation, see Scene#Coordinate transformations |
Tag | HELIOS (Java) | HELIOS++ | Comment |
---|---|---|---|
<scannerMount> |
pitch , roll , yaw
|
x , y , z
|
naming of rotation axes replaced, see Platforms#Rotations, REQUIRED |
<scannerMount> |
- |
rotations="global" (default) or rotations="local"
|
new modes of rotation, see Platforms#Rotations |
<platform [...]> (multicopter only) |
- |
engine_max_force , speedup_magnitude , slowdown_distance , base_pitch_deg , roll_speed_deg , pitch_speed_deg , yaw_speed_deg , roll_offset_deg , pitch_offset_deg
|
new, see dynamic platforms |
<platform> |
- | position and attitude noise tags, e.g. <positionXNoise [...]>
|
new, see platform noise |
Tag | HELIOS (Java) | HELIOS++ | Comment |
---|---|---|---|
<scanner> |
- | <FWFSettings [...]> |
new, possible parameters listed at Fullwave |
<beamOrigin> |
pitch , roll , yaw
|
x , y , z
|
naming of rotation axes replaced, see Platforms#Rotations, REQUIRED |
<beamOrigin> |
- |
rotations="global" (default) or rotations="local"
|
new modes of rotation, see Platforms#Rotations |
Java:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<!-- Default scanner settings: -->
<scannerSettings id="profile1" active="true" pulseFreq_hz="100000" scanAngle_deg="50.0" scanFreq_hz="120" headRotatePerSec_deg="10.0" headRotateStart_deg="0.0" headRotateStop_deg="0.0" />
<survey defaultScannerSettings="profile1" name="Arbaro Demo" scene="data/scenes/demo/arbaro_demo.xml#arbaro_demo" platform="data/platforms.xml#tripod" scanner="data/scanners_tls.xml#riegl_vz400">
<FWFSettings numFullwaveBins="200" />
<leg>
<platformSettings x="0.8566228596501162" y="25.587345982284987" z="-1.1102230246251565E-16" onGround="true" />
<scannerSettings active="true" pulseFreq_hz="100000" scanAngle_deg="50.0" scanFreq_hz="120" headRotatePerSec_deg="10.0" headRotateStart_deg="128.91550582542592" headRotateStop_deg="223.45354343073828" />
</leg>
<leg>
<platformSettings x="1.8566228596501162" y="25.587345982284987" z="-1.1102230246251565E-16" onGround="true" />
<scannerSettings active="true" pulseFreq_hz="100000" scanAngle_deg="50.0" scanFreq_hz="120" headRotatePerSec_deg="10.0" headRotateStart_deg="128.91550582542592" headRotateStop_deg="223.45354343073828" />
</leg>
</survey>
</document>
HELIOS++:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<survey name="Arbaro Demo" 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.25"/>
<leg>
<platformSettings x="0.8566228596501162" y="25.587345982284987" z="-1.1102230246251565E-16" onGround="true" />
<scannerSettings active="true" pulseFreq_hz="100000" scanAngle_deg="50.0" scanFreq_hz="120" headRotatePerSec_deg="10.0" headRotateStart_deg="128.91550582542592" headRotateStop_deg="223.45354343073828" />
</leg>
<leg>
<platformSettings x="1.8566228596501162" y="25.587345982284987" z="-1.1102230246251565E-16" onGround="true" />
<scannerSettings active="true" pulseFreq_hz="100000" scanAngle_deg="50.0" scanFreq_hz="120" headRotatePerSec_deg="10.0" headRotateStart_deg="128.91550582542592" headRotateStop_deg="223.45354343073828" />
</leg>
</survey>
</document>
Java:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<scene id="arbaro_demo" name="Arbaro Demo">
<sunDir x="0" y="1" z="-1" />
<skybox azimuth_deg="275" texturesFolder="textures/sky/sky6_1024" />
<part>
<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>
<filter type="objloader">
<param type="string" key="filepath" value="data/sceneparts/arbaro/black_tupelo_low.obj" />
<param type="boolean" key="castShadows" value="true" />
<param type="boolean" key="receiveShadows" value="true" />
<param type="boolean" key="recomputeVertexNormals" value="true" />
</filter>
<filter type="rotate">
<param type="rotation" key="rotation">
<rot axis="pitch" angle_deg="90" />
</param>
</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>
<filter type="objloader">
<param type="string" key="filepath" value="data/sceneparts/arbaro/sassafras_low.obj" />
<param type="boolean" key="castShadows" value="true" />
<param type="boolean" key="receiveShadows" value="true" />
<param type="boolean" key="recomputeVertexNormals" value="true" />
</filter>
<filter type="rotate">
<param type="rotation" key="rotation">
<rot axis="pitch" angle_deg="90" />
</param>
</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>
</document>
HELIOS++:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<scene id="arbaro_demo" name="Arbaro Demo">
<part>
<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>
<filter type="objloader">
<param type="string" key="filepath" value="data/sceneparts/arbaro/black_tupelo_low.obj" />
</filter>
<filter type="rotate">
<param type="rotation" key="rotation">
<rot axis="x" angle_deg="90" />
</param>
</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>
<filter type="objloader">
<param type="string" key="filepath" value="data/sceneparts/arbaro/sassafras_low.obj" />
</filter>
<filter type="rotate">
<param type="rotation" key="rotation">
<rot axis="x" angle_deg="90" />
</param>
</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>
</document>