自動(dòng)駕駛汽車激光雷達(dá)如何做到與GPS時(shí)間同步?
01 同步方案
激光雷達(dá)與GPS時(shí)間同步主要有三種方案,即PPS+GPRMC、PTP、gPTP
PPS+GPRMC
GNSS輸出兩條信息,一條是時(shí)間周期為1s的同步脈沖信號(hào)PPS,脈沖寬度5ms~100ms;一條是通過(guò)標(biāo)準(zhǔn)串口輸出GPRMC標(biāo)準(zhǔn)的時(shí)間同步報(bào)文。
同步脈沖前沿時(shí)刻與GPRMC報(bào)文的發(fā)送在同一時(shí)刻,誤差為ns級(jí)別,誤差可以忽略。GPRMC是一條包含UTC時(shí)間(精確到秒),經(jīng)緯度定位數(shù)據(jù)的標(biāo)準(zhǔn)格式報(bào)文。
PPS秒脈沖為物理電平輸出,接收及處理PPS信號(hào)的時(shí)間在ns級(jí)別,依舊可以忽略。但GPRMC數(shù)據(jù)一般通過(guò)波特率9600的串口發(fā)送,發(fā)送、接收、處理時(shí)間tx在ms級(jí)別,是時(shí)間同步的關(guān)鍵。
以下是使用PPS+GPRMC進(jìn)行時(shí)間同步的原理。
(1)設(shè)備收到PPS秒脈沖信號(hào)后,將內(nèi)部以晶振為時(shí)鐘源的系統(tǒng)時(shí)間里的毫秒及以下時(shí)間清零,并由此開(kāi)始計(jì)算毫秒時(shí)間。
(2)當(dāng)收到GPRMC數(shù)據(jù)后,提取報(bào)文里的時(shí)、分、秒、年、月、日UTC時(shí)間。
(3)將收到秒脈沖到解析出GPRMC中UTC時(shí)間所用的時(shí)間tx,與UTC整秒時(shí)間相加,同步給系統(tǒng)時(shí)間,至此已完成一次時(shí)間同步。下一秒再進(jìn)行相同的過(guò)程,每秒準(zhǔn)確校準(zhǔn)一次。
聰明的人可能已經(jīng)恍然大悟,激光雷達(dá)需要進(jìn)行時(shí)間同步,就做兩根線接上這兩個(gè)物理接口就妥了,這種方式是可以的,也是很多廠商在用的方案,但是PPS+GPRMC存在如下問(wèn)題。
(1)PPS是一個(gè)低功率的脈沖電平信號(hào),驅(qū)動(dòng)電流少的只有0.5mA,多的也就20mA,帶幾個(gè)同步節(jié)點(diǎn)(激光雷達(dá)和其他需要時(shí)間同步的節(jié)點(diǎn)),十幾個(gè)就很困難了。
(2)PPS是無(wú)屏蔽的單線脈沖信號(hào),十幾根PPS線穿梭在車內(nèi),極易受到車內(nèi)惡劣電磁環(huán)境的干擾,屆時(shí)根本無(wú)法區(qū)分出是干擾脈沖還是同步脈沖。
(3)GPRMC通過(guò)RS232串口發(fā)送同步報(bào)文,RS232是一種1對(duì)1的全雙工通信形式,也可以通過(guò)主從形式實(shí)現(xiàn)1對(duì)幾數(shù)據(jù)傳輸。但對(duì)十幾,實(shí)屬罕見(jiàn),只能通過(guò)試驗(yàn)驗(yàn)證到底可不可行。但至少線束工程師是打死不愿答應(yīng)的。
(4)當(dāng)時(shí)鐘源丟失的時(shí)候,所有需要時(shí)間同步的設(shè)備都一下子沒(méi)有了主心骨,每個(gè)小弟都可以自立門戶,沒(méi)有二當(dāng)家的及時(shí)站出來(lái),主持大局。這對(duì)功能安全要求極高的自動(dòng)駕駛系統(tǒng)來(lái)說(shuō),根本無(wú)法接受。
PTP
因此基于單純的PPS和GPRMC實(shí)現(xiàn)整個(gè)自動(dòng)駕駛系統(tǒng)的時(shí)間同步,具有理論可行性,但并不具有實(shí)際可操作性。
而基于網(wǎng)絡(luò)的高精度時(shí)間同步協(xié)議PTP(Precision Time Protocol,1588 V2),同步精度可以達(dá)到亞微秒級(jí)。這對(duì)于主干網(wǎng)絡(luò)為以太網(wǎng)的全域架構(gòu)來(lái)說(shuō),簡(jiǎn)直是萬(wàn)事具備,只欠各域控制器的硬件PHY芯片支持了。
PTP是一種主從式的時(shí)間同步系統(tǒng),采用硬件時(shí)間戳,因此可以大幅減少軟件處理時(shí)間。同時(shí)PTP可運(yùn)行在L2層(MAC層)和L4層(UDP層),運(yùn)行在L2層網(wǎng)絡(luò)時(shí),直接在MAC層進(jìn)行報(bào)文解析,不用經(jīng)過(guò)四層UDP協(xié)議棧,從而大幅減少協(xié)議棧駐留時(shí)間,進(jìn)一步提高時(shí)間同步精度,對(duì)于自動(dòng)駕駛系統(tǒng)來(lái)說(shuō)非常友善。
全域架構(gòu)下的一種架構(gòu)方案如下圖。
設(shè)備中運(yùn)行PTP協(xié)議的網(wǎng)絡(luò)端口稱為PTP端口,PTP主端口用來(lái)發(fā)布時(shí)間,PTP從端口用來(lái)接收時(shí)間。同時(shí)定義了三種時(shí)鐘節(jié)點(diǎn),邊界時(shí)鐘節(jié)點(diǎn)(BC,Boundary Clock)、普通時(shí)鐘節(jié)點(diǎn)(OC,Ordinary Clock)和透明時(shí)鐘節(jié)點(diǎn)(TC,Transparent clock)。
(1)邊界時(shí)鐘節(jié)點(diǎn)擁有多個(gè)PTP端口,其中一個(gè)用來(lái)同步上游設(shè)備時(shí)間,其余端口用來(lái)向下游設(shè)備發(fā)送時(shí)間。當(dāng)邊界時(shí)鐘節(jié)點(diǎn)的上游時(shí)間同步設(shè)備是GNSS接收機(jī)時(shí),此時(shí)的邊界時(shí)鐘節(jié)點(diǎn)就是一個(gè)主時(shí)鐘節(jié)點(diǎn)(最優(yōu)時(shí)鐘)。
(2)普通時(shí)鐘節(jié)點(diǎn)只有一個(gè)PTP端口,用來(lái)同步上游時(shí)鐘節(jié)點(diǎn)的時(shí)間。
(3)透明時(shí)鐘,人如其名,具有多個(gè)PTP端口,收到什么時(shí)間,轉(zhuǎn)發(fā)什么時(shí)間,不進(jìn)行協(xié)議解析,內(nèi)部不參與時(shí)間同步。PTP通過(guò)在主從設(shè)備之間交互同步報(bào)文,并記錄下報(bào)文發(fā)送時(shí)間,從而計(jì)算網(wǎng)絡(luò)傳輸延遲和主從設(shè)備間時(shí)鐘的偏差。
PTP定義了四條同步報(bào)文:Sync、Follow_Up、Delay_Req、Delay_Resp,精確同步過(guò)程如下。
(1)PTP主端口向從端口發(fā)送Sync報(bào)文,同步記錄下Sync發(fā)送的時(shí)間t1。從端口收到Sync報(bào)文后,記錄下收到的時(shí)間t2。
(2)緊接著主端口將t1時(shí)間放到Follow_Up報(bào)文發(fā)送給從端口,從端口收到此報(bào)文后就可以解析出t1,并由此得到第一個(gè)方程式:t1+網(wǎng)絡(luò)延時(shí)+時(shí)鐘偏差=t2。
(3)從端口向主端口發(fā)送Delay_Req報(bào)文,同步記錄下Delay_Req發(fā)送的時(shí)間t3。主端口收到報(bào)文后,記錄下收到的時(shí)間t4。
(4)緊接著主端口將t4時(shí)間放到Delay_Resp報(bào)文發(fā)送給從端口,從端口收到此報(bào)文后就可以解析出t4,并由此得到第一個(gè)方程式:t3+網(wǎng)絡(luò)延時(shí)-時(shí)鐘偏差=t4。兩個(gè)未知數(shù),兩個(gè)方程組,應(yīng)用初中數(shù)學(xué)知識(shí)可以解出:網(wǎng)絡(luò)延時(shí)=[(t2-t1)+(t4-t1)]/2,時(shí)鐘偏差=[(t2-t1)-(t4-t3)]/2。
gPTP
gPTP(generalized Precision Time Protocol,廣義精確時(shí)間同步協(xié)議),基于PTP(IEEE 1588v2)協(xié)議進(jìn)行了一系列優(yōu)化,形成了更具有針對(duì)性的時(shí)間同步機(jī)制,可以實(shí)現(xiàn)μs級(jí)的同步精度。
gPTP定義有兩種設(shè)備類型,Time-aware-end Station和Time-aware Bridge。每種設(shè)備都具有本地時(shí)鐘,本地時(shí)鐘都是通過(guò)晶振的振蕩周期進(jìn)行度量的,設(shè)備內(nèi)部硬件計(jì)數(shù)器負(fù)責(zé)對(duì)振蕩周期進(jìn)行計(jì)數(shù)。設(shè)備中用來(lái)發(fā)布時(shí)間同步報(bào)文的網(wǎng)絡(luò)端口稱為主端口,用來(lái)接收時(shí)間同步報(bào)文的端口稱為從端口。
(1)Time-aware-end Station,既可以作為主時(shí)鐘,也可以作為從時(shí)鐘。
(2)Time-aware Bridge,既可以作為主時(shí)鐘,也可以作為橋接設(shè)備,類似交換機(jī)。橋接類設(shè)備在收到gPTP報(bào)文后,會(huì)請(qǐng)報(bào)文搓個(gè)澡,然后再送出去。而報(bào)文在橋接設(shè)備內(nèi)搓澡消耗的時(shí)間,稱為駐留時(shí)間。gPTP要求橋接設(shè)備必須具有測(cè)量駐留時(shí)間的能力。
下圖展示了一個(gè)簡(jiǎn)單的gPTP系統(tǒng),包含一個(gè)時(shí)鐘源、1個(gè)主時(shí)鐘,2個(gè)橋接設(shè)備,4個(gè)從時(shí)鐘。主時(shí)鐘是系統(tǒng)內(nèi)的時(shí)間基準(zhǔn),一般具有更高精度的本地時(shí)鐘,同時(shí)需要能夠被高精度準(zhǔn)時(shí)鐘源授時(shí)。主時(shí)鐘在系統(tǒng)內(nèi)可以動(dòng)態(tài)分配,也可以預(yù)先分配(對(duì)于車載固定拓?fù)鋺?yīng)用場(chǎng)景,多采用預(yù)先分配的原則)。
gPTP中規(guī)定的主時(shí)鐘動(dòng)態(tài)分配機(jī)制為BMCA(Best Master Clock Algorithm,最佳主時(shí)鐘選擇算法)。系統(tǒng)上電喚醒之后,系統(tǒng)所有設(shè)備都可以通過(guò)發(fā)送一條報(bào)文來(lái)參與主時(shí)鐘競(jìng)選,報(bào)文中含有各自設(shè)備的時(shí)鐘信息。每一個(gè)參選設(shè)備都會(huì)比較自己的時(shí)鐘信息和其它設(shè)備的時(shí)鐘信息,并判斷是否具有優(yōu)勢(shì),如果不具有,則退出競(jìng)選,直到綜合能力最強(qiáng)的武林盟主誕生。
02 同步過(guò)程
gPTP定義有兩類報(bào)文,事件類型報(bào)文(包括Sync、Pdelay_Req、Pdelay_Resp三條)和一般類型報(bào)文(包括Follow_UP、Pdelay_Resp_Follow_UP二條)。gPTP定義設(shè)備工作在網(wǎng)絡(luò)七層模型中的第二層數(shù)據(jù)鏈路層的MAC(Media Acess Control,媒介訪問(wèn)控制)子層。
當(dāng)設(shè)備MAC層接收或發(fā)送事件類型報(bào)文時(shí),會(huì)觸發(fā)對(duì)硬件計(jì)數(shù)器進(jìn)行采樣,從而獲得時(shí)鐘振蕩周期計(jì)數(shù)值,結(jié)合時(shí)鐘振蕩頻率及基準(zhǔn)時(shí)間,可獲得此時(shí)的時(shí)間戳。而一般類型報(bào)文僅用來(lái)攜帶信息,不會(huì)觸發(fā)內(nèi)部硬件計(jì)數(shù)器的采樣操作。
時(shí)鐘偏差測(cè)量
gPTP定義的五條報(bào)文中,Sync和Follow_UP為一組報(bào)文,周期發(fā)送,主要用來(lái)測(cè)量時(shí)鐘偏差。Sync由主端口發(fā)送,在報(bào)文離開(kāi)主端口MAC層時(shí),觸發(fā)主端口記錄此時(shí)的時(shí)間戳t1。從端口MAC層收到Sync報(bào)文后會(huì)記錄此時(shí)的時(shí)間戳t2。隨后,主端口將t1值附到Follow_UP報(bào)文里發(fā)送給從端口。
如果沒(méi)有網(wǎng)絡(luò)傳輸延遲或延遲、可以忽略,則從端口將本地時(shí)鐘值加上時(shí)鐘偏差(t1-t2的值)就完成時(shí)間同步,也就沒(méi)有后面的碎碎念了。但是對(duì)于μs級(jí)時(shí)間同步精度的gPTP來(lái)說(shuō),傳輸延遲顯然無(wú)法視若不見(jiàn)。
傳輸延遲測(cè)量
gPTP采用P2P(Peer to Peer)的方法來(lái)測(cè)量傳輸延遲。在P2P方法中,測(cè)量的是相鄰設(shè)備間的傳輸延遲,報(bào)文不允許跨設(shè)備傳輸,這也就要求gPTP網(wǎng)絡(luò)內(nèi)的所有設(shè)備都需要支持gPTP功能。同時(shí)定義一組獨(dú)立的報(bào)文專門負(fù)責(zé)傳輸延遲測(cè)量,分別為周期發(fā)送的Pdelay_Req、Pdelay_Resp和Pdelay_Resp_Follow_UP。
從端口首先發(fā)送Pdelay_Req報(bào)文,標(biāo)志傳輸延遲測(cè)量的開(kāi)始,在報(bào)文離開(kāi)從端口MAC層時(shí),觸發(fā)從端口記錄此時(shí)的時(shí)間戳t3。主端口MAC層收到Pdelay_Req報(bào)文后會(huì)記錄此時(shí)的時(shí)間戳t4,隨后,主端口通過(guò)Pdelay_Resp報(bào)文將值t4發(fā)送給從端口,同時(shí)在Pdelay_Resp報(bào)文離開(kāi)主端口的MAC層時(shí),觸發(fā)主端口記錄此時(shí)的時(shí)間戳t5,從端口MAC層收到Pdelay_Resp報(bào)文后記錄此時(shí)的時(shí)間戳t6。隨后,相同的套路,主端口通過(guò)Pdelay_Resp_Follow_Up報(bào)文將值t5發(fā)送給從端口。至此,一次傳輸延遲測(cè)量過(guò)程已經(jīng)結(jié)束。在假設(shè)路徑傳輸延遲是對(duì)稱的前提下,可由如下公式計(jì)算相鄰設(shè)備間的傳輸延遲。
頻率同步
上文的傳輸延遲測(cè)量是基于從端口與主端口的時(shí)鐘振蕩頻率一致的前提下得到的。現(xiàn)在我們考慮一下如果主從端口時(shí)鐘振蕩頻率不一致的時(shí)候,會(huì)導(dǎo)致什么靈異事件發(fā)生。假設(shè)從端口的時(shí)鐘振蕩頻率是25MHz,則一個(gè)時(shí)鐘振蕩周期是40ns。主端口的時(shí)鐘振蕩頻率是100MHz,則一個(gè)時(shí)鐘時(shí)鐘振蕩周期是10ns。
假設(shè)在一次傳輸延遲測(cè)量過(guò)程中,從端口在t6和t3時(shí)刻記錄的振蕩周期差值若為200個(gè)振蕩周期。由于主端口的時(shí)鐘頻率是從端口的4倍,因此從端口收到t5和t4時(shí)刻的振蕩周期差值大概800個(gè)。以從端口的40ns一個(gè)時(shí)鐘振蕩周期為基準(zhǔn)進(jìn)行計(jì)算的話,傳輸延遲則為-24μs([200x40-800x40]/2)。傳輸不僅沒(méi)有延遲,反而提前知道了,從端口大仙無(wú)疑了。
除了主從端口時(shí)鐘振蕩頻率的先天不一致,溫度、老化等原因也會(huì)導(dǎo)致晶振振蕩頻率的不穩(wěn)定。為了解決頻率不同步的問(wèn)題,gPTP通過(guò)頻率同步來(lái)實(shí)現(xiàn)從端口對(duì)主端口的時(shí)鐘振蕩頻率同步。
頻率同步復(fù)用傳輸延遲測(cè)量過(guò)程的Pdelay_Resp和Pdelay_Resp_Follow_UP報(bào)文。通過(guò)采用兩組答復(fù),最終可以獲得t5,t6,t9,t10的值,由下面公式可得主從端口的頻率比。
主從端口頻率同步的情況下,頻率比等于1。如果大于1,說(shuō)明主端口走得快,如果小于1,說(shuō)明主端口走的慢。從端口根據(jù)頻率比的值,調(diào)整自己的時(shí)基,從而獲得正確的時(shí)間戳。