張博為,崔 鵬
(貴州財(cái)經(jīng)大學(xué) 信息學(xué)院,貴州 貴陽 550025)
隨著自動(dòng)駕駛汽車落地的加快,傳統(tǒng)的實(shí)地路試已經(jīng)逐漸不能滿足自動(dòng)駕駛汽車對各種極端情景重現(xiàn)的需求,于是針對模擬自動(dòng)駕駛汽車路試情景的自動(dòng)駕駛仿真技術(shù)便愈發(fā)受到重視[1]。在業(yè)界的實(shí)踐中,算法在仿真系統(tǒng)中運(yùn)行的時(shí)間已經(jīng)超過了在路試上花費(fèi)的時(shí)間。
近年來越來越多的自動(dòng)駕駛模擬路試平臺出現(xiàn)[2,3],這些平臺主要分為兩類,一類是基于現(xiàn)有的三維仿真軟件進(jìn)行開發(fā)。例如基于Carsim開發(fā)的自動(dòng)駕駛相關(guān)軟件,對車輛動(dòng)力學(xué)的模擬較好,但是由于內(nèi)置渲染器和平臺的限制,只能針對于自動(dòng)駕駛相關(guān)的車輛動(dòng)力學(xué)方面進(jìn)行仿真,而不能將仿真拓展到自動(dòng)駕駛的全流程。Zofka等[4]基于GAZEBO平臺實(shí)現(xiàn)了一套帶有較為完善車輛操縱與動(dòng)力學(xué)模型的自動(dòng)駕駛仿真平臺,在此基礎(chǔ)上實(shí)現(xiàn)了基于深度圖的仿真場景像素級標(biāo)注的數(shù)據(jù)支持,雖然該平臺實(shí)現(xiàn)了對車載攝像頭的仿真,但是由于GAZEBO平臺渲染效果的缺陷,輸出的仿真攝像頭的數(shù)據(jù)與真實(shí)數(shù)據(jù)的特征空間差異過大,不能很好測試自動(dòng)駕駛模型的性能。另外一類是基于游戲引擎進(jìn)行開發(fā)[5-9],這類仿真平臺能夠模擬如暴雨、暴雪、行人橫穿馬路等復(fù)雜多變條件下的場景,更多地覆蓋現(xiàn)實(shí)生活中較少出現(xiàn)以及過于危險(xiǎn)的情景。目前,大多數(shù)主流自動(dòng)駕駛模擬路試系統(tǒng)都基于游戲引擎進(jìn)行開發(fā)。例如,Alexey等[8]提出了一套基于UnrealEngine4(UE4)的自動(dòng)駕駛仿真系統(tǒng)CARLA,提供了對模擬環(huán)境進(jìn)行控制的Python接口,使用UE4對仿真進(jìn)行時(shí)對場景中的人物和車輛進(jìn)行控制,但是上述框架將自動(dòng)駕駛相關(guān)算法限制在本機(jī)運(yùn)行,限制了算法仿真的效率,并且不支持將測試算法部署到邊緣計(jì)算平臺。聞龍[9]提出了一種云端推理的模擬路試系統(tǒng)架構(gòu),采用了本地?cái)?shù)據(jù)采集+云端推理的模式,結(jié)合高效的圖像壓縮的方式將本地采集到的仿真器數(shù)據(jù)傳輸?shù)皆贫艘怨?jié)省帶寬,但是不能很好地模擬當(dāng)前自動(dòng)駕駛的實(shí)際應(yīng)用情況。
相較于僅搭載攝像頭的方案,搭載激光雷達(dá)的方案抗干擾能力強(qiáng),在對高精度地圖的構(gòu)建上具有顯著優(yōu)勢。在對激光雷達(dá)的仿真上,現(xiàn)有多數(shù)仿真系統(tǒng)采用游戲物理引擎,通過物理引擎提供的場景查詢方法,來達(dá)到獲取仿真點(diǎn)云的目的,近年來也有一些研究通過對已有的點(diǎn)云進(jìn)行處理,并結(jié)合已有三維模型來產(chǎn)生點(diǎn)云。CARLA等框架[4,8]采用游戲引擎所提供的射線檢測算法,這套算法通過實(shí)時(shí)平臺的物理引擎,從指定點(diǎn)出發(fā),對指定方向的場景物體進(jìn)行求交。但是要求場景中的模型采用最高精度的碰撞模型,加重了物理引擎的計(jì)算量,并且光線的求交與查詢是運(yùn)行在實(shí)時(shí)平臺的主線程上的,增加了光線的數(shù)量會(huì)造成實(shí)時(shí)平臺的幀率下降,影響模擬傳感器的效果。柴國貝等[10]提出了一種基于三維模型頂點(diǎn)的激光雷達(dá)仿真方法,利用了GPU的頂點(diǎn)著色管線獲得了較大的性能提升。但是三維模型的頂點(diǎn)在世界坐標(biāo)系中并不一定按照激光雷達(dá)的掃描方式進(jìn)行排列,需要對頂點(diǎn)點(diǎn)云進(jìn)行過濾操作,所以不能很好地模擬車載激光雷達(dá)輸出點(diǎn)云的特性。Fang等[11]提出了基于掃描場景的激光雷達(dá)仿真方法,在預(yù)處理階段,對真實(shí)世界點(diǎn)云使用PointNet++[12]等點(diǎn)云分類模型剔除前景物體(如行人、汽車等),再將可能的動(dòng)態(tài)物體的三維模型處理成點(diǎn)云表示添加進(jìn)場景。Manivasagam等[13]改進(jìn)了前景車輛的生成方法,采用真實(shí)的車輛掃描點(diǎn)云。以上方法可以通過已有數(shù)據(jù)集進(jìn)行端到端的點(diǎn)云模擬,但不易對非前景物體進(jìn)行更改,并且無法使用同一套數(shù)據(jù)對激光雷達(dá)之外的傳感器進(jìn)行仿真。另外,隨著自動(dòng)駕駛相關(guān)算法復(fù)雜性的日漸提高,使得自動(dòng)駕駛汽車本身硬件的重要性逐漸凸顯,自動(dòng)駕駛汽車由于續(xù)航、空間等本身的限制,只能搭載低功耗的車載計(jì)算平臺,而車載計(jì)算平臺算力低的特點(diǎn)也就決定了自動(dòng)駕駛的仿真系統(tǒng)不能像傳統(tǒng)人工智能應(yīng)用一樣盲目地堆高算力。
針對以上的問題,本文提出了一套分布式的部署框架,將仿真環(huán)境、激光雷達(dá)仿真器、算法容器平臺按照處理數(shù)據(jù)的不同抽象成節(jié)點(diǎn)。其中環(huán)境仿真基于UE4引擎,能夠提供逼真的環(huán)境仿真效果,算法容器平臺可以選擇部署到高性能服務(wù)器上進(jìn)行監(jiān)督學(xué)習(xí),或是部署到邊緣計(jì)算平臺上進(jìn)行在實(shí)車條件下的算法測試。本文的貢獻(xiàn)主要有兩點(diǎn):提出了一套易于部署的,對邊緣節(jié)點(diǎn)友好的自動(dòng)駕駛模擬路試系統(tǒng);實(shí)現(xiàn)了基于光線追蹤算法的激光雷達(dá)模擬,利用GPU的高度并行性,提升了車載激光雷達(dá)仿真的效率。本文提出的自動(dòng)駕駛模擬路試系統(tǒng)驗(yàn)證了自動(dòng)駕駛仿真架構(gòu)異構(gòu)部署和光線追蹤算法模擬車載激光雷達(dá)的可行性,為后續(xù)相關(guān)工作提供了經(jīng)驗(yàn)。
如圖1所示,本文所提出的模擬路試系統(tǒng)系統(tǒng)主要分為4個(gè)部分:①世界構(gòu)建與自動(dòng)駕駛相關(guān)傳感器信息采集;②激光雷達(dá)仿真;③數(shù)據(jù)分發(fā);④算法容器。
圖1 模擬路試系統(tǒng)架構(gòu)
本系統(tǒng)的部署方式為多機(jī)分布式部署,算法容器與左側(cè)3個(gè)模塊之間通過局域網(wǎng)連接,以上4個(gè)模塊共同組成一個(gè)訓(xùn)練節(jié)點(diǎn)。整個(gè)仿真系統(tǒng)的流程如圖2所示。
圖2 模擬路試系統(tǒng)流程
為了架構(gòu)的靈活性和仿真?zhèn)鞲衅鞯恼鎸?shí)性,本模擬路試系統(tǒng)采用了當(dāng)前應(yīng)用較為廣泛的開源游戲引擎UE4作為仿真引擎。UE4能提供時(shí)較為真實(shí)渲染質(zhì)量,并且其自帶的動(dòng)畫、行為樹等模塊也能使構(gòu)建仿真環(huán)境的過程更為簡單和快速。
本系統(tǒng)通過封裝自動(dòng)駕駛汽車的控制操作和仿真?zhèn)鞲衅?攝像頭、慣性測量單元等)的數(shù)據(jù)流,通過網(wǎng)絡(luò)與分離部署的算法容器建立雙向數(shù)據(jù)交換。當(dāng)環(huán)境仿真引擎和算法容器分離部署時(shí),將采集到的傳感器數(shù)據(jù)封裝成數(shù)據(jù)流發(fā)送到算法容器中,再由算法容器返回指令給仿真引擎操縱仿真環(huán)境中的車輛。整個(gè)仿真引擎是依賴于UE4的PIE(play in editor)模式運(yùn)行的,這樣使得每次對仿真場景的修改都可以在下一次仿真中直接看到效果。
模擬路試平臺生成數(shù)據(jù)幀具有一定的時(shí)間間隔,假設(shè)T1為環(huán)境仿真引擎渲染一幀的時(shí)間,T2為單向網(wǎng)絡(luò)延遲時(shí)間,T3為算法容器處理一幀傳感器數(shù)據(jù)需要的時(shí)間,ti為一類仿真?zhèn)鞲衅鞑杉瘮?shù)據(jù)的時(shí)間,i為傳感器編號,則對仿真?zhèn)鞲衅鞑杉瘮?shù)據(jù)時(shí)間T4如式(1),系統(tǒng)總延遲T如式(2)
T4=max(t1,t2,t3,…,tn)
(1)
T=T1+2T2+T3+T4
(2)
多數(shù)的自動(dòng)駕駛仿真系統(tǒng)對激光雷達(dá)的模擬都是通過使用仿真引擎自帶的物理引擎進(jìn)行射線檢測從而得到單束激光目標(biāo)點(diǎn)的位置,由于場景的查詢多是串行執(zhí)行的,當(dāng)每幀點(diǎn)云數(shù)目過多時(shí),會(huì)使得產(chǎn)生一幀點(diǎn)云數(shù)據(jù)的時(shí)間過長,使得式(1)中T4過大,最終增大整個(gè)系統(tǒng)的響應(yīng)延遲。對此本文方法選擇將激光雷達(dá)仿真從仿真引擎中獨(dú)立出來,并使用光線追蹤算法在GPU上進(jìn)行并行計(jì)算,使得激光雷達(dá)仿真部分不阻塞仿真引擎的渲染流程,提高了效率,并且改進(jìn)了以往光線追蹤算法中耗時(shí)最高的光線生成算法以及著色算法,以滿足對激光雷達(dá)仿真實(shí)時(shí)性的要求。激光雷達(dá)仿真模塊接收仿真引擎?zhèn)鬟f的傳感器位置,輸出一幀點(diǎn)云。
算法容器中提供了針對所有傳感器數(shù)據(jù)的數(shù)據(jù)訪問的Python接口,用于自定義模型的數(shù)據(jù)獲取,也提供了針對常用目標(biāo)檢測算法以及車道線識別算法的封裝(如Yolo v3、Faster RCNN),方便快速搭建系統(tǒng)。算法容器針對仿真環(huán)境中的車輛控制提供了方向盤角度、油門百分比、檔位等車輛駕駛行為的封裝。同時(shí),分布式的部署方式使得算法容器可以靈活地部署在高性能服務(wù)器或是邊緣計(jì)算平臺上。
分布式部署依賴于高性能仿真平臺進(jìn)行數(shù)據(jù)分發(fā)。而在單機(jī)部署的情況下,使用共享內(nèi)存在各個(gè)模塊之間進(jìn)行數(shù)據(jù)傳輸,以達(dá)到最佳的性能。在分布式部署的情況下,需要傳輸?shù)臄?shù)據(jù)主要有點(diǎn)云數(shù)據(jù)、多路攝像頭數(shù)據(jù)、車輛信息數(shù)據(jù),以及算法容器傳回的指令。數(shù)據(jù)交換采用谷歌GRPC框架,其中多路視頻流的傳輸采用編碼、傳輸、解碼的方式以節(jié)省帶寬。數(shù)據(jù)分發(fā)模塊采用工作隊(duì)列將發(fā)送接收線程與工作線程解耦,工作線程以固定的時(shí)間間隔工作。數(shù)據(jù)的流向如圖3所示。
圖3 仿真器數(shù)據(jù)流向
光線追蹤算法[14]是一種易于在并行處理器上實(shí)現(xiàn)的算法。在實(shí)際的應(yīng)用中,每一個(gè)像素都可以并行運(yùn)行這一算法。本文提出的改進(jìn)光線追蹤算法運(yùn)用了現(xiàn)代GPU的光線追蹤渲染管線來進(jìn)行場景的求交查詢以及通過命中材質(zhì)的物理屬性進(jìn)行回波強(qiáng)度的計(jì)算,得到最終的激光雷達(dá)仿真器輸出。
目前廣泛采用的光線追蹤算法使用基于GPU的渲染流水線[15],主流的路徑追蹤流水線可以用5個(gè)著色器來表示:①光線生成著色器,用于定義一束光線的初始狀態(tài),并且開始進(jìn)行場景遍歷;②交叉著色器,用于定義與非三角形基元(如球面、體素,以及曲面細(xì)分)相交的規(guī)則,決定了物體的形狀,與具體的圖元的碰撞檢測是采用遍歷BVH(bounding box hierarchy)樹[15]來進(jìn)行的;③未命中著色器,用于定義一束射線在沒有與任何幾何體相交的情況下如何著色;④最近交點(diǎn)著色器,用于定義射線的交點(diǎn)如何著色,也可以在這個(gè)著色器中產(chǎn)生新的射線(用于反射等),形成一個(gè)遞歸調(diào)用;⑤任何交點(diǎn)著色器,用于定義射線是否要忽略這個(gè)交點(diǎn),繼續(xù)遍歷場景求交。后3種著色器用于控制每條射線的行為。
在通常情況下,光線生成著色器都是對窗口大小內(nèi)的所有像素進(jìn)行生成操作,但是對于仿真激光雷達(dá)來說,視口內(nèi)的大多數(shù)發(fā)射光線都是激光雷達(dá)所不需要的,所以本文使用了一種改進(jìn)的光線生成算法,相較于原來的光線生成算法,本文的方法規(guī)定了光線的生成規(guī)則,使得實(shí)際發(fā)射的光線的數(shù)量、位置與實(shí)際的激光雷達(dá)相同,同時(shí)優(yōu)化了Close-Hit Shader的執(zhí)行過程,去掉了著色器中對命中點(diǎn)不必要的采樣,將Close-Hit Shader中的指令數(shù)量降低為原來的30%。本文采用的光線生成算法如圖4所示,其中θ為發(fā)射的兩條光線間的夾角,P1、P2為像素坐標(biāo)系上兩點(diǎn),P′1、P′2為射線OP1、OP2在世界坐標(biāo)系中與三維模型的交點(diǎn)。
圖4 改進(jìn)光線生成算法
像素坐標(biāo)系到世界坐標(biāo)系的轉(zhuǎn)換如式(3)和式(4),其中R為相機(jī)旋轉(zhuǎn)矩陣,T為相機(jī)在世界坐標(biāo)系中的位置
[XC,YC,ZC]=ZK-1[x,y,1]T
(3)
(4)
在模擬仿真雷達(dá)時(shí),還需要考慮仿真激光雷達(dá)的參數(shù),例如在對多線束機(jī)械式激光雷達(dá)進(jìn)行模擬時(shí),就需要考慮角分辨、垂直FOV等參數(shù)。改進(jìn)光線生成算法默認(rèn)啟動(dòng)矩陣的最上方一行像素和最下方一行像素作為仿真激光雷達(dá)的最上方線束和最下方線束,再對滿足條件的線束執(zhí)行初始化和射線檢測,并判斷與場景是否有交點(diǎn),算法的偽碼如下:
算法1:改進(jìn)光線生成算法
輸入:像素坐標(biāo),相機(jī)參數(shù),仿真激光雷達(dá)參數(shù)
輸出:生成的光線
(1)根據(jù)式(3)、 式(4)計(jì)算u,v對應(yīng)的世界坐標(biāo)P
(2)IF(P滿足線束間夾角andP滿足角分辨率條件)
(3)dr=P-PCamera
(4)Ray←InitializeRay(dr,PCamera)
(5) WHILE !Ray.HitTriangle() and !Ray.IsMaxLength()
(6)Ray.Update(s)//s為射線每次的步長
(7) END WHILE
(8) IFRay.ValidHit()//射線與場景中的三角形有有效交點(diǎn)
(9)CloseHitShader(Ray)
(10) END IF
(11) END IF
為了改善傳統(tǒng)激光雷達(dá)仿真軟件采用的采用基于距離衰減的回波強(qiáng)度的計(jì)算公式,本文引入了文獻(xiàn)[10]提出的回波強(qiáng)度計(jì)算方法,其能較好模擬激光雷達(dá)回波強(qiáng)度的特性,本文將之應(yīng)用于 Closest-Hit著色器。與原本的Closest-Hit著色器相比,本文的改進(jìn)主要體現(xiàn)在以下4點(diǎn):①去除了間接光照的計(jì)算以降低計(jì)算量;②對場景中的透明材質(zhì)進(jìn)行過濾,忽略透明物體的反射;③在完成命中點(diǎn)BRDF計(jì)算之后采用式(5)計(jì)算當(dāng)前的輻亮度;④在一幀結(jié)束后使用CUDA編寫的并行歸約算法計(jì)算當(dāng)前幀輻亮度范圍,用于之后的分析。其中BRDF選用了常用的Cook-Torrance BRDF函數(shù)[16]
(5)
(6)
其中,a為仿真場景大氣散射系數(shù),R為激光雷達(dá)到命中點(diǎn)的距離,Pt為發(fā)射功率,fr(x,ωi,ωo) 為BRDF函數(shù),ηt,ηr分別為發(fā)射和接受光學(xué)系統(tǒng)的透過率,Lrange為系統(tǒng)的輻亮度范圍。Cook-Torrance BRDF定義如式(7)
(7)
其中,D(h) 為法線分布函數(shù),用于描述微觀法線方向的分布情況,粗糙表面法線分布相對均勻,光滑表面法線分布相對集中;F(v,h) 為菲涅爾函數(shù),用以描述在不同入射光角度下反射光線所占的比率;G(l,v)是微平面幾何函數(shù),用以描述微平面間的自遮擋關(guān)系,粗糙平面表面上的微平面有可能擋住其它的微平面從而減少表面所反射的光線;n為宏觀平面法線方向;h為微平面法線方向;l為入射光方向;v為觀察方向。對于Close-Hit著色器,首先對光線命中點(diǎn)材質(zhì)進(jìn)行采樣,得到粗糙度等渲染相關(guān)的信息,再計(jì)算BRDF值,最后使用式(5)與式(6)計(jì)算回波強(qiáng)度并返回到主機(jī)端,算法使用CUDA進(jìn)行并行計(jì)算,算法偽碼如下:
算法2:改進(jìn)Close-Hit著色器算法
輸入:物體材質(zhì)參數(shù)Mat,滿足條件的光線列表ValidRayList,系統(tǒng)輻亮度范圍Lrange
輸出:回波強(qiáng)度值Intensity
(1)FORRay←ValidRayList.Begin() toValidRayList.End()
(2)HitMat←SampleMaterial(Ray,Mat) //獲取光線命中點(diǎn)處法線,粗糙度等渲染相關(guān)信息
(3)S←BRDF(HitMat,Ray)
(4)根據(jù)式(6)使用HitMat與S計(jì)算Lr
(5)根據(jù)式(5)使用Lr與Lrange計(jì)算Intensity
(6)Intensity寫入回傳緩存
(7)END FOR
(8)回傳緩存復(fù)制到主機(jī)端,執(zhí)行并行歸約算法得到當(dāng)前幀輻亮度范圍
根據(jù)本文提出的自動(dòng)駕駛仿真器的特性,提出了3組實(shí)驗(yàn)來測試整個(gè)系統(tǒng)的性能,包括每秒激光雷達(dá)最大點(diǎn)云數(shù)、仿真平臺的數(shù)據(jù)速率、邊緣設(shè)備對生成的視頻數(shù)據(jù)進(jìn)行預(yù)測的性能。在實(shí)驗(yàn)中發(fā)現(xiàn)CARLA與Airsim實(shí)現(xiàn)激光雷達(dá)仿真的方法基本一致,故在這里選擇效果更好的CARLA進(jìn)行比較。
框架整體分成4個(gè)模塊進(jìn)行實(shí)現(xiàn)。在世界構(gòu)建與傳感器信息采集模塊中,仿真環(huán)境生成采用C++語言結(jié)合UE4引擎的GamePlay框架進(jìn)行實(shí)現(xiàn),彩色攝像頭、深度攝像頭通過引擎的渲染相關(guān)緩存進(jìn)行獲取,IMU數(shù)據(jù)通過采集場景中的車輛相關(guān)姿態(tài)角經(jīng)計(jì)算后得到。為了支持多路視頻的同時(shí)編解碼,采用基于GPU的VPF框架進(jìn)行編解碼操作。激光雷達(dá)仿真模塊使用基于CUDA實(shí)現(xiàn)的改進(jìn)光線追蹤算法。數(shù)據(jù)分發(fā)模塊使用Python實(shí)現(xiàn)了一個(gè)基于GRPC框架的模塊間通信與交換系統(tǒng)。算法容器模塊中,使用Python封裝車輛操作的邏輯,在沒有NVIDIA GPU的節(jié)點(diǎn)上采用ffmpg解碼視頻,在其它節(jié)點(diǎn)上使用VPF進(jìn)行解碼。仿真平臺的實(shí)際運(yùn)行效果如圖5所示。
圖5 模擬環(huán)境運(yùn)行效果
實(shí)驗(yàn)環(huán)境采用AMD 3900X、RTX 2070、32 GB內(nèi)存的運(yùn)算設(shè)備,操作系統(tǒng)為Windows 10 2004版本,使用的UE4版本為4.25,CARLA版本為0.9.10,Pytorch版本為1.6.0,測試實(shí)驗(yàn)配置的參數(shù)見表1。
本文的主要實(shí)驗(yàn)如下:實(shí)驗(yàn)1:將本文的激光雷達(dá)仿真方法與CARLA以及典型激光雷達(dá)產(chǎn)生的最大點(diǎn)云數(shù)量進(jìn)行對比。實(shí)驗(yàn)2:將本文的仿真環(huán)境的數(shù)據(jù)速率與CARLA
表1 系統(tǒng)參數(shù)
以及直接渲染的數(shù)據(jù)速率進(jìn)行對比。實(shí)驗(yàn)3:將本文的模擬路試系統(tǒng)輸出的數(shù)據(jù)在目前的主流檢測算法上進(jìn)行測試。
為了驗(yàn)證仿真系統(tǒng)產(chǎn)生點(diǎn)云的效率,本文對比了自動(dòng)駕駛模擬平臺CARLA使用PhysX物理引擎進(jìn)行場景求交運(yùn)算產(chǎn)生點(diǎn)云的方法。每秒生成的最大點(diǎn)云數(shù)量的計(jì)算方法如式(8)
P=AveragePoints×AverageFPS
(8)
(9)
其中,AveragePoints是平均每幀產(chǎn)生的點(diǎn)云數(shù)量,AverageFrameTime是每幀平均的幀時(shí)間。
本文實(shí)驗(yàn)了在16線、32線、64線、128線下的每秒最大點(diǎn)云產(chǎn)生數(shù)量,這里的每秒最大點(diǎn)云輸出數(shù)量定義為:在且掃描線數(shù)固定的情況下,橫向分辨率設(shè)置為激光雷達(dá)仿真器的最小值。對于本文方法,通過忽略角分辨率條件使得滿足垂直分辨率的每一行像素都發(fā)射光線,以達(dá)到每秒最大點(diǎn)云輸出數(shù)量。對于CARLA,在固定射線通道數(shù)的情況下,不斷加大每秒預(yù)期輸出點(diǎn)云數(shù)量,直到最后的實(shí)際輸出點(diǎn)云數(shù)量不再變化,以達(dá)到每秒最大點(diǎn)云輸出數(shù)量。通過對每秒最大點(diǎn)云輸出數(shù)量的測試能夠得到仿真激光雷達(dá)的性能上限。圖6的實(shí)驗(yàn)結(jié)果表明,本文方法相比CARLA在每幀最大輸出點(diǎn)云的指標(biāo)上,在模擬激光雷達(dá)線數(shù)為128時(shí)達(dá)到了7倍的最大點(diǎn)云數(shù)量。驗(yàn)證改進(jìn)的光線追蹤算法在模擬自動(dòng)駕駛使用的多線束掃描式激光雷達(dá)上相比于基于物理引擎的射線求交方式有著顯著的優(yōu)勢。
圖6 每秒最大點(diǎn)云數(shù)量的對比
為了驗(yàn)證整個(gè)仿真系統(tǒng)在運(yùn)行時(shí)的數(shù)據(jù)速率,在開啟三路攝像頭和激光雷達(dá)模擬的情況下,將整套系統(tǒng)部署在同一個(gè)節(jié)點(diǎn)上,以此對比本文方法和CARLA在每秒最大點(diǎn)云數(shù)量下的數(shù)據(jù)速率。同時(shí)也對UE4引擎直接渲染場景的幀率進(jìn)行了對比測試。圖7、圖8的實(shí)驗(yàn)結(jié)果表明,本文提出的自動(dòng)駕駛模擬路試的仿真部分相較于傳統(tǒng)依賴于游戲引擎流水線的架構(gòu)擁有巨大的優(yōu)勢,提高了40%的幀速率。表2的數(shù)據(jù)表明,對比CARLA,本文提出的架構(gòu)也可以有效減少在開啟模擬激光雷達(dá)的情況下仿真環(huán)境的卡頓。通過分析,發(fā)現(xiàn)CARLA采集除激光雷達(dá)外的其它傳感器的時(shí)間只占幀時(shí)間中很少的一部分,一幀中大多數(shù)的時(shí)間都用在激光雷達(dá)仿真模塊與UE4物理引擎的交互中,而使用物理引擎進(jìn)行射線查詢生成點(diǎn)云的方式,因?yàn)槠渑cUE4引擎主循環(huán)的強(qiáng)耦合,阻塞了渲染線程,導(dǎo)致了性能的大幅度下降。本文提出的方法,利用了GPU并行計(jì)算能力強(qiáng)的特點(diǎn),加快了點(diǎn)云的生成速度,并且數(shù)據(jù)的生成不依賴于游戲引擎。
圖7 仿真激光雷達(dá)幀率
圖8 UE4引擎幀率
表2 幀時(shí)間超過0.5 s數(shù)量統(tǒng)計(jì)
為了驗(yàn)證本文提出的架構(gòu)在運(yùn)行典型深度學(xué)習(xí)模型時(shí)的效率和準(zhǔn)確率,測試采用模型官方發(fā)布的COCO數(shù)據(jù)集上訓(xùn)練的預(yù)訓(xùn)練模型進(jìn)行,輸入的數(shù)據(jù)集為從本文的模擬環(huán)境中采集的3段1280*720 30 FPS帶語義信息(行人與車輛)的模擬路試畫面,分別測試了在YOLO-V3和YOLO-V5以及RetinaNet上的效率。測試采用配置為i5 1035G4 CPU (244.9 GFLOPS),8 GB內(nèi)存的邊緣計(jì)算設(shè)備,運(yùn)行示例如圖9所示。表3的結(jié)果表明,各個(gè)模型在算法容器中運(yùn)行的效率符合預(yù)期,生成的數(shù)據(jù)能夠較好地評價(jià)算法的性能。AP50指的是重疊度(IoU)閾值為0.5時(shí)的平均精度(AP)測量值,IoU以及AP的計(jì)算公式如下
(10)
(11)
(12)
(13)
其中,Rdi與Rgi分別為預(yù)測目標(biāo)框和真實(shí)目標(biāo)框,TP表示預(yù)測與實(shí)際均為正樣本的目標(biāo)數(shù)目,F(xiàn)P表示實(shí)際為負(fù)樣本預(yù)測為正樣本的目標(biāo)數(shù)目,F(xiàn)N表示實(shí)際為正樣本但預(yù)測為負(fù)樣本的目標(biāo)數(shù)目。AP表示準(zhǔn)確率-召回率曲線下的面積precisionmax(i) 表示該點(diǎn)對應(yīng)的最大準(zhǔn)確率。AP越高,模型的檢測效果越好。
圖9 實(shí)時(shí)檢測結(jié)果
表3 各個(gè)模型在算法容器中的運(yùn)行性能
當(dāng)前自動(dòng)駕駛模擬路試框架中存在的對激光雷達(dá)模擬效果不佳、無法分離部署自動(dòng)駕駛仿真器和自動(dòng)駕駛相關(guān)算法等問題,本文提出了一種改進(jìn)的自動(dòng)駕駛模擬路試系統(tǒng)。為了提高對車載激光雷達(dá)進(jìn)行模擬的效率,本系統(tǒng)提出了一種運(yùn)行在GPU上的改進(jìn)路徑追蹤算法,該算法改進(jìn)了傳統(tǒng)光線追蹤算法的渲染方程和Cook-Torrance BRDF函數(shù),實(shí)現(xiàn)了性能提升并且能更好地模擬車載激光雷達(dá)的實(shí)際運(yùn)行狀況。算法提高了平均4.5倍的每秒最大點(diǎn)云數(shù)量,模擬時(shí)的卡頓概率降低為其它框架的1/9。本系統(tǒng)采用的分布式部署的架構(gòu)能夠較好地評估各個(gè)算法的性能,同時(shí)降低自動(dòng)駕駛算法與模擬環(huán)境搶占算力的可能。下一步考慮將改進(jìn)光線追蹤算法應(yīng)用到采用高精度掃描模型的自動(dòng)駕駛仿真場景中,并且優(yōu)化和隱藏現(xiàn)有平臺的數(shù)據(jù)傳輸開銷,以達(dá)到更加高效的模擬。