2019年9月4日 星期三

.自動駕駛多感測器感知的探索

Camera Radar Fusion Project with TI Automotive Processors


任何顏色車牌——都拍攝的清清楚楚!


Pony.ai 在多感測器感知上,累積了很多的經驗,尤其是今年年初在卡車上開始了新的嘗試。我們有不同的感測器配置,以及不同的場景,對多感測器融合的一些新的挑戰,有了更深刻的認識,今天把這些經驗,總結一下,分享給大家,與大家一起討論。


本次分享分為三部分:
  • 為什麼需要多感測器融合?
  • 感測器融合的一些先決條件
  • 如何做感測器融合?
為什麼需要多感測器融合?
首先,單一感測器在自動駕駛中,都有各自的挑戰,所以先瞭解下常用的感測器的挑戰是什麼:

1. Camera data


攝影機數據遇到的挑戰:

① 沒有深度資訊。

② 視場角有限,以卡車的感測器配置來說,需要比較多的攝影機,這裡用到了 6 個攝影機覆蓋了 270° 的視場角。

③ 攝影機受外界條件的影響也比較大,(上圖右下方)這是當車行駛到橋下時,由於背光,且光線變化比較大,導致無法辨識正前方的交通燈。

2. Lidar data


雷射雷達數據的,一個比較大的挑戰是感知範圍比較近,如右圖所示,感知範圍平均在 150m 左右,這取決於環境和障礙物的不同。


雷射雷達在角分辨度上遠遠不如攝影機,如上圖,有三條小狗在過馬路,在攝影機上可以清楚的看到,但是在雷射雷達上,採集到的點是比較少的,這樣的場景在每天複雜道路路測的時候,會經常遇到。


雷射雷達對環境的敏感度也是比較大的,上圖為 Pony 路測的時候經常遇到的,虛擬噪點的 Case,在車經過建築工地的時候,在圖像上可以看到並沒有任何的障礙物,但是在雷達上前面有很多的噪點,右邊是雨天中的測試,車輛行駛中濺起來的水花,在雷射雷達上都是有噪點的,如何去除這樣的噪點,是我們經常面臨的挑戰。

3. Radar data


毫米波雷達,本身的一個挑戰是沒有高度資訊,毫米波雷達能告訴你這個物體在哪個位置,但是不知道多高,這個 case 就是前面有一個比較高的指路牌,毫米波雷達知道這兒有個障礙物,但是不知道是懸空的。

4. Why sensor fusion


當看過了這些單一感測器,在自動駕駛中面臨的挑戰,自然會想到,做多感測器融合,進行感測器之間的取長補短,來幫助整個感知系統效果的提升。

這裡的例子是,如何利用多感測器來提升感知的探測距離,當障礙物距離 150m 左右時,雷射雷達的反射點,已經比較少了,但是這時毫米波雷達和攝影機還是比較穩定的。


當障礙物駛出 200m 的範圍,基本上沒有任何的雷射雷達反射點了,但是 200m 取決於自動駕駛車輛本身的車速是多少,200m 的感知距離還是必要的,這時只能透過毫米波雷達和攝影機,來提升對障礙物的感知距離,從圖中可以看到障礙物,還是可以穩定辨識出來的。

感測器融合的先決條件
1. 運動補償&時間同步
① Ego motion


為什麼做運動補償?在自動駕駛感測器感知過程中,感測器採集數據,一般都不是瞬時發生的,以雷射雷達為例,採集一圈數據需要 0.1s,在這 0.1s 內,本身車會發生一定的位移,障礙物也會發生一定的位移,如果我們不考慮這樣的位移的話,我們檢測出來的位置就會不準確。

位移有倆種,第一種就是車自身的位移 Ego motion。右邊畫了一個示意圖,虛線部分可以認為是世界坐標系,紅色的點代表一個靜態的障礙物,它在坐標系中有一個穩定的坐標(5,5),藍色部分代表車自己的坐標系是局部坐標系,(4,0)為這個坐標系的原點,在 t+1 時刻,這個坐標系移動到了(6,0)的位置,車沿著 X 方向向前移動了 2,在 t 時刻在車自身的坐標系下,障礙物的坐標是(1,5),在 t+1 是時刻,則是(-1,5)。

