楊壯濤,朱紀洪,劉兆沛,李猛,文善賢,陳俊賢
(1.廣西大學機械工程學院,廣西 南寧 530004;2.清華大學精密儀器系;3.清華大學計算機系,北京 100084)
機動車的需求量和購買量在不斷提升,與此同時頻發的交通事故嚴重威脅人們的生命財產安全。自動駕駛技術的實現依賴于車輛對自身及周圍環境情況的采集及獲取,因此實現多傳感器的數據融合極其重要。各個傳感器間具有統一時間基準是實現各傳感器數據融合的基礎。
對多個通道數據進行采集,有采用單片機、DSP等串行微處理器實現的方案,因為處理器中的程序采用串行處理機制,適用于傳感器數量不多、數據量不大,同步要求不高的應用場景。基于數字電路的FPGA具有并行處理優勢,文獻基于FPGA對多達24路磁異常數據進行采集,但是僅保證指令同時發送而不設計時間同步機制,隨著時間推移各傳感器間的時間基準可能會存在較大偏差。基于FPGA結合PPS進行多傳感器同步可較容易的獲得較高的時間同步精度,華中科技大學的文獻[1]、文獻[2]及文獻[3]基于PPS進行多傳感器數據融合,具有較高的時間同步精度,但是基于PPS實現需保證控制電平符合激光雷達等傳感器的電平需求,需進行額外的驅動電路設計及增加布線,另外因無人車車載設備集成度高,對同步信號可能產生較大電磁干擾。
為保障數據傳輸的實時性,本設計采用高帶寬的PCIe通信實現探測板卡與上位機的通信;為實現多通道并行處理,采用基于數字電路的FPGA作為開發平臺;為降低各通道間的耦合度,開發了以太網協議棧并封裝為IP核;為實現多個傳感器間時間同步,分析了IEEE 1588協議,并以探測節點板卡作為主節點設計了時間同步機制。
采集系統采用“FPGA+CPU”的異構硬件平臺,數據同步采集系統架構如圖1所示。FPGA實現多傳感器數據的采集,并作為時間同步主節點對多個傳感器進行同步。計算機基于FPGA提交的數據繪制激光雷達點云圖、完成目標探測識別及無人車路徑規劃等任務,并產生控制指令發送至車輛控制系統,由車輛控制系統指控執行機構完成無人車自主行駛、自主越障等任務。計算機與FPGA板卡通過PCIe接口進行通信,FPGA板卡與傳感器間采用以太網實現通信。在時間同步方面,以FPGA作為時間同步主節點,基于IEEE1588協議對激光雷達進行授時,另外可基于用戶配置寫入協議對多個激光雷達進行配置。因FPGA板卡主要實現探測數據的同步采集,以下敘述稱探測節點。

圖1 多通道同步采集系統設計框架
為增加設計方案的可移植性,降低硬件成本,本方案采用“核心板+底板”的實現方式。FPGA選用Xilinx公司的XC7A200TFBG676-2,此芯片有豐富的邏輯資源,LUT資源高達133.8K個;IO口高達400個,可與大量外設進行交互。相對應的核心板選擇米聯客MA704A,底板設計如下,為實現與激光雷達、攝像頭等多個傳感器進行數據交互,采用通信速率可達1Gbps的千兆以太網接口。上位機需實時對各傳感器數據進行解算,因此需采用通信速率更高的通信接口將多通道以太網數據實時上傳至上位機,選用PCIe-X4接口來實現。考慮試驗數據記錄需要底板設計了TF卡槽,對重要的參數進行記錄,以方便后續對試驗結果進行整理分析。串口通信應用廣泛,在通信速率要求不高的應用場景中,可滿足探測節點與其他控制器的通信需求。為方便項目調試,設計了多個LED燈及GPIO口。另外,設計了JTAG程序下載接口及供電電路;在使用FPGA的MGT高速接口時,需要設計低抖動的時鐘發生電路。探測節點硬件方案如圖2所示。

圖2 探測節點硬件方案示意圖
PCIe總線一般用于計算機與外圍設備互連,是第三代高性能IO總線,規范定義了其基本結構,包含根組件、交換器以及端節點設備。探測節點和上位機通過金手指連接,在X4模式下有4對差分信號發送管腳和4對差分信號接收管腳,為pcie_mgt_txp/n[3:0]及pcie_mgt_rxp/n[3:0]。參考時鐘clk_pcie_p/n頻率為100MHZ,由上位機板卡通過金手指差分時鐘管腳提供。上位機主板與探測節點板卡之間需進行直流電壓隔離,通過在數據發送端添加直流耦合電容的方式來實現。探測節點板卡pcie_mgt_rxp/n[3:0]的電容已經在主機板卡上添加,節點板卡只需為pcie_mgt_rxp/n[3:0]在靠近金手指處添加耦合電容即可。金手指數據傳輸通道與FPGA高速接口MGT相連,FPGA的GTX以Quad為單位進行劃分,每個Quad包含4個lane。
以太網MII(Medium Independent Interface, MII)接口類型主要有GMII(Gigabit Media Independent Interface, GMII)、RGMII(Reduced Gigabit Media Independent Interface)、SGMII(Serial Gigabit Media Independent Interface)、TBI(Ten Bit interface)和RTBI(Reduced Ten Bit Interface)五種。其關鍵參數如表1所示。

