{ "cells": [ { "cell_type": "markdown", "id": "61f605d4", "metadata": {}, "source": [ "# ALS HD demo scene\n", "\n", "Notebook creator: Sina Zumstein & Hannah Weiser, 2022\n", "\n", "This demo scene uses a digital terrain model (DTM) of Heidelberg, Germany, which will be scanned by airborne laser scanning (ALS). 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." ] }, { "cell_type": "code", "execution_count": 1, "id": "939377d9", "metadata": {}, "outputs": [], "source": [ "import sys, os\n", "from pathlib import Path\n", "from IPython.display import Code\n", "\n", "current_folder = globals()[\"_dh\"][0]\n", "helios_path = str(Path(current_folder).parent)\n", "sys.path.append(helios_path) # add helios-plusplus directory to PATH\n", "import pyhelios\n", "\n", "from pyhelios.util.xmldisplayer import display_xml, find_playback_dir" ] }, { "cell_type": "markdown", "id": "5ded9df1", "metadata": {}, "source": [ "## Survey\n", "Let us look at the XML files in the simulation. First, we investigate the **survey** XML file, `als_hd_demo_tiff.xml`:" ] }, { "cell_type": "code", "execution_count": 2, "id": "a6a98cdc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<document>\n",
"\t<!-- default scanner settings -->\n",
"\t<scannerSettings id="set" active="true" pulseFreq_hz="70000" scanAngle_deg="60" scanFreq_hz="50" />\n",
" <survey name="als_hd_demo" scene="data/scenes/demo/hd_demo.xml#hd_demo" platform="data/platforms.xml#sr22" scanner="data/scanners_als.xml#leica_als50-ii">\n",
"\t<!-- platform: Plane, deflector: oscillating -->\n",
" <FWFSettings beamSampleQuality="3" binSize_ns="0.25" winSize_ns="1" />\n",
" <detectorSettings rangeMax_m="1700" />\n",
"\n",
"\t\t<leg>\n",
"\t\t\t<platformSettings x="474500" y="5474500" z="1500.000" onGround="false" movePerSec_m="150" />\n",
"\t\t\t<scannerSettings template="set" trajectoryTimeInterval_s="0.05" />\n",
"\t\t</leg>\n",
"\t\t\n",
"\t\t<leg>\n",
"\t\t\t<platformSettings x="490000" y="5474500" z="1500.000" onGround="false" movePerSec_m="150" />\n",
"\t\t\t<scannerSettings template="set" trajectoryTimeInterval_s="0.05" />\n",
"\t\t</leg>\n",
"\n",
"\t\t<leg>\n",
"\t\t\t<platformSettings x="474500" y="5473500" z="1500.000" onGround="false" movePerSec_m="150" />\n",
"\t\t\t<scannerSettings template="set" trajectoryTimeInterval_s="0.05" />\n",
"\t\t</leg>\n",
"\t\t\n",
"\t\t<leg>\n",
"\t\t\t<platformSettings x="490000" y="5473500" z="1500.000" onGround="false" movePerSec_m="150" />\n",
"\t\t\t<scannerSettings active="false" />\n",
"\t\t</leg>\n",
"\n",
" </survey>\n",
"</document>\n",
"
<platform id="sr22" name="Cirrus SR-22" type="linearpath">\n",
"\t\t<scannerMount z="0.7">\n",
"\t\t\t<rot axis="x" angle_deg="-90" />\n",
"\t\t\t<rot axis="z" angle_deg="90" />\n",
"\t\t</scannerMount>\n",
"\t\t<!--<positionXNoise\n",
"\t\t\tclipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="5"\n",
"\t\t\ttype="NORMAL" mean="0.0" stdev="0.02"/>\n",
"\t\t<positionYNoise\n",
"\t\t\tclipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="7"\n",
"\t\t\ttype="NORMAL" mean="0.0" stdev="0.02"/>\n",
"\t\t<positionZNoise\n",
"\t\t\tclipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="1"\n",
"\t\t\ttype="NORMAL" mean="0.0" stdev="0.02"/>\n",
"\t\t<attitudeXNoise\n",
"\t\t\tclipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="1"\n",
"\t\t\ttype="NORMAL" mean="0.0" stdev="0.001"/>\n",
"\t\t<attitudeYNoise\n",
"\t\t\tclipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="3"\n",
"\t\t\ttype="NORMAL" mean="0.0" stdev="0.001"/>\n",
"\t\t<attitudeZNoise\n",
"\t\t\tclipMin="0.0" clipMax="0.0" clipEnabled="false" fixedLifespan="11"\n",
"\t\t\ttype="NORMAL" mean="0.0" stdev="0.001"/>-->\n",
"\t</platform>\n",
"\t\n",
"
<scanner id="leica_als50-ii" accuracy_m="0.05" beamDivergence_rad="0.00022" name="Leica ALS50-II" optics="oscillating" pulseFreqs_Hz="20000,60000,150000" pulseLength_ns="10" rangeMin_m="200" scanAngleMax_deg="37.5" scanFreqMin_Hz="0" scanFreqMax_Hz="90" maxNOR="4" />\n",
"\t\n",
"
<scene id="hd_demo" name="Heidelberg">\n",
" <part>\n",
" <filter type="geotiffloader">\n",
" <param type="string" key="filepath" value="data/sceneparts/tiff/dem_hd.tif" />\n",
" </filter>\n",
" </part>\n",
" </scene>\n",
"