如果不做車自身運動的補償,靜止的物體在 2 幀之間,測量的局部坐標是不一樣的,就會產生錯誤的速度,因此,要去補償車本身的位移,做自身的 Motion compensation 運動補償。這個問題比較簡單,因為車是有比較準確的定位資訊的,它會提供這倆個時刻,車本身的姿態差距,我們可以利用姿態差,比較容易的補償車移動了多少,那我們就可以知道這個障礙物其實是沒有移動的。

② Motion from others


第二種要考慮的是運動物體在感測器採集的時間段內,運動物體發生的位移,相對於自身運動補償,這是一個更難的 case,首先快速移動的物體,在雷射點雲裡,很可能會被掃到倆次,大家可以看下紅圈內,尾部會有拖影。

所以我們如何想辦法消除對方車的 Motion,也是要考慮的。解決的方式有很多,現在雷射雷達本身從硬體上也會有些配置,來舒解這樣的現象,簡單解釋下,當你用多個雷射雷達在自動駕駛車輛時,可以讓雷射雷達按照同樣的方式一起轉,在某一個特定的時段,特定的方向,應該掃到同樣的東西,這樣來減少快速移動的物體產生拖影這樣的問題。

③ 時間同步


在很多自動駕駛車輛感測器中,大部分支持 GPS 時間戳的時間同步方法。這個方法比較簡單,如果感測器硬體,支援這些時間同步的方法,拿到感測器數據的時候,數據包中就會有全局的時間戳,這樣的時間戳以 GPS 為基準,非常方便。


但是,時間戳查詢數據,會有一個比較明顯的問題,舉個例子,圖中有三個數據,三個感測器和時間軸,不同感測器是以不同頻率來採集數據的,以感測器 2 為例,在 T1 時刻,感測器 2 有一個數據,在這個時刻,想知道對應的感測器 1 和感測器 3 的數據是多少,肯定需要去查找,查找的方式是找對應的感測器數據和傳感器 2 時間差最近的數據包,然後拿過來用,這就取決於查的時候,數據包的時間和 T1 時刻感測器 2 數據包的時間到底差多少,如果差距比較大,本身障礙物都是在移動的,這樣誤差會比較大。


然後就有了第二種時間同步的方法,來舒解剛剛說的這種現象。就是主動數據同步的方法,比如以雷射雷達作為觸發其它感測器的源頭,當雷射雷達轉到某個角度時,觸發那個角度的攝影機,這樣就可以大大減少時間差的問題,如果把這套時間方案做到硬件中,做到比較低的誤差,那麼對齊的效果比較好。如上圖所示,這時雷射雷達的數據,就很好的和攝影機的數據結合在了一起。


剛才說到如果一個自動駕駛車輛,用了多個雷射雷達,雷射雷達之間如何同步,減少掃到同樣車在不同時間這樣的問題,velodyne 是我們常用的一個品牌,支持一種 Phase Lock 功能,能夠保證在某一時刻,所有的雷射雷達的角度,都可以根據 Phase Lock 的配置,在固定的角度附近。

這樣如果用倆個前向的雷射雷達,都設置一個角度,在同一時刻,掃到的東西應該是類似的,這樣一個快速行駛的車,被掃到 2 次的機率就會減少,當然這個辦法也不能完全解決問題,比如有個人和我們的雷射雷達以同樣的頻率一起轉,那麼在雷射雷達掃描的點雲中,人一直會出現,所以還要透過軟體的方法,設置的一些規則或者模型來想辦法剔除。

2. 感測器標定
接下來是另外一個比較大的話題:Sensor Calibration 感測器標定。這裡主要是指感測器外參的標定。


