关键词:地基激光雷达
点云模拟
XML文件
做者:李二 日期:07/05/2020 - 08/05/2020html
我目前仅仅使用了TLS模式进行模拟,因此先讲一下TLS的模拟经验。 ALS和MLS的模拟,之后确定也会作一下
在正式模拟本身的数据以前,必定要明确好本身的模拟数据需求,毕竟一次TLS的模拟耗时挺长的(在尽量贴近野外测量参数设置条件下)。java
好比我这里要作森林样方的TLS点云模拟,目的是评估不一样的布站模式 scan design
的数据获取质量以及对树木参数计算的影响,所以需求尽量逼近野外TLS测量时的扫描器参数设置、森林样方树木状况。node
针对森林样方场景:根据一些现有的实测森林样方树木位置、胸径、树高等信息,经过某些树木三维模型构建软件(例如
OnyxTree
)来创建树木OBJ
模型文件。ios
为求逼近野外样方,可制做多个不一样大小和树种的树木模型。 一种稍微讨巧的方法是,对一棵树进行缩放变换(在输入文件中设置),以获得不一样胸径树高的模型。
针对扫描器参数:根据所需
scanner
系统,在HELIOS的库中选择(好比下面的例子)或者自定义扫描器(参照所想模拟的扫描器的配置specification
便可),这些通常不用关心。须要重点关心的是一些具体的扫描参数设置configuration
:git
TLS的位置 天顶扫描范围 zenith
和方位扫描范围azimuth
扫描角度分辨率或者角度步长 angular resolution
令HELIOS模拟,则必须告诉其用户定义的场景是什么样的,激光扫描器是什么样的,搭载在什么平台上,在哪里扫描以及扫描范围与分辨率等。github
HELIOS是经过XML文件
的形式进行输入数据管理的。下图则展现了HELIOS所须要的输入文件以及功能,还有各文件之间的关联。web
第一步是设定场景:咱们以森林样方为例,HELIOS的场景XML文件能够设定地形以及地表每棵树的obj文件以及坐标变换(
旋转
、平移
、缩放
):oracle地形设置:平地条件下,能够采用默认的
groundplane.obj
而无需修改。有地形条件下,能够采用地形的obj文件(<filter type="objloader">
)或者GeoTIFF文件(如上一期所述,会自动转换为三角面片,<filter type="geotiffloader
(做者未给出例子,须要确认,mark一下))。HELIOS也支持对地形进行缩放(xml文件中filter元素下的scale
属性)less
树木模型设置:咱们须要指定样方中每一棵树的obj模型文件路径,这与地形设置时是相似的。须要注意的是:obj模型的 轴方向与咱们常见的并不相同,须要事先用
cloudcompare
调整好方向。不过也能够不事先调整,设置pitch
属性也没问题。小注:我建议事先调整一下,不然在
rotate
参数设置时不太直观,可参考个人提问。编辑器树木坐标变换:为了制做看上去更为真实的森林样方,咱们能够对树木模型的尺寸、倾角、位置等进行变换。
经过 scale
调整模型的大小(DART能够分别调整 三个轴的缩放比例,但HELIOS只能统一调整)经过 translate
调整树木的三维位置。注意,当平台地表时, ;当有地形时, 须要根据地形进行调整经过 rotate
调整树木的旋转。包含yaw
,pitch
,roll
,这与一般的转角定义与范围是一致的。当须要直立树木时,则 (注意这是在obj文件方向调整以后的设置)。当须要倾斜树木时,则 。![]()
具体的设置方式能够根据xml文件的树结构形式,自行设定。这里我提供了一个MATLAB脚本文件,能够自动化批量设置。
第二步是设定扫描器: 扫描器的xml文件通常不须要咱们额外设置,直接指定一个扫描器便可,如Riegl VZ-400。HELIOS提供了脉冲式和相位式两种类型激光扫描器可供选择。注意,不要修改库中已有的参数。
若是确有须要设定其余型号的传感器,能够在xml文件中仿照已有参数自定义。
第三步是设定平台:咱们也不须要对平台进行额外设置,选择本身所采用的平台便可,好比地基平台就选择
tripod
,无人机平台就选Quadrocopter
,千万不要选错了,不然扫描结果就变了。
须要注意,这里已然设定的平台的高度为1.5 m
了,所以在后面的survey文件中设定扫描器位置与高度时,须要减去这个1.5 m。好比若是想设置扫描器高度为1.7 m,则survey文件中
。
(小注:目前HELIOS在平台高度设置这里有个小bug,解决方法任何状况下都设置onGround = false
便可)
第四步是设定测量文件:survey文件中须要指定场景、平台、扫描器,以及TLS的位置(或ULS的航点)与扫描configuration。
扫描范围与分辨率设置
headRotateStart_deg
和headRotateStop_deg
设置方位方向的扫描范围,取值范围0~360°scanAngle_deg
设置天顶方向的扫描范围,取值0~90°,FOV = 2 * scanAngle_deg
pulseFreq_hz
设置脉冲频率,须要参考真实扫描器的参数,不要随意修改scanFreq_hz
设置扫描线频率,取值范围参考canners_tls.xml
文件,扫描分辨率主要经过该参数进行调整![]()
扫描分辨率计算公式 方位分辨率= headRotatePerSec_deg / scanFreq_hz
。例如:2º/s / 50Hz = 0.04º天顶分辨率= 2 x scanAngle_deg x scanFreq_hz / pulseFreq_hz
。例如:2 x 40º x 50Hz / 100000Hz = 0.04º小注:如想修改分辨率,在扫描范围保持不变的状况下,修改 scanFreq_hz
具体的设置方式能够根据xml文件的树结构形式(下图),自行设定。
这里我提供了一个MATLAB脚本文件,能够自动化批量设置survey xml文件。
在开始模拟以前,首先要确保输入文件路径设置正确。HELIOS推荐将survey.xml,scene.xml,*.obj等文件分开存储。
必定要安装JAVA JDK才能运行哦,一些新电脑没有安装,请下载。
可视化模式
打开命令行窗口,修改至helios的目录下:
cd H:\linyuan_work\06_TLS station placement_UAV guide\helios\helios_precompiled
执行代码:
java -jar helios.jar data/surveys/survey_tls_forest_plot.xml
建议先在可视化模式下打开一次,确保场景与模拟参数设置正确,而后再用批量模式,毕竟批量模式稍微快一点。
可视化窗口下有一点是须要注意的,没法经过鼠标拖动实现平移功能,由于HELIOS始终设定扫描器在窗口的中心,若是想平移可见场景部分,则能够经过移动扫描器位置来实现。
批量模式
执行代码:
java -jar helios.jar data/surveys/survey_tls_forest_plot.xml headless
模拟结果分为.xyz
点云文件和.xyzfullwave.txt
波形文件。TLS状况下,波形文件通常不须要,能够删除。
在cloudcompare中查看模拟的点云,漂亮!
.xyz
点云文件内的字段属性包含:x,y,z,intensity 强度值
,ECHO_WIDTH 回波宽度
,RN 回波次数
,NR,FWF_ID 波形id
,OBJ_ID objecte文件id
,CLASS
X Y Z Intensity ECHO_WIDTH RN NOR FWF_ID OBJ_ID CLASS
小注:HELIOS的GitHub wiki 中对CLASS
的描述彷佛和OBJ_ID
混淆了。
好比在cloudcompare以OBJ_ID
为scalar field
,进行色彩化,可对每棵树赋予不一样色彩,进而能够分割出来。
我在考虑如今的模拟软件,是否能够输出点的类别属性呢?可能也不会太难实现,好比能够将一棵树分红枝干obj文件和叶片obj文件,两者同时输入模拟软件中,在ray casting时顺便记录三角面片的属性,这样岂不是就能够实现了。
更新(09/05/2020):恕我愚鲁和粗心,经靳双娜
师妹提醒,HELIOS确实能够实现以上功能。不过要求输入的obj模型时把每一类预先区分出来。