关键词:LiDAR 激光雷达 点云模拟
作者:李二
日期:06/05/2020 - 07/05/2020

写在前面:我前段时间的一个工作(地基激光雷达TLS的新型布站策略)需要用到模拟的TLS点云数据来验证新型布站模式的性能,因此需要找一个LiDAR模拟平台来完成以上任务。

据我所知,目前典型的常用的两个模拟平台是:

  • DART (Discrete anisotropic radiative transfer) 的LiDAR模拟模块. DART原本主要用于遥感影像模拟与三维反演,在大约2015-2016年,增加了LiDAR的模拟模块。
  • HELIOS (Heidelberg LiDAR Operations Simulator). HELIOS本身就是设计用于LiDAR数据的模拟的,也是在2015年左右完成初始版本的。

这两个软件我都用过,并准备分享一下经验,最近新学习的HELIOS,那就先分享HELIOS吧

1. HELIOS的出现与特点

近些年,随着计算机算力的提高,遥感中各种计算机模拟软件层出不穷。其实LiDAR模拟软件往往是用于以下场景的:

  • 研究扫描策略和规划路径:比如一些路径规划,以及我的TLS布站策略
  • 算法发展:根据模拟数据,来发展一些新的方法,比如估算树木结构属性信息
  • 传感器发展:调整扫描参数,以测试不同传感器的扫描性能
  • 教学训练:比如学校没有购买激光雷达,可以用模拟数据教学

作者在他会议论文总结了一些相关历史工作,发现以前的研究主要存在如下几个不足:

  • 一些研究采用的是2.5D高程图来模拟ALS数据,缺少对场景详细几何结构的描述
  • 详细几何结构下的模拟十分耗时,需要加速
  • 激光脉冲并非一条无宽度的直线(thin line),而是存在beam divergence,即锥形束
  • 缺乏全波形数据(full-waveform)的模拟
  • 可视化与交互做的不够好

德国海德堡大学(Heidelberg University) Bernhard Höfle教授团队的工程师Sebastian Bechtold(主要作者) 开发的HELIOS则具有如下特点(a flexible multi-purpose simulation framework):

  • 支持真实三维几何,输入可以为obj模型文件、GeoTIFF地形高程文件(自动被转换为三角网)、ASCII格式的‘xyz’点云文件(自动被转换为体元)
  • 可用于任意场景的模拟:城市、森林、农田、自定义几何结构等
  • 可以模拟机载LiDAR、无人机LiDAR、车载/背包LiDAR、地基LiDAR等不同平台数据
  • 可以输出三维点云、强度、全波形数据
  • Java开发,三维可视化和交互性非常好
  • 各种扫描参数定义十分方便 (XML文件的形式),适合批量处理
  • 采用核心模块(core component)和扩展模块(extension modules)的组成方式,方便扩展
  • 代码开源,Github下载,且一直在维护

2. HELIOS的软件结构

HELIOS是Java写的,当然支持Windows, Linux和 Mac OS操作系统。它的软件结构比较直观,如下图所示。


HELIOS的软件结构示意图

2.1. 核心模块之Platform

platform主要用于控制scanner的位置和方位,用户可以选择平台类型诸如航空或地面平台,对于运动平台还可以设置speed

平台类型包含:

  • 四轮车 (mobile laser scanning)
  • 无人机 (multicopter, UAV laser scanning)
  • 有人机 (airplane)
  • 三脚架 (tripod)

HELIOS支持的四种平台

小注:Platform模块并不能定义行动路径,其仅能控制平台怎样移动,但却不能控制平台向哪里移动(这在survey playback模块中进行)。

2.2. 核心模块之Scene

Scene模块有两个核心功能:

场景建立:根据输入的场景文件,构建三维场景模型。

一般而言,场景是由三角面片 triangle mesh构建的(即输入多个obj模型,其具有详细的几何结构信息),每个三角面片均在*.mtl文件中定义了其物理属性(如反射率),*.obj文件会对*.mtl文件中的属性值进行索引。


