關鍵詞:地基激光雷達
點雲模擬
XML文件
做者:李二 日期:07/05/2020 - 08/05/2020html
我目前僅僅使用了TLS模式進行模擬,因此先講一下TLS的模擬經驗。 ALS和MLS的模擬,之後確定也會作一下
在正式模擬本身的數據以前,必定要明確好本身的模擬數據需求,畢竟一次TLS的模擬耗時挺長的(在儘量貼近野外測量參數設置條件下)。java
好比我這裏要作森林樣方的TLS點雲模擬,目的是評估不一樣的布站模式 scan design
的數據獲取質量以及對樹木參數計算的影響,所以需求儘量逼近野外TLS測量時的掃描器參數設置、森林樣方樹木狀況。node
針對森林樣方場景:根據一些現有的實測森林樣方樹木位置、胸徑、樹高等信息,經過某些樹木三維模型構建軟件(例如
OnyxTree
)來創建樹木OBJ
模型文件。ios
爲求逼近野外樣方,可製做多個不一樣大小和樹種的樹木模型。 一種稍微討巧的方法是,對一棵樹進行縮放變換(在輸入文件中設置),以獲得不一樣胸徑樹高的模型。
針對掃描器參數:根據所需
scanner
系統,在HELIOS的庫中選擇(好比下面的例子)或者自定義掃描器(參照所想模擬的掃描器的配置specification
便可),這些通常不用關心。須要重點關心的是一些具體的掃描參數設置configuration
:git
TLS的位置 天頂掃描範圍 zenith
和方位掃描範圍azimuth
掃描角度分辨率或者角度步長 angular resolution
令HELIOS模擬,則必須告訴其用戶定義的場景是什麼樣的,激光掃描器是什麼樣的,搭載在什麼平臺上,在哪裏掃描以及掃描範圍與分辨率等。github
HELIOS是經過XML文件
的形式進行輸入數據管理的。下圖則展現了HELIOS所須要的輸入文件以及功能,還有各文件之間的關聯。web
第一步是設定場景:咱們以森林樣方爲例,HELIOS的場景XML文件能夠設定地形以及地表每棵樹的obj文件以及座標變換(
旋轉
、平移
、縮放
):oracle地形設置:平地條件下,能夠採用默認的
groundplane.obj
而無需修改。有地形條件下,能夠採用地形的obj文件(<filter type="objloader">
)或者GeoTIFF文件(如上一期所述,會自動轉換爲三角面片,<filter type="geotiffloader
(做者未給出例子,須要確認,mark一下))。HELIOS也支持對地形進行縮放(xml文件中filter元素下的scale
屬性)less
樹木模型設置:咱們須要指定樣方中每一棵樹的obj模型文件路徑,這與地形設置時是相似的。須要注意的是:obj模型的 軸方向與咱們常見的並不相同,須要事先用
cloudcompare
調整好方向。不過也能夠不事先調整,設置pitch
屬性也沒問題。小注:我建議事先調整一下,不然在
rotate
參數設置時不太直觀,可參考個人提問。編輯器樹木座標變換:爲了製做看上去更爲真實的森林樣方,咱們能夠對樹木模型的尺寸、傾角、位置等進行變換。
經過 scale
調整模型的大小(DART能夠分別調整 三個軸的縮放比例,但HELIOS只能統一調整)經過 translate
調整樹木的三維位置。注意,當平臺地表時, ;當有地形時, 須要根據地形進行調整經過 rotate
調整樹木的旋轉。包含yaw
,pitch
,roll
,這與一般的轉角定義與範圍是一致的。當須要直立樹木時,則 (注意這是在obj文件方向調整以後的設置)。當須要傾斜樹木時,則 。![]()
具體的設置方式能夠根據xml文件的樹結構形式,自行設定。這裏我提供了一個MATLAB腳本文件,能夠自動化批量設置。
第二步是設定掃描器: 掃描器的xml文件通常不須要咱們額外設置,直接指定一個掃描器便可,如Riegl VZ-400。HELIOS提供了脈衝式和相位式兩種類型激光掃描器可供選擇。注意,不要修改庫中已有的參數。
若是確有須要設定其餘型號的傳感器,能夠在xml文件中仿照已有參數自定義。
第三步是設定平臺:咱們也不須要對平臺進行額外設置,選擇本身所採用的平臺便可,好比地基平臺就選擇
tripod
,無人機平臺就選Quadrocopter
,千萬不要選錯了,不然掃描結果就變了。
須要注意,這裏已然設定的平臺的高度爲1.5 m
了,所以在後面的survey文件中設定掃描器位置與高度時,須要減去這個1.5 m。好比若是想設置掃描器高度爲1.7 m,則survey文件中
。
(小注:目前HELIOS在平臺高度設置這裏有個小bug,解決方法任何狀況下都設置onGround = false
便可)
第四步是設定測量文件: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文件。
在開始模擬以前,首先要確保輸入文件路徑設置正確。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
模擬結果分爲.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
,進行色彩化,可對每棵樹賦予不一樣色彩,進而能夠分割出來。
我在考慮如今的模擬軟件,是否能夠輸出點的類別屬性呢?可能也不會太難實現,好比能夠將一棵樹分紅枝幹obj文件和葉片obj文件,兩者同時輸入模擬軟件中,在ray casting時順便記錄三角面片的屬性,這樣豈不是就能夠實現了。
更新(09/05/2020):恕我愚魯和粗心,經靳雙娜
師妹提醒,HELIOS確實能夠實現以上功能。不過要求輸入的obj模型時把每一類預先區分出來。