表1 以太網接口參數匯總表
首先,進行多通道數據采集需采用多個網口,需考慮節省IO資源;其次,采用SGMII接口后期可升級采用光通信,相比傳統采用電壓信號進行通信的方式光通信具有較強的抗電磁干擾能力,另外光通信還能夠減輕設備質量,因此本文選用SGMII接口。
相比采用Verilog硬件描述語言進行連線的方式,探測節點軟件開發在VIVADO的Block Design中完成,連線更加簡潔。PCIe有兩種數據傳輸方式,PIO及DMA。PIO(Programmed Input-Output,PIO)每一次傳輸都通過CPU執行IO端指令來實現。DMA(Direct Memory Access, DMA)數據傳輸由DMA控制器完成,幾乎不占用CPU資源,相較于PIO來說具有更高的數據吞吐量。常用于端點設備中的DMA傳輸方式可分為總線主控式和分散聚合式,總線主控式DMA要求系統開辟物理地址連續的內存空間,且每次傳輸完成后均需要處理器重新進行配置,適用于少量單塊數據傳輸。分散聚合式DMA通過描述符鏈表實現,將主機中分散的內存空間與描述符鏈表的映射關系映射到端節點設備的內存中。在多通道數據同步采集的應用場景下,且考慮后期需將攝像頭數據接入多通道探測節點板卡,本文采用分散聚合式DMA進行數據傳輸實現上位機與探測節點板卡的數據傳輸,以保障數據傳輸速率及實時性。
以太網通信具有靈活的拓撲結構,可用于長距離傳輸,在音視頻、雷達數據傳輸中廣泛使用。UDP協議在設計時優先保障數據帶寬需求,沒有復雜的重傳機制,適宜在數據采集的應用場景下使用。為保障足夠的數據帶寬,探測節點板卡開發千兆以太網接口,兼容百兆傳輸速率。
探測節點軟件總體方案如圖3所示,探測節點板卡實現了上位機與傳感器間的高速通信。通過DMA操作實現上位機與探測節點板卡的數據傳輸,板卡與傳感器通過以太網進行數據交互,以太網通信接口與PCIe通信接口間通過共享RAM的形式實現數據交互,通過TIME_SYN模塊實現多個傳感器的同步。

圖3 探測節點軟件架構示意圖
PCIe設備A的待發送的用戶數據經過事務層、數據鏈路層和物理層進行逐層的數據打包,然后以串行差分信號的方式傳輸給設備B;設備B接收數據的過程是數據發送的逆過程,將數據逐層進行拆包解析。
PCIe通信通過分散聚合式DMA實現,通過MGT高速串行接口實現板間通信;進行DMA數據傳輸時,上位機可通過H2C(Host to Card)、C2H(Card to Host)通道實現對用戶數據的讀寫,用戶數據一側支持AXI4-memory map及AXI4-Stream接口。當描述符完成或數據讀寫出錯時,板卡以中斷的形式告知上位機。AXI Interconnect IP核可以與任何AXI主設備或從設備進行連接,允許這些AXI設備在不同的時鐘域,有不同的接口寬度及不同的AXI子協議類型。可通過AXI Interconnect IP核實現1對N、N對1及M對N的AXI設備間的數據交互。
XDMA核心實現通過PCIe接口實現板間通信,AXI Interconnect核心實現AXI設備間的數據交互,AXI BRAM Controller可通過AXI接口實現對RAM的讀寫控制。設計方案中4塊RAM用于緩存4個傳感器采集到板卡的數據,另外4塊RAM用于緩存上位機發送至傳感器的控制指令。時鐘域劃分上,所有的AXI Interconnect核心以及RAM讀寫時鐘均采用XDMA核心輸出的axi_aclk。
主干網FPGA的軟件設計以以太網協議為依據進行。以太網幀格式中前導碼占8字節,7個連續的8’h55用于發送端及接收端設備數據的同步,1個8’hd5表示一個幀的開始。以太網幀首部包含各位8字節的目的MAC地址及源MAC地址,MAC地址是網卡中固化的唯一物理地址,占用2字節的類型用于標記上層協議的類型;FCS為幀校驗序列,以太網協議采用32bits的CRC校驗;包數據對于MAC層處理模塊而言是數據,其包含上層協議的首部及校驗,如IP首部及UDP首部。
用戶數據傳輸過程如圖4所示,數據發送時,在用戶自定義協議層添加用戶自定義頭部及CRC-32/MPEG-2校驗;“自上而下”依次添加UDP頭部、IP頭部及以太網頭部以及添加前導碼,整個過程稱作封包。接收數據是“自下而上”的過程,MAC層解析以太網頭部,并判斷數據幀目的MAC地址是否為本地MAC地址,并依據包類型交由不同模塊進行處理;由網絡層模塊、傳輸層模塊、用戶自定義協議模塊依次對相應首部進行解析判斷,將數據依次向上層進行提交,若所有判斷條件均滿足則將數據向應用層提交,若有條件不滿足則將數據丟棄,整個過程稱為解包。
依據以太網用戶數據傳輸過程,設計的探測節點主干網的軟件架構如圖5所示。1G/2.5G Ethernet PCS/PMA or SGMII IP核與MAC層通過GMII接口實現數據交互,依據參考模型進行FPGA軟件模塊設計,“自下而上”依次為MAC層處理模塊、LLC子層處理模塊、IP層處理、UDP層處理模塊及用戶自定義層處理模塊,另還開發了ARP數據處理模塊以及ICMP處理模塊。ARP(Address Resolution Protocol)地址解析協議能根據IP地址獲取物理地址(即MAC地址)。ICMP包含在IP數據報中,可用來確認網絡是否連通、主機是否可達,在系統開發調試中起不容忽視的作用。物理層單字節的編碼解碼通過1G/2.5G Ethernet PCS/PMA or SGMII IP核完成;MAC層處理模塊完成MAC地址的封裝及判斷,實現點對點通信;IP層處理模塊依據IP協議完成IP數據包的生成及解析,實現局域網間設備互聯;UDP層處理模塊區分不同的應用進程;另還根據需要自定義用戶層協議,以實現時間觸發通信機制,并在用戶層增加循環冗余校驗機制。下面將對數據包解析過程進行說明,數據包封裝是數據包解析的逆過程。

