楊壯濤,朱紀(jì)洪,劉兆沛,李猛,文善賢,陳俊賢
(1.廣西大學(xué)機(jī)械工程學(xué)院,廣西 南寧 530004;2.清華大學(xué)精密儀器系;3.清華大學(xué)計(jì)算機(jī)系,北京 100084)
機(jī)動(dòng)車的需求量和購(gòu)買量在不斷提升,與此同時(shí)頻發(fā)的交通事故嚴(yán)重威脅人們的生命財(cái)產(chǎn)安全。自動(dòng)駕駛技術(shù)的實(shí)現(xiàn)依賴于車輛對(duì)自身及周圍環(huán)境情況的采集及獲取,因此實(shí)現(xiàn)多傳感器的數(shù)據(jù)融合極其重要。各個(gè)傳感器間具有統(tǒng)一時(shí)間基準(zhǔn)是實(shí)現(xiàn)各傳感器數(shù)據(jù)融合的基礎(chǔ)。
對(duì)多個(gè)通道數(shù)據(jù)進(jìn)行采集,有采用單片機(jī)、DSP等串行微處理器實(shí)現(xiàn)的方案,因?yàn)樘幚砥髦械某绦虿捎么刑幚頇C(jī)制,適用于傳感器數(shù)量不多、數(shù)據(jù)量不大,同步要求不高的應(yīng)用場(chǎng)景?;跀?shù)字電路的FPGA具有并行處理優(yōu)勢(shì),文獻(xiàn)基于FPGA對(duì)多達(dá)24路磁異常數(shù)據(jù)進(jìn)行采集,但是僅保證指令同時(shí)發(fā)送而不設(shè)計(jì)時(shí)間同步機(jī)制,隨著時(shí)間推移各傳感器間的時(shí)間基準(zhǔn)可能會(huì)存在較大偏差。基于FPGA結(jié)合PPS進(jìn)行多傳感器同步可較容易的獲得較高的時(shí)間同步精度,華中科技大學(xué)的文獻(xiàn)[1]、文獻(xiàn)[2]及文獻(xiàn)[3]基于PPS進(jìn)行多傳感器數(shù)據(jù)融合,具有較高的時(shí)間同步精度,但是基于PPS實(shí)現(xiàn)需保證控制電平符合激光雷達(dá)等傳感器的電平需求,需進(jìn)行額外的驅(qū)動(dòng)電路設(shè)計(jì)及增加布線,另外因無(wú)人車車載設(shè)備集成度高,對(duì)同步信號(hào)可能產(chǎn)生較大電磁干擾。
為保障數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性,本設(shè)計(jì)采用高帶寬的PCIe通信實(shí)現(xiàn)探測(cè)板卡與上位機(jī)的通信;為實(shí)現(xiàn)多通道并行處理,采用基于數(shù)字電路的FPGA作為開(kāi)發(fā)平臺(tái);為降低各通道間的耦合度,開(kāi)發(fā)了以太網(wǎng)協(xié)議棧并封裝為IP核;為實(shí)現(xiàn)多個(gè)傳感器間時(shí)間同步,分析了IEEE 1588協(xié)議,并以探測(cè)節(jié)點(diǎn)板卡作為主節(jié)點(diǎn)設(shè)計(jì)了時(shí)間同步機(jī)制。
采集系統(tǒng)采用“FPGA+CPU”的異構(gòu)硬件平臺(tái),數(shù)據(jù)同步采集系統(tǒng)架構(gòu)如圖1所示。FPGA實(shí)現(xiàn)多傳感器數(shù)據(jù)的采集,并作為時(shí)間同步主節(jié)點(diǎn)對(duì)多個(gè)傳感器進(jìn)行同步。計(jì)算機(jī)基于FPGA提交的數(shù)據(jù)繪制激光雷達(dá)點(diǎn)云圖、完成目標(biāo)探測(cè)識(shí)別及無(wú)人車路徑規(guī)劃等任務(wù),并產(chǎn)生控制指令發(fā)送至車輛控制系統(tǒng),由車輛控制系統(tǒng)指控執(zhí)行機(jī)構(gòu)完成無(wú)人車自主行駛、自主越障等任務(wù)。計(jì)算機(jī)與FPGA板卡通過(guò)PCIe接口進(jìn)行通信,F(xiàn)PGA板卡與傳感器間采用以太網(wǎng)實(shí)現(xiàn)通信。在時(shí)間同步方面,以FPGA作為時(shí)間同步主節(jié)點(diǎn),基于IEEE1588協(xié)議對(duì)激光雷達(dá)進(jìn)行授時(shí),另外可基于用戶配置寫入?yún)f(xié)議對(duì)多個(gè)激光雷達(dá)進(jìn)行配置。因FPGA板卡主要實(shí)現(xiàn)探測(cè)數(shù)據(jù)的同步采集,以下敘述稱探測(cè)節(jié)點(diǎn)。
圖1 多通道同步采集系統(tǒng)設(shè)計(jì)框架
為增加設(shè)計(jì)方案的可移植性,降低硬件成本,本方案采用“核心板+底板”的實(shí)現(xiàn)方式。FPGA選用Xilinx公司的XC7A200TFBG676-2,此芯片有豐富的邏輯資源,LUT資源高達(dá)133.8K個(gè);IO口高達(dá)400個(gè),可與大量外設(shè)進(jìn)行交互。相對(duì)應(yīng)的核心板選擇米聯(lián)客MA704A,底板設(shè)計(jì)如下,為實(shí)現(xiàn)與激光雷達(dá)、攝像頭等多個(gè)傳感器進(jìn)行數(shù)據(jù)交互,采用通信速率可達(dá)1Gbps的千兆以太網(wǎng)接口。上位機(jī)需實(shí)時(shí)對(duì)各傳感器數(shù)據(jù)進(jìn)行解算,因此需采用通信速率更高的通信接口將多通道以太網(wǎng)數(shù)據(jù)實(shí)時(shí)上傳至上位機(jī),選用PCIe-X4接口來(lái)實(shí)現(xiàn)??紤]試驗(yàn)數(shù)據(jù)記錄需要底板設(shè)計(jì)了TF卡槽,對(duì)重要的參數(shù)進(jìn)行記錄,以方便后續(xù)對(duì)試驗(yàn)結(jié)果進(jìn)行整理分析。串口通信應(yīng)用廣泛,在通信速率要求不高的應(yīng)用場(chǎng)景中,可滿足探測(cè)節(jié)點(diǎn)與其他控制器的通信需求。為方便項(xiàng)目調(diào)試,設(shè)計(jì)了多個(gè)LED燈及GPIO口。另外,設(shè)計(jì)了JTAG程序下載接口及供電電路;在使用FPGA的MGT高速接口時(shí),需要設(shè)計(jì)低抖動(dòng)的時(shí)鐘發(fā)生電路。探測(cè)節(jié)點(diǎn)硬件方案如圖2所示。
圖2 探測(cè)節(jié)點(diǎn)硬件方案示意圖
PCIe總線一般用于計(jì)算機(jī)與外圍設(shè)備互連,是第三代高性能IO總線,規(guī)范定義了其基本結(jié)構(gòu),包含根組件、交換器以及端節(jié)點(diǎn)設(shè)備。探測(cè)節(jié)點(diǎn)和上位機(jī)通過(guò)金手指連接,在X4模式下有4對(duì)差分信號(hào)發(fā)送管腳和4對(duì)差分信號(hào)接收管腳,為pcie_mgt_txp/n[3:0]及pcie_mgt_rxp/n[3:0]。參考時(shí)鐘clk_pcie_p/n頻率為100MHZ,由上位機(jī)板卡通過(guò)金手指差分時(shí)鐘管腳提供。上位機(jī)主板與探測(cè)節(jié)點(diǎn)板卡之間需進(jìn)行直流電壓隔離,通過(guò)在數(shù)據(jù)發(fā)送端添加直流耦合電容的方式來(lái)實(shí)現(xiàn)。探測(cè)節(jié)點(diǎn)板卡pcie_mgt_rxp/n[3:0]的電容已經(jīng)在主機(jī)板卡上添加,節(jié)點(diǎn)板卡只需為pcie_mgt_rxp/n[3:0]在靠近金手指處添加耦合電容即可。金手指數(shù)據(jù)傳輸通道與FPGA高速接口MGT相連,F(xiàn)PGA的GTX以Quad為單位進(jìn)行劃分,每個(gè)Quad包含4個(gè)lane。
以太網(wǎng)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)五種。其關(guān)鍵參數(shù)如表1所示。
表1 以太網(wǎng)接口參數(shù)匯總表
首先,進(jìn)行多通道數(shù)據(jù)采集需采用多個(gè)網(wǎng)口,需考慮節(jié)省IO資源;其次,采用SGMII接口后期可升級(jí)采用光通信,相比傳統(tǒng)采用電壓信號(hào)進(jìn)行通信的方式光通信具有較強(qiáng)的抗電磁干擾能力,另外光通信還能夠減輕設(shè)備質(zhì)量,因此本文選用SGMII接口。
相比采用Verilog硬件描述語(yǔ)言進(jìn)行連線的方式,探測(cè)節(jié)點(diǎn)軟件開(kāi)發(fā)在VIVADO的Block Design中完成,連線更加簡(jiǎn)潔。PCIe有兩種數(shù)據(jù)傳輸方式,PIO及DMA。PIO(Programmed Input-Output,PIO)每一次傳輸都通過(guò)CPU執(zhí)行IO端指令來(lái)實(shí)現(xiàn)。DMA(Direct Memory Access, DMA)數(shù)據(jù)傳輸由DMA控制器完成,幾乎不占用CPU資源,相較于PIO來(lái)說(shuō)具有更高的數(shù)據(jù)吞吐量。常用于端點(diǎn)設(shè)備中的DMA傳輸方式可分為總線主控式和分散聚合式,總線主控式DMA要求系統(tǒng)開(kāi)辟物理地址連續(xù)的內(nèi)存空間,且每次傳輸完成后均需要處理器重新進(jìn)行配置,適用于少量單塊數(shù)據(jù)傳輸。分散聚合式DMA通過(guò)描述符鏈表實(shí)現(xiàn),將主機(jī)中分散的內(nèi)存空間與描述符鏈表的映射關(guān)系映射到端節(jié)點(diǎn)設(shè)備的內(nèi)存中。在多通道數(shù)據(jù)同步采集的應(yīng)用場(chǎng)景下,且考慮后期需將攝像頭數(shù)據(jù)接入多通道探測(cè)節(jié)點(diǎn)板卡,本文采用分散聚合式DMA進(jìn)行數(shù)據(jù)傳輸實(shí)現(xiàn)上位機(jī)與探測(cè)節(jié)點(diǎn)板卡的數(shù)據(jù)傳輸,以保障數(shù)據(jù)傳輸速率及實(shí)時(shí)性。
以太網(wǎng)通信具有靈活的拓?fù)浣Y(jié)構(gòu),可用于長(zhǎng)距離傳輸,在音視頻、雷達(dá)數(shù)據(jù)傳輸中廣泛使用。UDP協(xié)議在設(shè)計(jì)時(shí)優(yōu)先保障數(shù)據(jù)帶寬需求,沒(méi)有復(fù)雜的重傳機(jī)制,適宜在數(shù)據(jù)采集的應(yīng)用場(chǎng)景下使用。為保障足夠的數(shù)據(jù)帶寬,探測(cè)節(jié)點(diǎn)板卡開(kāi)發(fā)千兆以太網(wǎng)接口,兼容百兆傳輸速率。
探測(cè)節(jié)點(diǎn)軟件總體方案如圖3所示,探測(cè)節(jié)點(diǎn)板卡實(shí)現(xiàn)了上位機(jī)與傳感器間的高速通信。通過(guò)DMA操作實(shí)現(xiàn)上位機(jī)與探測(cè)節(jié)點(diǎn)板卡的數(shù)據(jù)傳輸,板卡與傳感器通過(guò)以太網(wǎng)進(jìn)行數(shù)據(jù)交互,以太網(wǎng)通信接口與PCIe通信接口間通過(guò)共享RAM的形式實(shí)現(xiàn)數(shù)據(jù)交互,通過(guò)TIME_SYN模塊實(shí)現(xiàn)多個(gè)傳感器的同步。
圖3 探測(cè)節(jié)點(diǎn)軟件架構(gòu)示意圖
PCIe設(shè)備A的待發(fā)送的用戶數(shù)據(jù)經(jīng)過(guò)事務(wù)層、數(shù)據(jù)鏈路層和物理層進(jìn)行逐層的數(shù)據(jù)打包,然后以串行差分信號(hào)的方式傳輸給設(shè)備B;設(shè)備B接收數(shù)據(jù)的過(guò)程是數(shù)據(jù)發(fā)送的逆過(guò)程,將數(shù)據(jù)逐層進(jìn)行拆包解析。
PCIe通信通過(guò)分散聚合式DMA實(shí)現(xiàn),通過(guò)MGT高速串行接口實(shí)現(xiàn)板間通信;進(jìn)行DMA數(shù)據(jù)傳輸時(shí),上位機(jī)可通過(guò)H2C(Host to Card)、C2H(Card to Host)通道實(shí)現(xiàn)對(duì)用戶數(shù)據(jù)的讀寫,用戶數(shù)據(jù)一側(cè)支持AXI4-memory map及AXI4-Stream接口。當(dāng)描述符完成或數(shù)據(jù)讀寫出錯(cuò)時(shí),板卡以中斷的形式告知上位機(jī)。AXI Interconnect IP核可以與任何AXI主設(shè)備或從設(shè)備進(jìn)行連接,允許這些AXI設(shè)備在不同的時(shí)鐘域,有不同的接口寬度及不同的AXI子協(xié)議類型??赏ㄟ^(guò)AXI Interconnect IP核實(shí)現(xiàn)1對(duì)N、N對(duì)1及M對(duì)N的AXI設(shè)備間的數(shù)據(jù)交互。
XDMA核心實(shí)現(xiàn)通過(guò)PCIe接口實(shí)現(xiàn)板間通信,AXI Interconnect核心實(shí)現(xiàn)AXI設(shè)備間的數(shù)據(jù)交互,AXI BRAM Controller可通過(guò)AXI接口實(shí)現(xiàn)對(duì)RAM的讀寫控制。設(shè)計(jì)方案中4塊RAM用于緩存4個(gè)傳感器采集到板卡的數(shù)據(jù),另外4塊RAM用于緩存上位機(jī)發(fā)送至傳感器的控制指令。時(shí)鐘域劃分上,所有的AXI Interconnect核心以及RAM讀寫時(shí)鐘均采用XDMA核心輸出的axi_aclk。
主干網(wǎng)FPGA的軟件設(shè)計(jì)以以太網(wǎng)協(xié)議為依據(jù)進(jìn)行。以太網(wǎng)幀格式中前導(dǎo)碼占8字節(jié),7個(gè)連續(xù)的8’h55用于發(fā)送端及接收端設(shè)備數(shù)據(jù)的同步,1個(gè)8’hd5表示一個(gè)幀的開(kāi)始。以太網(wǎng)幀首部包含各位8字節(jié)的目的MAC地址及源MAC地址,MAC地址是網(wǎng)卡中固化的唯一物理地址,占用2字節(jié)的類型用于標(biāo)記上層協(xié)議的類型;FCS為幀校驗(yàn)序列,以太網(wǎng)協(xié)議采用32bits的CRC校驗(yàn);包數(shù)據(jù)對(duì)于MAC層處理模塊而言是數(shù)據(jù),其包含上層協(xié)議的首部及校驗(yàn),如IP首部及UDP首部。
用戶數(shù)據(jù)傳輸過(guò)程如圖4所示,數(shù)據(jù)發(fā)送時(shí),在用戶自定義協(xié)議層添加用戶自定義頭部及CRC-32/MPEG-2校驗(yàn);“自上而下”依次添加UDP頭部、IP頭部及以太網(wǎng)頭部以及添加前導(dǎo)碼,整個(gè)過(guò)程稱作封包。接收數(shù)據(jù)是“自下而上”的過(guò)程,MAC層解析以太網(wǎng)頭部,并判斷數(shù)據(jù)幀目的MAC地址是否為本地MAC地址,并依據(jù)包類型交由不同模塊進(jìn)行處理;由網(wǎng)絡(luò)層模塊、傳輸層模塊、用戶自定義協(xié)議模塊依次對(duì)相應(yīng)首部進(jìn)行解析判斷,將數(shù)據(jù)依次向上層進(jìn)行提交,若所有判斷條件均滿足則將數(shù)據(jù)向應(yīng)用層提交,若有條件不滿足則將數(shù)據(jù)丟棄,整個(gè)過(guò)程稱為解包。
依據(jù)以太網(wǎng)用戶數(shù)據(jù)傳輸過(guò)程,設(shè)計(jì)的探測(cè)節(jié)點(diǎn)主干網(wǎng)的軟件架構(gòu)如圖5所示。1G/2.5G Ethernet PCS/PMA or SGMII IP核與MAC層通過(guò)GMII接口實(shí)現(xiàn)數(shù)據(jù)交互,依據(jù)參考模型進(jìn)行FPGA軟件模塊設(shè)計(jì),“自下而上”依次為MAC層處理模塊、LLC子層處理模塊、IP層處理、UDP層處理模塊及用戶自定義層處理模塊,另還開(kāi)發(fā)了ARP數(shù)據(jù)處理模塊以及ICMP處理模塊。ARP(Address Resolution Protocol)地址解析協(xié)議能根據(jù)IP地址獲取物理地址(即MAC地址)。ICMP包含在IP數(shù)據(jù)報(bào)中,可用來(lái)確認(rèn)網(wǎng)絡(luò)是否連通、主機(jī)是否可達(dá),在系統(tǒng)開(kāi)發(fā)調(diào)試中起不容忽視的作用。物理層單字節(jié)的編碼解碼通過(guò)1G/2.5G Ethernet PCS/PMA or SGMII IP核完成;MAC層處理模塊完成MAC地址的封裝及判斷,實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信;IP層處理模塊依據(jù)IP協(xié)議完成IP數(shù)據(jù)包的生成及解析,實(shí)現(xiàn)局域網(wǎng)間設(shè)備互聯(lián);UDP層處理模塊區(qū)分不同的應(yīng)用進(jìn)程;另還根據(jù)需要自定義用戶層協(xié)議,以實(shí)現(xiàn)時(shí)間觸發(fā)通信機(jī)制,并在用戶層增加循環(huán)冗余校驗(yàn)機(jī)制。下面將對(duì)數(shù)據(jù)包解析過(guò)程進(jìn)行說(shuō)明,數(shù)據(jù)包封裝是數(shù)據(jù)包解析的逆過(guò)程。
圖5 探測(cè)節(jié)點(diǎn)主干網(wǎng)軟件架構(gòu)
激光雷達(dá)的同步可通過(guò)PPS脈沖同步的方法實(shí)現(xiàn),也可基于用戶配置寫入?yún)f(xié)議采用IEEE1588時(shí)間同步方法實(shí)現(xiàn)。激光雷達(dá)可采用PPS脈沖同步方法對(duì)傳感器進(jìn)行授時(shí),GPS模塊連續(xù)向設(shè)備發(fā)送PPS同步脈沖信號(hào)以及GPRMC數(shù)據(jù)。
文獻(xiàn)[11]及文獻(xiàn)基于PPS脈沖實(shí)現(xiàn)多傳感器數(shù)據(jù)同步,采用此方法可以獲得較高的時(shí)間同步精度,但是因FPGA引腳電壓及電流無(wú)法滿足激光雷達(dá)的電平需求,需另外設(shè)計(jì)驅(qū)動(dòng)芯片,增加了設(shè)計(jì)的復(fù)雜度。另外,需要額外的使用IO口來(lái)實(shí)現(xiàn)多激光雷達(dá)同步,會(huì)增加車輛布線復(fù)雜度。
IEEE1588中存在主時(shí)間、從時(shí)間以及中間節(jié)點(diǎn)三部分,各部分通過(guò)網(wǎng)絡(luò)連接彼此形成一個(gè)主從同步系統(tǒng)?;贗EEE1588協(xié)議將FPGA作為時(shí)間同步主節(jié)點(diǎn),F(xiàn)PGA中TIME_SYN模塊產(chǎn)生時(shí)間戳的低字節(jié)段,發(fā)送控制模塊將上位機(jī)產(chǎn)生的時(shí)間戳的高字節(jié)結(jié)合起來(lái)完成時(shí)間同步包的組裝;另外上位機(jī)還可根據(jù)用戶配置協(xié)議將配置數(shù)據(jù)寫入探測(cè)節(jié)點(diǎn)緩存指令的RAM中,通過(guò)全雙工以太網(wǎng)完成對(duì)激光雷達(dá)的配置。
探測(cè)節(jié)點(diǎn)板卡通過(guò)以太網(wǎng)接口獲取激光雷達(dá)數(shù)據(jù),將數(shù)據(jù)緩存在RAM中,上位機(jī)通過(guò)對(duì)幀計(jì)數(shù)的監(jiān)測(cè)判斷數(shù)據(jù)是否更新,監(jiān)測(cè)到數(shù)據(jù)更新后,上位機(jī)獲取數(shù)據(jù)進(jìn)行運(yùn)算及處理,圖6為上位機(jī)獲取激光雷達(dá)數(shù)據(jù)后繪制的激光雷達(dá)點(diǎn)云圖。
圖6 上位機(jī)激光雷達(dá)點(diǎn)云圖
基于IEEE1588協(xié)議以探測(cè)節(jié)點(diǎn)作為時(shí)間同步主節(jié)點(diǎn)對(duì)多個(gè)激光雷達(dá)進(jìn)行授時(shí)。激光雷達(dá)的控制器不可修改,故通過(guò)主節(jié)點(diǎn)獲取的激光雷達(dá)的時(shí)間戳測(cè)試時(shí)間同步精度。對(duì)上位機(jī)獲取的時(shí)間戳數(shù)據(jù)進(jìn)行觀察,在同一時(shí)刻通過(guò)PCIe讀取的多個(gè)通道時(shí)間差不會(huì)超過(guò)1s的前提下。在FPGA自定的以太網(wǎng)IP核中加入測(cè)試代碼,通過(guò)以太網(wǎng)獲取激光雷達(dá)時(shí)間戳后,當(dāng)時(shí)間戳大于指定的毫秒、微妙計(jì)數(shù)器值則使觸發(fā)器中的測(cè)試信號(hào)電平翻轉(zhuǎn),將各通道的測(cè)試信號(hào)連接到Integrated Logic Analyzer IP核,通過(guò)測(cè)試翻轉(zhuǎn)信號(hào)的相位差可得到時(shí)間同步精度。圖7為VIVADO的ILA時(shí)間同步精度測(cè)試截圖,經(jīng)多次測(cè)試時(shí)間同步精度穩(wěn)定在微妙級(jí),提高激光雷達(dá)數(shù)據(jù)上傳頻率可獲得更精確的測(cè)量結(jié)果。
圖7 時(shí)間同步精度測(cè)試圖
在“CPU+FPGA”硬件架構(gòu)下,完成了自定義IP核的開(kāi)發(fā),F(xiàn)PGA能夠?qū)⒁蕴W(wǎng)口采集的傳感器數(shù)據(jù)通過(guò)PCIe接口送至上位機(jī),上位機(jī)通過(guò)DMA操作能將數(shù)據(jù)配置數(shù)據(jù)通過(guò)以太網(wǎng)口實(shí)現(xiàn)傳感器配置?;贗EEE 1588協(xié)議并以FPGA板卡作為時(shí)間同步主節(jié)點(diǎn),對(duì)多傳感器進(jìn)行同步取得較好的時(shí)間同步效果,為多傳感器融合奠定了基礎(chǔ)。