*.obj文件以三角面片的形式存储(来源于漆建波博士论文)

*.obj文件中三角面片的存储格式(来源于漆建波博士论文)

求交计算:根据扫描原点 origin激光射线向量 ray vector场景几何 scene geometry,来快速计算激光线与场景的交点。这就是所谓的光线投射 ray casting(也可以称为光线追踪 ray tracing)。

通常激光雷达每秒钟的脉冲数量可达百万,因此需要极为快速的光线投射计算。限制计算速度的主要是如何确定一条激光射线向量与场景中那一个三角面片上的点相交,因此需要进行搜索,一般采用KD-Tree这种数据结构算法。


光线与场景交点计算的加速结构(来源于漆建波博士论文)

KD-Tree创建过程与遍历过程(来源于漆建波博士论文)

小注:这里的几个图片都是来自于我师兄漆建波 博士的博士论文,他算是遥感圈很认可的做计算机模拟模型做的很好的青年学者了。这些理论比较相通,恰好他的图很直观,于是借过来一用,感谢慷慨。

关于光线追踪/光线投射的一些具体内容,不妨看一下漆建波博士的论文

2.3. 核心模块之Scanner

Scanner模块主要有三项任务:

  • 模拟射束偏转(beam deflection):比如对于TLS,就是方位azimuth扫描和天顶zenith扫描范围,其实就是角度移动的范围 the pattern of angular movement.
  • 模拟激光脉冲发射 (firing of laser pulse):真实的激光脉冲是锥形光束,而不是直线,所以要考虑beam divergence
  • 模拟探测和处理激光回波信号:

HELIOS有四类扫描模式(scan pattern)可供选择:

  • Rotating mirror (parallel scan lines)
  • Fiber array (parallel scan lines)
  • Oscillating mirror (“zig-zag” scan pattern)
  • Conic mirror (elliptical scan pattern, a.k.a. “Palmer scan”)

HELIOS支持的四类扫描模式

beam divergence的模拟:用多条光线投射multiple raycasting queries来近似激光锥形束。

一般而言,以锥形束中心为圆心,可以设置不同的数量的圆圈来控制采样质量


beam divergence通过多光线投射来近似模拟

full waveform 全波形的模拟:对锥形束中每条采样光线执行光线投射,如果光线与三角面片相交,则记录surface incidence angle和该面片的物理性质。

波形的计算有点复杂,我还没搞清楚,挖个坑,回头填上吧。

点云输出:HELIOS通过应用回波检测算法,诸如peak detectionGaussian decomposition来导出点云。

2.4. 扩展模块之Loading assets

Loading assets模块其实就负责导入数据。它支持:

  • OBJ文件格式,这是HELIOS支持的标准格式
  • GeoTIFF文件格式,这是2.5D的数字高程影像,HELIOS会将其自动转换为三角面片
  • XYZ点云文件格式,点云输入后被体元化,如果体元存在多于一个点,则该体元为场景结构体元

读取输入场景文件中的坐标空间变换,包含平移 translate旋转 rotate缩放 scale三个要素。

2.5. 扩展模块之Visualization

Visualization模块提供了实时交互功能,虽然目前看起来比较粗糙,但是依然很有用。根据可视化,可以判定测站、结构等是否正确,判定扫描方式是否如预期,发现模拟代码是否有问题等等。


HELIOS的TLS模拟扫描可视化示例

3. 后记

下一期我们具体看一下如何实际使用HELIOS模拟自己想要的数据。

其实我们RAMM研究小组早就有人在用HELIOS,只是我一直用DART比较习惯,而且这篇TLS布站论文中也一直用DART模拟点云。目前审稿人让增加新的international benchmarking数据,而手头又没有在法国时那么powerful的电脑了,又经漆建波博士推荐,就学习了HELIOS。

我查了一下文献,目前国内外用HELIOS的还不多,于是想着总结一下经验,与大家分享。