感測器外參其實就是剛體旋轉,因為物體上的倆個點,在經過旋轉和平移之後,兩個點之間的 3D 位置是不會變的,所以叫剛體旋轉,在自動駕駛和機器人上,剛體旋轉還是比較常見的。感測器外參的標定,就是要找到這樣的一個剛體旋轉,可以把一個感測器的數據,和另一個對齊。

相當於把一個感測器測量的數據,從其本身的坐標系,透過剛體旋轉,轉到另一個感測器坐標系,這樣就可以進行數據融合了。

上圖中,左邊為圖像,中間為雷達,如果有一個比較好的外參工具,可以把 3D 的點投射到 2D 圖像上,所有的障礙物的點都可以對應上,相當於把 2D 上的像素都加上了深度的估計。這樣在圖像品質並不是很高的情況下,可以通過這樣的方式把資訊補回來。

感測器的標定一般有兩種思路,第一種是有雷射雷達的感測器標定,第二種是無雷射雷達的感測器標定,之所以這麼分,是因為雷射雷達採集的數據是完整的 3D 資訊,空間中的 ( x,y,z ) 都是準確的,並不會有資訊的丟失,而攝影機得到的數據,可以認為是極坐標系下的坐標,沒有深度和角度,而毫米波雷達是沒有高度的。

所以,如果有這樣的感測器能夠提供完全的 ( x,y,z ) 坐標,以此為參照物,其他感測器和雷射雷達做綁定的話,會更容易和更準確。Pony 是有雷射雷達的,所以今天主要講有雷射雷達的傳感器標定方法。

① Multi-Lidar Calibration


首先講下多雷射雷達是如何標定的,上圖可以看到正好用到的是兩個前向雷射雷達,這兩個雷射雷達在前向 180° 是有比較大的覆蓋區域,如果對雷射雷達之間的旋轉和平移,沒有比較好的估計,當把兩張雷射雷達的點雲放在一起,進行感知處理的時候,在紅框位置會發現,存在比較大的分隔(黃線和藍線分別代表兩個前向雷射雷達),這種情況肯定是不想遇到的,所以需要把多個雷射雷達做比較準確的標定。


標定的方法是已知的,非常好解決的問題,因為雷射雷達本身是有完全的 3D 資訊,解決這樣兩個數據集匹配的問題,就是 ICP(Iterative Closest Point)更新式最近點方法。

這個方法有很多的變種,感興趣的同學可以百度或者 Google 搜索下。

② Camera Lidar Calibration


另外一個就是攝影機和雷射雷達之間的標定。攝影機本身是沒有距離資訊的,那麼如何去做標定?同樣雷射雷達是有 3D 資訊的,可以透過標定的方式,把雷射雷達投到圖像的坐標系中,建立圖像的像素點,和雷射雷達投影後的點之間的匹配,然後透過某種優化方程,來解決這樣一個匹配問題。

舉一個簡單的例子,比如現在要選取一系列,雷射雷達檢測出來的候選點,如何選這些點呢?這些點一定是在圖像上,比較容易能夠辨識出來的邊界點。

選取方法也比較簡單,因為雷射雷達有距離資訊,只需要找相鄰兩個雷射點之間的距離差,就可以判斷這樣一個點是不是邊界點,我們可以輕易的選出這樣的候選點,透過這樣的投影方式,紅框是我們要求的標定參數,K 矩陣為相機本身的內參,透過這個數學關係,我們可以把剛才 3D 中檢測的候選點,投到 2D 上,上圖中的 X 就是投射後的位置。


我們可以根據 3D 投影點和 2D 檢測的邊界,進行匹配,然後根據他們之間的距離比對程度,建立這樣一個優化方程,然後解這樣一個優化問題,來估計出 Calibration 的參數。


大家如果感興趣可以參考這篇 paper:Automatic Online Calibration of Cameras and Lasers,詳細的講述了其中的數值原理,可以看到綠色的是 3D 點投射到圖像上,是一些邊界點候選的區域,如果有一個比較好的標定結果,這些邊界點會比較好的和圖像匹配起來。