圖5 探測節點主干網軟件架構
激光雷達的同步可通過PPS脈沖同步的方法實現,也可基于用戶配置寫入協議采用IEEE1588時間同步方法實現。激光雷達可采用PPS脈沖同步方法對傳感器進行授時,GPS模塊連續向設備發送PPS同步脈沖信號以及GPRMC數據。
文獻[11]及文獻基于PPS脈沖實現多傳感器數據同步,采用此方法可以獲得較高的時間同步精度,但是因FPGA引腳電壓及電流無法滿足激光雷達的電平需求,需另外設計驅動芯片,增加了設計的復雜度。另外,需要額外的使用IO口來實現多激光雷達同步,會增加車輛布線復雜度。
IEEE1588中存在主時間、從時間以及中間節點三部分,各部分通過網絡連接彼此形成一個主從同步系統。基于IEEE1588協議將FPGA作為時間同步主節點,FPGA中TIME_SYN模塊產生時間戳的低字節段,發送控制模塊將上位機產生的時間戳的高字節結合起來完成時間同步包的組裝;另外上位機還可根據用戶配置協議將配置數據寫入探測節點緩存指令的RAM中,通過全雙工以太網完成對激光雷達的配置。
探測節點板卡通過以太網接口獲取激光雷達數據,將數據緩存在RAM中,上位機通過對幀計數的監測判斷數據是否更新,監測到數據更新后,上位機獲取數據進行運算及處理,圖6為上位機獲取激光雷達數據后繪制的激光雷達點云圖。

圖6 上位機激光雷達點云圖
基于IEEE1588協議以探測節點作為時間同步主節點對多個激光雷達進行授時。激光雷達的控制器不可修改,故通過主節點獲取的激光雷達的時間戳測試時間同步精度。對上位機獲取的時間戳數據進行觀察,在同一時刻通過PCIe讀取的多個通道時間差不會超過1s的前提下。在FPGA自定的以太網IP核中加入測試代碼,通過以太網獲取激光雷達時間戳后,當時間戳大于指定的毫秒、微妙計數器值則使觸發器中的測試信號電平翻轉,將各通道的測試信號連接到Integrated Logic Analyzer IP核,通過測試翻轉信號的相位差可得到時間同步精度。圖7為VIVADO的ILA時間同步精度測試截圖,經多次測試時間同步精度穩定在微妙級,提高激光雷達數據上傳頻率可獲得更精確的測量結果。

圖7 時間同步精度測試圖
在“CPU+FPGA”硬件架構下,完成了自定義IP核的開發,FPGA能夠將以太網口采集的傳感器數據通過PCIe接口送至上位機,上位機通過DMA操作能將數據配置數據通過以太網口實現傳感器配置。基于IEEE 1588協議并以FPGA板卡作為時間同步主節點,對多傳感器進行同步取得較好的時間同步效果,為多傳感器融合奠定了基礎。