[LiDAR数据模拟]系列(1) HELIOS模拟平台介绍的更多相关文章

  1. [LiDAR数据模拟]系列(2) HELIOS的TLS点云模拟流程

    关键词:地基激光雷达 点云模拟 XML文件 作者:李二 日期:07/05/2020 - 08/05/2020 我目前仅仅使用了TLS模式进行模拟,所以先讲一下TLS的模拟经验. ALS和MLS的模拟, ...

  2. Storm 系列(二)实时平台介绍

    Storm 系列(二)实时平台介绍 本章中的实时平台是指针对大数据进行实时分析的一整套系统,包括数据的收集.处理.存储等.一般而言,大数据有 4 个特点: Volumn(大量). Velocity(高 ...

  3. SuperMap iObject入门开发系列之一组件式GIS开发平台介绍

    本文是一位好友“炀炀”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢.平台介绍:SuperMap iObjects Java/.NET 是面向GIS应用系统开发者的组件式GIS开发平台,具有强 ...

  4. [渣译文] SignalR 2.0 系列: 支持的平台

    原文:[渣译文] SignalR 2.0 系列: 支持的平台 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ASP. ...

  5. Kylin系列之二:原理介绍

    Kylin系列之二:原理介绍 2018年4月15日 15:52 因何而生 Kylin和hive的区别 1. hive主要是离线分析平台,适用于已经有成熟的报表体系,每天只要定时运行即可. 2. Kyl ...

  6. 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...

  7. Android平台介绍

    一.Android平台介绍 什么是智能手机 具有独立的操作系统,独立的运行空间,可以由用户自行安装软件.游戏.导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称. 智能手机操 ...

  8. ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成

    一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...

  9. ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器

    一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...

随机推荐

  1. 对称加密算法在C#中的踩坑日常

    前言 有幸接触了一下传说中的对称加密算法3DES 感觉这些加密算法与我的工作是想去甚远的,一般没什么机会接触这些东西 今次了解了一下3DES这个对称算法 原理算不上明白,算是踩了C#中的一些坑吧 C# ...

  2. 关于node中两个模块相互引用却不会死循环的问题

    关于node中两个模块相互引用却不会死循环的问题 node中是通过require来导入加载模块的,require有两个作用: 1.加载文件模块并执行里面的代码 2.拿到被加载文件模块导出的接口对象 现 ...

  3. Python 控制流代码混淆简介,加大别人分析你代码逻辑和流程难度

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  4. Personal Photo Experience Proposal

      Background:             Our smart phones are the most widely-used cameras now, more and more photo ...

  5. 详解 stream流

    在本人之前的博文中,我们学习了 I/O流.NIO流的相关概念. 那么,在JDK8的更新内容中,提出了一个新的流 -- stream流 那么,现在,本人就来讲解下这个流: 目录 stream流 常用AP ...

  6. spring boot 项目 mvn clean install 报 "Unable to find main class" 的解决方法

    按照步骤来总会解决的 检查pom.xml中是否加入了spring boot maven插件 <build> <plugins> <plugin> <group ...

  7. [YII2] 增删改查2

    一.新增 使用model::save()操作进行新增数据 $user= new User; $user->username =$username; $user->password =$pa ...

  8. JDK的下载安装与环境变量的配置

    第一步:下载 方式一:在地址栏输入 www.oracle.com 访问该网址自行下载 方式二:百度网盘下载链接1.8  64位版本: https://pan.baidu.com/s/10ZMK7NB6 ...

  9. linux--配置开发环境 --Nginx篇

    安装: 安装好了话,我们的nginx的目录在:  /etc/nginx 启动: sudo service nginx start 然后访问我们的页面就可以看到了我们的界面 然后我们配置我们的域名: 我 ...

  10. [Inno Setup] 卸载 重启之后 删除文件

    某些系统文件,例如驱动,不重启无法删除. 利用windows注册表里的 RunOnce.注意必须在HKLM下,否则可能权限不够. 不能直接填cmd命令,要以cmd的参数形式填写. procedure ...