3. 感測器視場角
接下來看下感測器不同視場角,帶來的融合問題。


這裡有一個簡單的示意圖,假設在這個位置上有兩個雷射雷達,它們有各自不同的視場角,但是前方有個障礙物 A ,剛好在感測器 2 的視場角內,把障礙物 B 完全遮擋了,障礙物 B 只出現在一個感測器檢測的視場角內部,這帶來的問題是:我們到底該不該相信,這裡存在一個障礙物?這是比較常見的問題,需要我們經過不斷的路測,來完善。

如何做感測器融合?
1. Camera Lidar Fusion


首先講一下攝影機和雷射雷達融合,方法 1 之前大概講過,就是說雷射雷達有 ( x,y,z ) 比較明確的 3D 觀測,透過標定參數,透過攝影機本身的內參,就可以把 3D 點投到圖像上,圖像上的某些像素,就會打上深度資訊,然後可以做基於圖像的分割或者 Deep Learning Model。

需要注意的是,多感測器的時候,視場角可能會不一樣,可能會造成噪點或者漏點,這裡比較推薦的方法,是把攝影機和雷達安裝在一起,越近越好。


另一個比較直觀的方法,是否能將 2D 檢測出來的障礙物,直接投影到 3D,然後生成這樣的 3D 障礙物,這種方法,在做很多的假設條件下(比如障礙物的大小,地面是否平整),也是可以做的,如上圖,攝影機的內參,車的位置高度,都是已知的,這時在 2D 上辨識出的每個幀的障礙物,都可以還原成 3D 在攝影機坐標系下的一條射線,然後找這條射線在 3D 坐標系下和平面的交點,就可以估計出 2D 障礙物在 3D 上的距離。


上圖為 Pony 在建築工地旁採集的數據,可看到這些路障,都是直接生成到 3D 的(圖中有個漏點,也是我們還需要努力提高的)。

2. Radar Lidar Fusion


至於毫米波雷達和雷射雷達的融合方式就更簡單了。因為在笛卡爾坐標系下,它們都有完整的 ( x,y ) 方向的資訊,那麼在普適的笛卡爾坐標系下,做針對於距離的融合,而且毫米波雷達還會測速,對障礙物速度也是有一定觀測的,然後雷射雷達透過位置的追蹤,也會得到障礙物速度的估計,這些速度的資訊也可以用來做融合,幫助篩選錯誤的比對候選集。


這是 Pony 雷射雷達和毫米波雷達融合的效果,紅圈裡的障礙物是 Radar 補充的。


當然,不同感測器之間融合的特例還是很多的,比如雷射雷達和毫米波雷達融合的時候,可以看到,這個場景是前方有比較高的路牌時,毫米波雷達會在這個位置產生障礙物,恰好雷射雷達也有噪音,因為恰好前方有車,這時在牌子底下也會產生噪點,所以雷射雷達和毫米波雷達,都在這個地方檢測出來,本不應該出現的障礙物,這時兩個感測器都告訴你,前方有個障礙物,只有攝影機說前方只有一個障礙物,這時該怎麼辦?(如果想瞭解 Pony 具體如何解決的,歡迎大家加入 Pony,我會告訴你答案 o(_)o)

總結


總結來說,每個感測器都有自己的一些問題,感測器融合就是說,我們要把這些感測器結合起來做取長補短,提升整個感知系統的精度和召回度,今天就分享到這裡,謝謝大家。

作者介紹
劉博聰, Pony.ai Tech lead,公司創始成員。CMU 電子與電腦工程碩士,作為 Pony.ai 創始成員之一,參與了多個無人車模組的設計開發工作,目前主要負責感知系統技術研發。曾就職於百度美國研究院,負責自動駕駛研發;曾就職於 Qualcomm 聖迭戈總部,參與 QNX 車載晶片的嵌入式開發項目。
AKD 寰楚專業級全系列監控設備

沒有留言:

張貼留言