關鍵詞: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操作系統。它的軟件結構比較直觀,如下圖所示。

2.1. 核心模塊之Platform
platform
主要用於控制scanner
的位置
和方位
,用戶可以選擇平台類型諸如航空或地面平台,對於運動平台還可以設置speed
。
平台類型包含:
-
四輪車 (mobile laser scanning) -
無人機 (multicopter, UAV laser scanning) -
有人機 (airplane) -
三腳架 (tripod)

小注:Platform模塊並不能定義行動路徑,其僅能控制平台怎樣移動,但卻不能控制平台向哪里移動(這在survey playback模塊中進行)。
2.2. 核心模塊之Scene
Scene
模塊有兩個核心功能:
場景建立:根據輸入的場景文件,構建三維場景模型。
一般而言,場景是由
三角面片 triangle mesh
構建的(即輸入多個obj模型,其具有詳細的幾何結構信息),每個三角面片均在*.mtl文件中定義了其物理屬性(如反射率
),*.obj
文件會對*.mtl
文件中的屬性值進行索引。


求交計算:根據
掃描原點 origin
、激光射線向量 ray vector
、場景幾何 scene geometry
,來快速計算激光線與場景的交點。這就是所謂的光線投射 ray casting(也可以稱為光線追蹤 ray tracing
)。通常激光雷達每秒鍾的脈沖數量可達百萬,因此需要極為快速的光線投射計算。限制計算速度的主要是如何確定一條激光射線向量與場景中那一個三角面片上的點相交,因此需要進行搜索,一般采用
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”)

beam divergence的模擬:用多條光線投射
multiple raycasting queries
來近似激光錐形束。一般而言,以錐形束中心為圓心,可以設置不同的數量的圓圈來控制
采樣質量
。

full waveform 全波形的模擬:對錐形束中每條采樣光線執行光線投射,如果光線與三角面片相交,則記錄
surface incidence angle
和該面片的物理性質。波形的計算有點復雜,我還沒搞清楚,挖個坑,回頭填上吧。
點雲輸出:HELIOS通過應用回波檢測算法,諸如
peak detection
和Gaussian decomposition
來導出點雲。
2.4. 擴展模塊之Loading assets
Loading assets
模塊其實就負責導入數據。它支持:
-
OBJ文件格式,這是HELIOS支持的標准格式 -
GeoTIFF文件格式,這是2.5D的數字高程影像,HELIOS會將其自動轉換為三角面片 -
XYZ點雲文件格式,點雲輸入后被體元化,如果體元存在多於一個點,則該體元為場景結構體元
讀取輸入場景文件中的坐標空間變換,包含平移 translate
、旋轉 rotate
、縮放 scale
三個要素。
2.5. 擴展模塊之Visualization
Visualization
模塊提供了實時交互功能,雖然目前看起來比較粗糙,但是依然很有用。根據可視化,可以判定測站、結構等是否正確,判定掃描方式是否如預期,發現模擬代碼是否有問題等等。

3. 后記
下一期我們具體看一下如何實際使用HELIOS模擬自己想要的數據。
其實我們RAMM研究小組早就有人在用HELIOS,只是我一直用DART比較習慣,而且這篇TLS布站論文中也一直用DART模擬點雲。目前審稿人讓增加新的international benchmarking數據,而手頭又沒有在法國時那么powerful的電腦了,又經漆建波博士推薦,就學習了HELIOS。
我查了一下文獻,目前國內外用HELIOS的還不多,於是想着總結一下經驗,與大家分享。