[LiDAR數據模擬]系列(2) HELIOS的TLS點雲模擬流程


關鍵詞:地基激光雷達 點雲模擬 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所需要的輸入文件以及功能,還有各文件之間的關聯。

HELIOS的XML輸入文件以及之間的關聯
HELIOS的XML輸入文件以及之間的關聯

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屬性也沒問題。 用cloudcompare調整obj文件的方位 小注:我建議事先調整一下,否則在rotate參數設置時不太直觀,可參考我的提問

樹木坐標變換:為了制作看上去更為真實的森林樣方,我們可以對樹木模型的尺寸、傾角、位置等進行變換。

  • 通過 scale調整模型的大小(DART可以分別調整 三個軸的縮放比例,但HELIOS只能統一調整)
  • 通過 translate調整樹木的三維位置。注意,當平台地表時, ;當有地形時, 需要根據地形進行調整
  • 通過 rotate調整樹木的旋轉。包含 yaw, pitch, roll,這與通常的轉角定義與范圍是一致的。當需要直立樹木時,則 (注意這是在obj文件方向調整之后的設置)。當需要傾斜樹木時,則 樹木設置
樹木坐標變換后看起來更為真實
樹木坐標變換后看起來更為真實

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

場景xml文件的樹結構
場景xml文件的樹結構

2.2. scanner xml文件

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

Riegl VZ-400 地基LIDAR的部分參數
Riegl VZ-400 地基LIDAR的部分參數

如果確有需要設定其他型號的傳感器,可以在xml文件中仿照已有參數自定義。

2.3. platform xml文件

第三步是設定平台:我們也不需要對平台進行額外設置,選擇自己所采用的平台即可,比如地基平台就選擇tripod,無人機平台就選Quadrocopter,千萬不要選錯了,否則掃描結果就變了。

TLS的三腳架平台屬性,注意z坐標
TLS的三腳架平台屬性,注意z坐標

需要注意,這里已然設定的平台的高度為1.5 m了,因此在后面的survey文件中設定掃描器位置與高度時,需要減去這個1.5 m。比如如果想設置掃描器高度為1.7 m,則survey文件中

(小注:目前HELIOS在平台高度設置這里有個小bug,解決方法任何情況下都設置onGround = false即可)

2.4. survey xml文件

第四步是設定測量文件:survey文件中需要指定場景、平台、掃描器,以及TLS的位置(或ULS的航點)與掃描configuration。

掃描范圍與分辨率設置

  • headRotateStart_degheadRotateStop_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文件的樹結構形式(下圖),自行設定。

survey xml文件的樹結構
survey xml文件的樹結構

這里我提供了一個MATLAB腳本文件,可以自動化批量設置survey xml文件。

自動化生成scene.xml和survey.xml的MATLAB腳本
自動化生成scene.xml和survey.xml的MATLAB腳本

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中查看模擬的點雲,漂亮!

模擬的四個TLS掃描站點雲的合並
模擬的四個TLS掃描站點雲的合並

.xyz點雲文件內的字段屬性包含:x,y,z,intensity 強度值ECHO_WIDTH 回波寬度RN 回波次數,NR,FWF_ID 波形idOBJ_ID objecte文件idCLASS

X Y Z Intensity ECHO_WIDTH RN NOR FWF_ID OBJ_ID CLASS
點雲文件中各字段屬性值示例
點雲文件中各字段屬性值示例

小注:HELIOS的GitHub wiki 中對CLASS的描述似乎和OBJ_ID混淆了。

比如在cloudcompare以OBJ_IDscalar field,進行色彩化,可對每棵樹賦予不同色彩,進而可以分割出來。

每棵樹顯示為不同的顏色
每棵樹顯示為不同的顏色

5. 后記

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

將單木分為主干、枝干、葉片三個子obj文件輸入,以在模擬點雲中獲取各自obj_id並進行分類
將單木分為主干、枝干、葉片三個子obj文件輸入,以在模擬點雲中獲取各自obj_id並進行分類

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM