朱運維,胡 堅,賀文靜,李傳榮
(1.中國科學院空天信息創新研究院,北京 100094;2.中國科學院定量遙感信息技術重點實驗室,北京 100094;3.中國科學院大學,北京 100049)
激光雷達(Light Detection and Ranging,LiDAR)技術能夠通過快速獲取和實時處理形成高精度地表多維信息,在國土資源調查、地形測量、林業、災害評估等方面具有廣泛應用[1-2]。LiDAR 系統獲取的測距數據需要經過點云解算才能形成三維點云[3-5],因此點云解算[1]是LiDAR 實時處理系統中的關鍵處理環節。點云解算包括激光雷達測距值及對應姿態數據的處理,涉及大量的雙精度浮點數據的矩陣計算[6-7],具有計算量大,處理算法復雜的特點,給點云解算實時處理帶來了難度。
隨著超大規模集成電路技術的迅速發展,片上系統(System on a Chip,SoC)被廣泛應用于計算機、電子通信和軍工等領域[8-9]。SoC 技術通過處理器、存儲器、各種控制接口和互聯總線的集成,進一步減小了系統體積,并減少了系統中芯片之間的延遲,進而提高了系統效率[10-12]。利用FPGA 對系統進行硬件加速,能進一步提升系統的運算性能。
FPGA系統設計一般采取以具體應用為主導的設計方法,設計產品也往往只能滿足單一使用場景[13-14]。數據輸入特性的改變會使系統消耗資源和布線情況發生明顯變化,重新設計會增加系統開發成本和周期。文中面向激光點云解算應用,設計了基于可配置陣列的架構,提高了可配置路由支持系統的靈活可配置性;算法單元運用流水線計算和并行陣列的策略,在一定程度上降低了系統與數據輸入的耦合性,不僅提升系統計算性能,而且支持靈活重構。
點云解算利用激光雷達系統輸出的觀測目標測距數據,聯合激光雷達掃描時刻的位置姿態信息、測距數據,采用陣列推掃式機載激光雷達三維點云解算模型,具體地將激光掃描坐標系下獲取的測距值通過激光掃描坐標系、IMU 坐標系、導航投影坐標系以及地心坐標系的坐標轉換,獲得每個激光腳點精確的三維空間坐標,如圖1 所示。解算過程需要利用動態檢校參數進行校正處理,以提高處理精度;同時,需進行粗差剔除操作,目的是降低目標誤判概率和設備誤差的影響。

圖1 點云解算算法處理流程
為實現點云解算的實時處理和面向不同觀測載荷的靈活處理,文中設計了基于可重構陣列的點云解算FPGA 系統架構。點云解算FPGA 系統需要完成數據的路由發送和計算處理,具體架構包括數據處理模塊、路由模塊以及控制模塊。其中,數據處理模塊使用路由緩存以及計算單元的陣列形式,保證數據的靈活實時處理;路由模塊發送LiDAR 距離姿態數據,通過配置路由使系統具有靈活性;控制模塊監控系統的流水運行狀態。圖2 所示為點云解算FPGA 可重構陣列的總體設計結構。

圖2 點云解算FPGA可重構陣列結構
點云解算算法處理流程復雜、運算量大,其單流向數據處理的特點可以通過流水線設計實現算法的高效處理;而且點云解算在不同觀測載荷下數據獲取多變,也適合使用并行陣列進一步開發。因此,文中采用基于AXI-4 協議的高速傳輸方式,采用流水線和并行陣列混合的設計方式。
處理模塊設計是算法在FPGA 實現的重要步驟,其結構包含算法處理單元和數據緩存單元兩個部分。復雜算法的流水實現需要進行算法的單元分割,從而將復雜的算法簡化,為陣列和流水線的獨立實現奠定基礎。文中將點云解算分為激光雷達測距值及其姿態數據解算、矩陣變換和高斯投影3個算法,并對每個算法模塊進行流水線設計,獨立驗證算法的正確性。
算法處理模塊使用流水線設計方法,將算法的組合邏輯進一步系統地分割,在各個分級之間插入寄存器,將復雜操作分解為能并行的簡單操作,以提高數據吞吐率。
假設在T循環內完成對每個激光雷達點元的處理,共需處理N個點元,在流水線設計前所需時鐘T1=N×T,流水線設計所需時鐘T2=(N-1)×T0+T,流水線效率提升倍數如下:

點云解算流水線設計示意圖如圖3 所示。

圖3 點云解算流水線設計示意圖
Xilinx HLS 開發環境提供了兩種流水線指令:①unroll 和pipeline,unroll 指令會完全展開算法以達到最大并行,造成資源過度使用;②pipeline 優化指令中的迭代間隔約束因子(Initiation Interval,II)表示流水線發起間隔的周期數。通過改變迭代間隔約束因子得到不同性能的流水線,同時考慮開發板資源可使用量,并結合點云解算具有按描行存儲處理數據的特點,采用基于AXI-4 協議的DMA 傳輸方式。AXI-4 是基于VALID/READY 的握手機制數據傳輸協議,傳輸端使用VALID 標明地址/控制信號、數據有效,目的端使用READY 標明其能夠接受信息,讀和寫數據通道獨立,支持低成本的直接存儲器訪問DMA 傳輸。同時,該協議基于開始地址的猝發式傳輸,具有廣泛的IP 可擴展性,為陣列并行電路設計的控制設計提供基礎。整合算法模塊時,為實現不同時序的銜接,需要設計數據緩存。點云解算中矩陣變換通過坐標系轉換的運算輸出坐標為(x,y,z),將高程值z直接輸出;高斯投影只對其中的x,y坐標進行投影操作。利用AXI-4 協議數據有效信號實現了矩陣變換和高斯投影間數據的正確緩存。
文中路由結構由實現數據分配的FIFO 緩存區構成。通過實現數據分配,基于AXI-4 協議設計控制邏輯,使路由實現手動配置;路由單元配合控制單元監控數據傳輸和處理進度,最終使系統能夠通過可配置路由實現靈活的數據處理。
結合FPGA 內部存儲資源充足、訪問速度快以及激光雷達系統具有按掃描行處理數據的特點,使用FPGA 內部的存儲類資源BRAM 和查找表LUT 建立基于先入先出隊列(First Input First Output,FIFO)的數據緩存區,并對AXI-4 協議進行擴展,使數據順序寫入讀出。以三陣列對應路由為例,在初始計數器cnt 自增的情況下,將待處理數據Input 按照掃描行寫入對應陣列的緩存buffer,緩存完成時緩存計數器buffercnt進行自增。緩存計數器自增至三且AXI-4協議中的Input_valid 信號置低時,表示所有掃描行數據完成緩存,此時拉高calStart 信號啟動并行計算,控制過程如圖4 所示。

圖4 FIFO數據緩存控制時序圖
在陣列配置方面,文中利用AXI-4 協議在陣列頂層模塊中手動修改配置,支持不同數目的單元并行計算,對應不同觀測載荷的數據獲取。頂層模塊聲明了可配置路由和可整體增減的單元兩部分定義,包括陣列數目和輸入數據緩存區、基于AXI-4 的處理單元和控制接口及計算部分。重配置時修改陣列數目num,添加對應路由緩存區buffer 的定義;處理單元和控制接口以及計算部分實現一次獨立的處理,根據陣列數目可整體增減,體現AXI-4 協議的IP擴展性。偽代碼如下:


配置過程采用靜態可重構系統的設計方法[15-16],在一次配置完成后手動修改路由配置參數,完成重新固化,再燒寫比特流運行,大大縮短設計周期。
實驗采用Xilinx 公司的Kintex-7開發板,其核心芯片為XC7K420T,實驗時FPGA 時鐘頻率為100 MHz。
實驗具體從流水線、路由與系統性能3 個方面進行分析。流水線性能包括迭代間隔因子對流水線資源消耗和時耗的影響;在路由與系統性能方面,比較了不同實現方式的系統總時耗以及對應的路由單元資源消耗。
文中設計在算法分割上將點云解算分為LiDAR測距值及其姿態數據解算、矩陣變換和高斯投影3 個功能模塊,分別設計了3 個算法處理單元并采用流水線處理來提升處理效率。流水線迭代間隔因子影響流水線性能,實驗分析了在處理一行360 個點元的情況下,迭代間隔因子對流水線的時鐘周期和資源消耗的影響。以矩陣變換算法為例,資源消耗綜合結果包括4 類硬件資源:存儲資源BRAM、專用計算塊DSP、觸發器FF 和查找表LUT,如表1 所示。

表1 矩陣變換硬件資源消耗和時鐘周期
從表1 可知,隨著迭代間隔因子的降低,流水線效率明顯提高,但4 類硬件資源消耗逐漸增加;文中設計的可重構陣列實現并行處理既要提高處理效率,又需要避免并行實現時產生布線擁擠的情況,選取II=70 作為矩陣變換模塊的最終迭代間隔因子,進行流水線性能控制。
LiDAR 數據具有按掃描行獲取并處理的特點,對應的每個處理單元以行為單位處理數據。文中針對兩種不同LiDAR 數據處理場景分別設計實驗:當掃描頻率變化時通過配置路由并使用獨立單元、雙單元和三單元處理LiDAR 數據,驗證數據并行處理的高效性;LiDAR 每行獲取數據的幅寬也會變化,對應模擬3 種每行點元數不同的LiDAR 數據并使用不同的實現方式處理,驗證該設計能夠在一定程度上降低系統與數據的耦合性,提高系統可擴展性。
1)實驗在可配置路由的基礎上,通過不同數目單元并行處理驗證處理效率。以每行處理120 像元數據為例,選取6.6 s 掃描的數據,行頻100 Hz,數據行數為666 行,每行數據量為480 Byte,每行對應的載荷位置數據量為56 B,總數據量為348 kB。通過不同的實現方式,仿真實現了666 包數據并行計算輸出數據的結果。表2 給出了獨立單元、雙單元和三單元的點云解算處理時耗對比,不同實現方式對應的路由資源消耗如表3 所示。

表2 像元數120的點云解算時耗對比
由表2 可知,文中設計的雙單元和三單元處理666 行數據時用時分別為52.47 ms 和34.98 ms,對應實際獲取數據時間為6.6 s 的掃描數據,滿足激光雷達掃描頻率每行120 個點元數據的實時處理需求;從時鐘周期上,雙單元和三單元的并行加速效率為1.62 倍和2.43 倍。由表3 可知,不同實現方式的數據分配過程不同,對應路由的BRAM 資源變化接近線性關系,表明系統通過路由靈活配置和并行單元的實現方式提升了處理效率。

表3 路由資源消耗對比
2)不同LiDAR 載荷的每行掃描幅寬往往不同,為了驗證文中設計處理不同掃描幅寬數據的高效性與靈活性,分別模擬了3 種LiDAR 數據,像元數分別為120、240、360,LiDAR 行頻均為100 Hz,選取時間為6.6 s 的掃描數據。根據數據處理規模,分別通過獨立單元、雙單元和三單元的陣列方式實現,對應的系統總資源消耗與時耗分別如表4 和表5 所示。

表4 系統總資源消耗對比
由表4 可知,系統通過不同實現方式處理不同規模數據,對應的總資源消耗接近線性關系;在表5中,文中通過并行單元設計處理666 行3 種特性的數據用時分別為85.01 ms、104.90 ms、114.94 ms,滿足激光雷達掃描頻率下每行數據的實時處理需求,表明該設計方法能夠通過簡單的參數配置進行系統資源重構,靈活高效地實現不同LiDAR 數據的處理。

表5 不同數據規模點云解算系統性能對比
文中采用基于可配置陣列的設計方法,設計并實現了激光點云解算的FPGA 系統。在Xilinx 公司的Kintex-7 開發板上通過流水線設計和并行陣列設計處理單元,以及利用AXI-4 協議設計可配置路由的方法,實現了靈活配置的點云解算FPGA 多陣列處理設計。實驗結果表明,文中的激光點云解算FPGA 多陣列設計能夠滿足平臺的實時性處理以及不同觀測載荷的點云解算任務處理需求,降低了系統與輸入數據間耦合性,為車載、航空、衛星等實時處理平臺應用提供了一種適應不同數據率且資源可配置的FPGA 并行處理架構設計思路,在同類型載荷FPGA 實時處理系統開發中能減少因數據獲取速率變化導致FPGA 系統的額外設計,為遙感數據實時并行處理提供了支持。