關鍵詞:地基激光雷達
點雲模擬
XML文件
作者:李二 日期:07/05/2020 - 08/05/2020
我目前僅僅使用了TLS模式進行模擬,所以先講一下TLS的模擬經驗。
ALS和MLS的模擬,以后肯定也會做一下
1. 明確模擬數據需求
在正式模擬自己的數據之前,一定要明確好自己的模擬數據需求,畢竟一次TLS的模擬耗時挺長的(在盡可能貼近野外測量參數設置條件下)。
比如我這里要做森林樣方的TLS點雲模擬,目的是評估不同的布站模式 scan design
的數據獲取質量以及對樹木參數計算的影響,因此需求盡可能逼近野外TLS測量時的掃描器參數設置、森林樣方樹木情況。
針對森林樣方場景:根據一些現有的實測森林樣方樹木位置、胸徑、樹高等信息,通過某些樹木三維模型構建軟件(例如
OnyxTree
)來建立樹木OBJ
模型文件。
為求逼近野外樣方,可制作多個不同大小和樹種的樹木模型。 一種稍微討巧的方法是,對一棵樹進行縮放變換(在輸入文件中設置),以得到不同胸徑樹高的模型。
針對掃描器參數:根據所需
scanner
系統,在HELIOS的庫中選擇(比如下面的例子)或者自定義掃描器(參照所想模擬的掃描器的配置specification
即可),這些一般不用關心。需要重點關心的是一些具體的掃描參數設置configuration
:
TLS的位置 天頂掃描范圍 zenith
和方位掃描范圍azimuth
掃描角度分辨率或者角度步長 angular resolution
2. 規划輸入文件
令HELIOS模擬,則必須告訴其用戶定義的場景是什么樣的,激光掃描器是什么樣的,搭載在什么平台上,在哪里掃描以及掃描范圍與分辨率等。
HELIOS是通過XML文件
的形式進行輸入數據管理的。下圖則展示了HELIOS所需要的輸入文件以及功能,還有各文件之間的關聯。

2.1. scene xml文件
第一步是設定場景:我們以森林樣方為例,HELIOS的場景XML文件可以設定地形以及地表每棵樹的obj文件以及坐標變換(
旋轉
、平移
、縮放
):地形設置:平地條件下,可以采用默認的
groundplane.obj
而無需修改。有地形條件下,可以采用地形的obj文件(<filter type="objloader">
)或者GeoTIFF文件(如上一期所述,會自動轉換為三角面片,<filter type="geotiffloader
(作者未給出例子,需要確認,mark一下))。HELIOS也支持對地形進行縮放(xml文件中filter元素下的scale
屬性)樹木模型設置:我們需要指定樣方中每一棵樹的obj模型文件路徑,這與地形設置時是類似的。需要注意的是:obj模型的 軸方向與我們常見的並不相同,需要事先用
cloudcompare
調整好方向。不過也可以不事先調整,設置pitch
屬性也沒問題。小注:我建議事先調整一下,否則在
rotate
參數設置時不太直觀,可參考我的提問。樹木坐標變換:為了制作看上去更為真實的森林樣方,我們可以對樹木模型的尺寸、傾角、位置等進行變換。
通過 scale
調整模型的大小(DART可以分別調整 三個軸的縮放比例,但HELIOS只能統一調整)通過 translate
調整樹木的三維位置。注意,當平台地表時, ;當有地形時, 需要根據地形進行調整通過 rotate
調整樹木的旋轉。包含yaw
,pitch
,roll
,這與通常的轉角定義與范圍是一致的。當需要直立樹木時,則 (注意這是在obj文件方向調整之后的設置)。當需要傾斜樹木時,則 。![]()

具體的設置方式可以根據xml文件的樹結構形式,自行設定。這里我提供了一個MATLAB腳本文件,可以自動化批量設置。

2.2. scanner xml文件
第二步是設定掃描器: 掃描器的xml文件一般不需要我們額外設置,直接指定一個掃描器即可,如Riegl VZ-400。HELIOS提供了脈沖式和相位式兩種類型激光掃描器可供選擇。注意,不要修改庫中已有的參數。

如果確有需要設定其他型號的傳感器,可以在xml文件中仿照已有參數自定義。
2.3. platform xml文件
第三步是設定平台:我們也不需要對平台進行額外設置,選擇自己所采用的平台即可,比如地基平台就選擇
tripod
,無人機平台就選Quadrocopter
,千萬不要選錯了,否則掃描結果就變了。

需要注意,這里已然設定的平台的高度為1.5 m
了,因此在后面的survey文件中設定掃描器位置與高度時,需要減去這個1.5 m。比如如果想設置掃描器高度為1.7 m,則survey文件中
。
(小注:目前HELIOS在平台高度設置這里有個小bug,解決方法任何情況下都設置onGround = false
即可)
2.4. survey xml文件
第四步是設定測量文件: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文件。

3. 執行模擬
在開始模擬之前,首先要確保輸入文件路徑設置正確。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
4. 模擬結果查看
模擬結果分為.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
,進行色彩化,可對每棵樹賦予不同色彩,進而可以分割出來。

5. 后記
我在考慮現在的模擬軟件,是否可以輸出點的類別屬性呢?可能也不會太難實現,比如可以將一棵樹分成枝干obj文件和葉片obj文件,二者同時輸入模擬軟件中,在ray casting時順便記錄三角面片的屬性,這樣豈不是就可以實現了。

更新(09/05/2020):恕我愚魯和粗心,經靳雙娜
師妹提醒,HELIOS確實可以實現以上功能。不過要求輸入的obj模型時把每一類預先區分出來。