{ "cells": [ { "cell_type": "markdown", "id": "d34a9654", "metadata": {}, "source": [ "# Arbaro demo scene\n", "\n", "Notebook: Lukas Winiwarter, 2022\n", "\n", "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." ] }, { "cell_type": "code", "execution_count": 1, "id": "796cf736", "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "from IPython.display import Code\n", "\n", "from pyhelios.util.xmldisplayer import display_xml, find_playback_dir" ] }, { "cell_type": "code", "execution_count": 2, "id": "d085af4c", "metadata": {}, "outputs": [], "source": [ "import os\n", "os.chdir(\"..\")" ] }, { "cell_type": "markdown", "id": "14eb3773", "metadata": {}, "source": [ "## Survey\n", "Let us look at the XML files in the simulation. First, we investigate the **survey** XML file, `tls_arbaro_demo.xml`:" ] }, { "cell_type": "code", "execution_count": 3, "id": "0115b1c5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<document>\n",
"\t<!-- Default scanner settings: -->\n",
" <scannerSettings id="profile1" active="true" pulseFreq_hz="100000" scanFreq_hz="120" scanAngle_deg="100" headRotatePerSec_deg="10.0" />\n",
" <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">\n",
" <FWFSettings binSize_ns="0.2" beamSampleQuality="3" />\n",
" <leg>\n",
" <platformSettings x="1.0" y="25.5" onGround="true" />\n",
" <scannerSettings template="profile1" verticalAngleMin_deg="-40.0" verticalAngleMax_deg="60" headRotateStart_deg="100" headRotateStop_deg="225" trajectoryTimeInterval_s="1.0" />\n",
" </leg>\n",
" <leg>\n",
" <platformSettings x="-4.0" y="-2.5" onGround="true" />\n",
" <scannerSettings template="profile1" verticalAngleMin_deg="-40.0" verticalAngleMax_deg="60" headRotateStart_deg="-45" headRotateStop_deg="45" trajectoryTimeInterval_s="1.0" />\n",
" </leg>\n",
" </survey>\n",
"</document>\n",
"
<document>\n",
"\t<!-- Default scanner settings: -->\n",
" <scannerSettings id="profile1" active="true" pulseFreq_hz="100000" scanAngle_deg="100" />\n",
" <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">\n",
" <FWFSettings binSize_ns="0.2" beamSampleQuality="3" />\n",
" <leg>\n",
" <platformSettings x="-4.0" y="-2.5" onGround="true" />\n",
" <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" />\n",
" </leg>\n",
" <leg>\n",
" <platformSettings x="-4.0" y="-2.5" onGround="true" />\n",
" <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" />\n",
" </leg>\n",
" </survey>\n",
"</document>\n",
"
<platform id="tripod" name="TLS Tripod" type="static" drag="0">\n",
"\t\t<scannerMount x="0" y="0" z="1.5">\n",
"\t\t</scannerMount>\n",
"\t</platform>\n",
"\t\n",
"
<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">\n",
"\t\t\n",
"\t\t<FWFSettings beamSampleQuality="3" />\t\n",
"\t\t<beamOrigin x="0" y="0" z="0.2">\n",
"\t\t\t<rot axis="y" angle_deg="0" />\n",
"\t\t\t<rot axis="z" angle_deg="0" />\n",
"\t\t\t<rot axis="x" angle_deg="0" />\n",
"\t\t</beamOrigin>\n",
"\t\t<headRotateAxis x="0" y="0" z="1" />\n",
"\t\t\n",
"\t</scanner>\n",
"\t\n",
"
<scene id="arbaro_demo" name="Arbaro Demo">\n",
" <part id="0">\n",
" <filter type="objloader">\n",
" <param type="string" key="filepath" value="data/sceneparts/basic/groundplane/groundplane.obj" />\n",
" </filter>\n",
" <filter type="scale">\n",
" <param type="double" key="scale" value="100" />\n",
" </filter>\n",
" </part>\n",
" <part id="1">\n",
" <filter type="objloader">\n",
" <param type="string" key="filepath" value="data/sceneparts/arbaro/black_tupelo_low.obj" />\n",
" <param type="string" key="up" value="y" />\n",
" </filter>\n",
" <filter type="translate">\n",
" <param type="vec3" key="offset" value="0;15;0" />\n",
" </filter>\n",
" <filter type="scale">\n",
" <param type="double" key="scale" value="0.5" />\n",
" </filter>\n",
" </part>\n",
" <part id="2">\n",
" <filter type="objloader">\n",
" <param type="string" key="filepath" value="data/sceneparts/arbaro/sassafras_low.obj" />\n",
" <param type="string" key="up" value="y" />\n",
" </filter>\n",
" <filter type="translate">\n",
" <param type="vec3" key="offset" value="-10;15;0" />\n",
" </filter>\n",
" <filter type="scale">\n",
" <param type="double" key="scale" value="0.5" />\n",
" </filter>\n",
" </part>\n",
" </scene>\n",
"