-
Notifications
You must be signed in to change notification settings - Fork 44
Change log
han16nah edited this page Dec 1, 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. All changes in HELIOS++
versions > 1.0.0 are documented under releases.
- 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> / <scannerSettings>
|
defaultScannerSettings in <survey> -tag |
template in <scannerSettings> of <leg>
|
Global settings can be defined in the beginning and can then be called by their ID in the <scannerSettings> of each leg |
<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 headRotateStart_deg="128.91550582542592" headRotateStop_deg="223.45354343073828" />
</leg>
<leg>
<platformSettings x="1.8566228596501162" y="25.587345982284987" z="-1.1102230246251565E-16" onGround="true" />
<scannerSettings headRotateStart_deg="128.91550582542592" headRotateStop_deg="223.45354343073828" />
</leg>
</survey>
</document>
HELIOS++:
<?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 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 template="profile1" headRotateStart_deg="128.91550582542592" headRotateStop_deg="223.45354343073828" />
</leg>
<leg>
<platformSettings x="1.8566228596501162" y="25.587345982284987" z="-1.1102230246251565E-16" onGround="true" />
<scannerSettings template="profile1" 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>