周思達,李羅宇,唐嘉寧,楊 昕
(云南民族大學電氣信息工程學院,云南 昆明 650000)
隨著無人機技術的快速發(fā)展,無人機被廣泛應用于軍用和民用領域,在地貌探索,搜索救援,應急監(jiān)測等方面發(fā)揮著日益重要的作用。環(huán)境感知是無人機自主導航的關鍵,為了安全穩(wěn)定的執(zhí)行飛行任務,無人機在運動過程中必須實時對周圍障礙物做出反應。國內(nèi)外的專家學者已對無人機的自主導航飛行開展的大量研究,這些研究可分為兩個方面:一方面是無人機在運動的過程中實時檢測周圍環(huán)境,探測周圍障礙物從而實現(xiàn)避障;另一方面是利用路徑規(guī)劃算法在已知環(huán)境障礙物的情況下規(guī)劃路徑[1, 2]。不管是依靠哪種無人機路徑規(guī)劃的算法,在山地湖泊這樣復雜多變的非結(jié)構(gòu)化環(huán)境往往會因為信息量巨大而導致無人機的飛行判斷出現(xiàn)錯誤從而致使無人機墜機撞毀等情況發(fā)生。
過去十年,國內(nèi)外研究者積極嘗試使用強化學習(reinforcement learning,RL)的思想和理論來解決路徑規(guī)劃問題。Kulkarni等[3]分別研究了基于隨機路標圖和強化學習的路徑規(guī)劃方法,實現(xiàn)了雙足機器人的運動路徑規(guī)劃,該研究發(fā)現(xiàn)路徑較短但機器人跟蹤困難,而后者規(guī)劃的路徑較長但機器人容易跟蹤,可減輕控制器的負擔;Zhao等[4]提出了基于Dyna-Q異步強化學習的機器人的探索路徑規(guī)劃方法,其主要貢獻是利用模型學習的Dyna技術,將經(jīng)驗形成環(huán)境模型,從而用動態(tài)規(guī)劃進行策略求解,本質(zhì)是一個間接強化學習;Sombolestan等[5]提出了一種基于強化學習的隱藏目標探索路徑規(guī)劃方法,并在Webot仿真環(huán)境中進行了方法驗證;Ma 等[6]提出了一種狀態(tài)鏈序列反饋的強化學習路徑規(guī)劃方法,在二維柵格地圖和表格型Q 學習上進行了實現(xiàn)。強化學習和路徑規(guī)劃問題結(jié)合起來,對探索路徑規(guī)劃技術的發(fā)展有著重要意義。在強化學習訓練中,無人機以試錯的學習方式與環(huán)境交互,直接在現(xiàn)實場景中進行將帶來著更大的代價成本。因此,建立一個三維仿真環(huán)境,用于無人機強化學習訓練,可以大大減少在現(xiàn)實場景中進行訓練時,失敗所帶來的損失成本。此外,通過仿真平臺可以更加方便的搭建更多的場景,使用足夠多的場景進行無人機強化學習訓練,可以增強無人機訓練的泛化性和魯棒性。
在強化學習的場景制作中,可使用游戲引擎來實現(xiàn),游戲引擎所包含的渲染引擎、物理引擎、碰撞檢測系統(tǒng)、人工智能以及場景管理等系統(tǒng),提供給了開發(fā)者需要使用的工具,幫助開發(fā)者模擬與真實世界類似的物理效果?,F(xiàn)今,國內(nèi)外游戲行業(yè)用得最多的引擎Unity和UE4,它們各有特點。Unity是實時3D互動內(nèi)容創(chuàng)作和運營平臺,包括游戲開發(fā)、美術、建筑、汽車設計、影視在內(nèi)的所有創(chuàng)作者,借助Unity將創(chuàng)意變成現(xiàn)實,可用于創(chuàng)作、運營和變現(xiàn)任何實時互動的2D和3D內(nèi)容。虛幻引擎4(Unreal engine4,UE4)是由游戲開發(fā)者制作并供游戲開發(fā)者使用的一整套游戲開發(fā)工具,可以用于開發(fā)實時3D電影,培訓模式以及可視化程序等,發(fā)布平臺包含現(xiàn)在和未來的移動設備。Unity和UE4盡管都可以使用于場景的制作,但是在Unity中,其內(nèi)建工具不夠完善,渲染差,光照系統(tǒng)糟糕,陰影有缺陷,制作的場景缺乏真實性,只能勉強達到2A游戲入門水平,相比之下,UE4盡管是后起之秀,畫面效果完全達到3A游戲水準,光照和物理渲染即便在縮水的狀況下也足以達到秒殺Unity的效果。
本文使用UE4作為仿真平臺,在真實場景的制作中,以昆明市地區(qū)的真實地形為例,搭建用于無人機強化學習訓練的三維山地仿真環(huán)境。首先在獲得真實地形的數(shù)字高程數(shù)據(jù)之后,將Global Mapper和World Machine處理后的數(shù)據(jù)導入UE4進行地形的生成和渲染,在載具設置成功后即可實現(xiàn)對載具的控制。在UE4的插件AirSim中,其包含了大量可控制載具的API,大大簡潔了控制載具的強化學習代碼。由于使用UE4搭建仿真場景,其強大的光照和物理渲染等優(yōu)點,與其它的3D仿真平臺如Unity相比,本文使用的方法使場景更加真實。
在強化學習訓練中,智能體通過試錯的學習方法進行改進與環(huán)境互動的行為,從而獲得更多環(huán)境所提供的獎勵,但智能體在試錯的學習方式中不可避免的會得到失敗的教訓。構(gòu)建一個虛擬仿真環(huán)境,進行智能體的強化學習訓練,從而降低在現(xiàn)實場景中訓練帶來的代價和損失。在仿真平臺UE4,構(gòu)建適用于無人機訓練飛行的仿真場景,UE4的插件AirSim,提供了控制無人機行動的相關API。
圖1 無人機訓練基本框架
圖2 數(shù)據(jù)流
圖3 云南省昆明市地形
圖4 World Machine模擬地形
圖5 ASTGTM_N24E102區(qū)域范圍
圖6 選中的11.45km×11.45km區(qū)域范圍
圖7 World Machine面板模塊
圖8 輸入模塊視圖
圖9 水面圖層灰度圖視圖
圖10 草地圖層灰度圖視圖
圖11 巖石圖層灰度圖視圖
圖12 World Machine面板模塊
圖13 地形導入?yún)?shù)設置
圖15 材質(zhì)節(jié)點編輯
圖16 地形渲染圖
圖17 uproject文件設置
圖18 settings文件設置
圖19 無人機訓練測試
在UE4中制作地形,可以通過地理空間數(shù)據(jù)云直接獲得真實的地形數(shù)據(jù),也可以通過地形制作軟件,如World Machine,制作滿足需要的地形數(shù)據(jù)。在獲得真實的地形數(shù)據(jù)之后,將地形數(shù)據(jù)導入Global Mapper,通過Global Mapper能夠?qū)⒍喾N非標準的地形資源數(shù)據(jù)進行有效的格式轉(zhuǎn)換[7],從而使在地理空間數(shù)據(jù)云獲得的數(shù)據(jù)適用于UE4。其次,通過Global Mapper可以得到真實地形的海拔、面積等信息,從而使在UE4中制作的地形數(shù)據(jù)更加接近真實地形。
將地形數(shù)據(jù)導入World Machine可以通過不同的節(jié)點設置來進行分層導出,從而得到地形的不同圖層,利用這些導出的不同圖層,可以對原始地形進行貼圖處理,更加直觀的分清草地、雪山、水面等不同區(qū)域。
在UE4中,將地形數(shù)據(jù)導入并生成最原始的地形,通過藍圖新建需要的圖層,將從World Machine導出的圖層導入到該圖層中,選擇合適的材質(zhì)進行圖層的貼圖,最后經(jīng)過渲染得到最終的仿真場景。
場景的制作和搭建的平臺為虛幻引擎4(Unreal engine4,UE4),UE4是有Epic公司開發(fā)的一款游戲開發(fā)引擎,UE4比其之前版本有了很大的改進,使之成為一款風靡全球的游戲開發(fā)引擎。虛幻引擎是一套完整的構(gòu)建游戲、模擬和可視化的集成工具,能夠滿足藝術家的野心和愿景,同時也具備足夠的靈活性,可滿足不同規(guī)模的開發(fā)團隊需求。Epic已經(jīng)使用自研的虛幻引擎制作出了眾多備受贊譽的內(nèi)容,并由此開發(fā)出了強大的工具和高效的制作流程[8]。UE4具有實時逼真的渲染特性,基于物理的渲染、高級動態(tài)陰影選項、屏幕空間反射和光照通道等強大功能將靈活而高效地制作出令人贊嘆的內(nèi)容,可以輕松獲得好萊塢級別的視覺效果。
地形是自然界最復雜的景物之一,在虛擬現(xiàn)實中,三維真實地形的繪制一直是國內(nèi)外圖形學,CG 娛樂等產(chǎn)業(yè)領域關注的熱點。地形的模擬可以分為兩類:真實地形與模擬地形,真實地形是現(xiàn)實世界中真實地形的再現(xiàn),具有非常高的真實度,采用真實世界中的具體數(shù)據(jù)來構(gòu)造,其多采用數(shù)字高程模型(Digital Elevation Model,DEM),其本質(zhì)是對數(shù)字地面模型的一種地形分量進行考慮[9]。模擬地形是通過軟件模擬生成高程數(shù)據(jù),利用這些模擬數(shù)據(jù)來進行地形的制作生成。
4.2.1 真實地形數(shù)據(jù)
通過地理空間數(shù)據(jù)云可以獲得國內(nèi)任意位置的DEN高程數(shù)據(jù),其最高精度為30M分辨率的數(shù)字高程數(shù)。本文真實地形以云南省昆明市為例,通過地理空間數(shù)據(jù)云下載數(shù)據(jù)標識:ASTGTM_N24E102中心經(jīng)度:102.5 中心緯度24.5的ASTER GDEM 30M分辨率 數(shù)字高程數(shù)據(jù)。
將下載的數(shù)字高程數(shù)據(jù)包解壓,選擇后綴為dem的文件導入Global Mapper,截取需要的實際面積約為11.45km×11.45km的昆明市(滇池、西山包括在內(nèi))的地形區(qū)域。修改該區(qū)域的顯示單位為Square Kilometers,在Control Center中選擇到該文件,查看Meta date中該區(qū)域的數(shù)據(jù)信息,記錄下該區(qū)域的面積131.1km2、最低海拔1761.5m和最高海拔2475.7m。最后,將其轉(zhuǎn)換成World Machine可以識別的HF2文件格式并導出。
使用World Machine,在項目配置里將地形的長和寬設置為選中區(qū)域的實際大小,即11.45km×11.45km,同時將預覽分辨率設置為1024。在項目設置的常規(guī)設置中,將最大高度調(diào)為2560(在進行之后的數(shù)據(jù)導入UE4時,需要進行單位換算,Z軸將縮放一百倍相當于512m,此處選擇512的倍數(shù)更方便后續(xù)操作),該數(shù)高于此地區(qū)的最大高度2475.7m。在World Machine面板中添加文件輸入、輸出和過濾等模塊并連接。
在輸入模塊中添加Global Mapper導出的HF2文件,在通過各級條件過濾之后,輸出包括輸出一:地形灰度圖、輸出二:草地圖層灰度圖、輸出三:水面圖層灰度圖和輸出四:巖石圖層灰度圖。將項目設置中分辨率調(diào)為UE4支持的最大精度8129×8129,進行的構(gòu)建。最后將四個輸出節(jié)點的結(jié)果進行導出為RAW16格式的文件。
4.2.2 模擬地形數(shù)據(jù)
通過World Machine內(nèi)置的柏林噪波模塊可以隨機生成不同的地形。在World Machine面板中添加Advanced Perlin生成器模塊,用于生成最基本的隨機地形,后續(xù)分別加上Curves過濾器模塊,用于實現(xiàn)對生成的地形海拔進行調(diào)整,加上Erosion侵蝕模塊對地形進行侵蝕處理,使地形更加真實。最后對地形進行如4.2.1同樣的分層輸出。
通過對地形數(shù)據(jù)進行處理之后,將獲得四個圖層的文件。在UE4地形模式下,選擇從文件導入輸出一圖層,作為UE4的原始高度圖層,將Scale設置x值為140.85,y值為140.85,z值為500,高度圖分辨率選擇8129×8129,其它設置保持默認不變,最后選擇導入,渲染將得到地形基礎模型。
在UE4的內(nèi)容瀏覽器欄中,選擇新增創(chuàng)建基礎資源-材質(zhì),在編輯界面中,分別添加三個圖層的紋理:草地紋理、巖石紋理和水面紋理,對應這三個圖層分別再添加三個法線貼圖。創(chuàng)建兩個LandscapeCoords分別通過三個紋理的UVs口連接以及三個法線貼圖的UVs口連接。創(chuàng)建兩個Layer Blend節(jié)點,在其細節(jié)面板中增加草地、巖石和水面的圖層,其混合類型設置為LB權重混合,其它參數(shù)設置保持默認不變,其輸入接口分別連接紋理和法線貼圖的RGB輸出口,其中連接紋理的Layer Blend輸出口連接材質(zhì)結(jié)果節(jié)點的基礎顏色口,連接法線貼圖的Layer Blend輸出口連接材質(zhì)節(jié)點的Normal口。至此材質(zhì)編輯完成。
在UE4的世界大綱試圖中,選中地形基礎模型Landscape,在其細節(jié)面板-地形材質(zhì)中,選中上述制作的材質(zhì),在地形模式-繪制-Layers中,找到草地、巖石和水面三個圖層,分別選中創(chuàng)建層信息-權重混合層(法線)確定創(chuàng)建,完成后通過鼠標右鍵各圖層,分別從文件導入相應圖層的灰度圖進行渲染。
AirSim是一款基于Unreal Engine構(gòu)建的無人機、汽車等模擬器的開源平臺,在物理和視覺上逼真的模擬環(huán)境使得它成為一款很好的平臺。不僅模擬了無人機和汽車等動力學模型,甚至對天氣效果、燈光控制也做出了非常好的模擬,且Microsoft官方發(fā)布了很多測試環(huán)境,諸如森林、平原、鄉(xiāng)村、山脈景觀等。AirSim公開了API,可以通過Python等語言與仿真程序中的車輛或者無人機進行交互,可使用這些API進行圖像檢索、獲取狀態(tài)、控制車輛等。
根據(jù)官方說明的安裝步驟,將項目clone并編譯,將AirSim應用到自己的UE4工程項目:復制UnrealPlugins文件夾到虛幻項目的文件夾根目錄,在UE4項目的uproject文件中,向“Modules”對象添加關鍵的額外依賴項"AdditionalDependencies":[ "AirSim" ],在Plugins部分修改為"Plugins":[ { "Name":"AirSim", "Enabled":true } ]
Windows第一次啟動AirSim時將自動在DocumentsAirSim創(chuàng)建一個setting.json文件,在settings.json可以對載具的初始信息進行設定,包括載具類型、初始位置、初始方位等信息,通過修改"SimMode":"Multirotor"可將載具默認設置為四旋翼無人機。
在UE4搭建的場景中,切換到放置模式下,將基礎-玩家出生點拖拽到場景中期望的初始點,在世界場景設置中,將Game Mode-游戲模式覆蓋修改為AirSimGameMode。至此,無人機設置完成。
本文針對無人機在真實場景中進行強化學習訓練將會造成實際代價損失的問題,通過在仿真平臺Unreal Engine4中搭建三維山地場景,其飛行環(huán)境、物體環(huán)境、光線渲染、自然天氣等與現(xiàn)實環(huán)境接近。使用AirSim官方強化學習代碼進行無人機訓練,無人機在場景中訓練正常,當無人機墜機或碰撞山體時,能夠自檢到物理碰撞。