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

關鍵詞:地基激光雷達 點雲模擬 XML文件 做者:李二 日期:07/05/2020 - 08/05/2020html

我目前僅僅使用了TLS模式進行模擬,因此先講一下TLS的模擬經驗。
ALS和MLS的模擬,之後確定也會作一下

1. 明確模擬數據需求

在正式模擬本身的數據以前,必定要明確好本身的模擬數據需求,畢竟一次TLS的模擬耗時挺長的(在儘量貼近野外測量參數設置條件下)。java

好比我這裏要作森林樣方的TLS點雲模擬,目的是評估不一樣的布站模式 scan design的數據獲取質量以及對樹木參數計算的影響,所以需求儘量逼近野外TLS測量時的掃描器參數設置、森林樣方樹木狀況。node

針對森林樣方場景:根據一些現有的實測森林樣方樹木位置、胸徑、樹高等信息,經過某些樹木三維模型構建軟件(例如 OnyxTree)來創建樹木OBJ模型文件。ios

  • 爲求逼近野外樣方,可製做多個不一樣大小和樹種的樹木模型。
  • 一種稍微討巧的方法是,對一棵樹進行縮放變換(在輸入文件中設置),以獲得不一樣胸徑樹高的模型。

針對掃描器參數:根據所需scanner系統,在HELIOS的庫中選擇(好比下面的例子)或者自定義掃描器(參照所想模擬的掃描器的配置specification便可),這些通常不用關心。須要重點關心的是一些具體的掃描參數設置configurationgit

  • TLS的位置
  • 天頂掃描範圍 zenith和方位掃描範圍 azimuth
  • 掃描角度分辨率或者角度步長 angular resolution

2. 規劃輸入文件

令HELIOS模擬,則必須告訴其用戶定義的場景是什麼樣的,激光掃描器是什麼樣的,搭載在什麼平臺上,在哪裏掃描以及掃描範圍與分辨率等。github

HELIOS是經過XML文件的形式進行輸入數據管理的。下圖則展現了HELIOS所須要的輸入文件以及功能,還有各文件之間的關聯。web

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

2.1. scene xml文件

第一步是設定場景:咱們以森林樣方爲例,HELIOS的場景XML文件能夠設定地形以及地表每棵樹的obj文件以及座標變換(旋轉平移縮放):oracle

地形設置:平地條件下,能夠採用默認的groundplane.obj而無需修改。有地形條件下,能夠採用地形的obj文件(<filter type="objloader">)或者GeoTIFF文件(如上一期所述,會自動轉換爲三角面片,<filter type="geotiffloader(做者未給出例子,須要確認,mark一下))。HELIOS也支持對地形進行縮放(xml文件中filter元素下的scale屬性) 地形設置-平坦地表less

樹木模型設置:咱們須要指定樣方中每一棵樹的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模型時把每一類預先區分出來。

相關文章
相關標籤/搜索