【自动驾驶】13. Apollo交通信号灯感知
Apollo交通信號(hào)燈感知
本文檔詳細(xì)的介紹了Apollo2.0中交通信號(hào)感知模塊的工作原理。
簡介
交通信號(hào)燈感知模塊通過使用攝像頭提供精確全面的路面交通信號(hào)燈狀態(tài)。
通常情況下,交通信號(hào)燈有3種狀態(tài):
- 紅
- 黃
- 綠
然而當(dāng)信號(hào)燈不能正常工作時(shí),它可能是黑色的或者閃爍著紅燈或黃燈。有時(shí)候在攝像頭的視野內(nèi)找不到信號(hào)燈,從而導(dǎo)致無法正確檢測信號(hào)燈狀態(tài)。
為了覆蓋全部的情況,交通信號(hào)燈感知模塊提供了5種信號(hào)燈狀態(tài)輸出:
- 紅
- 黃
- 綠
- 黑
- 未知
該模塊的高精地圖功能反復(fù)的檢測車輛前方是否有信號(hào)燈出現(xiàn)。在給定車輛的位置后,可以通過查詢高精地圖獲取信號(hào)燈的邊界,并用邊界上的4個(gè)點(diǎn)來表示信號(hào)燈。如果存在信號(hào)燈,則信號(hào)燈位置信息將從世界坐標(biāo)系投射到圖片坐標(biāo)系。
Apollo已經(jīng)證明了僅僅使用一個(gè)固定視野的攝像頭無法識(shí)別所有的信號(hào)燈。存在這種限制的原因是:
- 感知范圍應(yīng)該大于100米
- 信號(hào)燈的高度和路口的寬度變化范圍很大
結(jié)果是Apollo2.0使用了2個(gè)攝像頭來擴(kuò)大感知范圍。
-
一個(gè)遠(yuǎn)距攝像頭,焦距是25毫米,被用來觀察前方遠(yuǎn)距離的信號(hào)燈。遠(yuǎn)距攝像頭捕獲的信號(hào)燈在圖片上展現(xiàn)的非常大而且容易被檢測。但是遠(yuǎn)距攝像頭的視野有限制,如果路線不夠直或者車輛太過于靠近信號(hào)燈,經(jīng)常無法拍攝到信號(hào)燈。
-
一個(gè)廣角攝像頭。焦距是6毫米,是對遠(yuǎn)距攝像頭視野不足的補(bǔ)充。
該模塊會(huì)根據(jù)當(dāng)前信號(hào)燈的投射狀態(tài)決定使用哪個(gè)攝像頭。雖然只有兩個(gè)攝像頭,但是該模塊的算法被設(shè)計(jì)的可以控制多個(gè)攝像頭。
下述圖片展示了使用遠(yuǎn)距攝像頭(上圖)和廣角攝像頭(下圖)檢測到信號(hào)燈的圖片。
數(shù)據(jù)管道
數(shù)據(jù)管道有兩個(gè)主要的部分,會(huì)在下面章節(jié)中介紹
- 預(yù)處理階段
- 信號(hào)燈投射
- 攝像頭選擇
- 圖像和信號(hào)燈緩存同步
- 處理階段
- 調(diào)整—提供精確的信號(hào)燈邊界盒
- 識(shí)別—提供每個(gè)邊界盒的顏色
- 修正—根據(jù)時(shí)間順序關(guān)系修正顏色
預(yù)處理階段
沒有必要在每一幀的圖像中去檢測信號(hào)燈。信號(hào)燈的變化頻率是很低的而且計(jì)算機(jī)的資源也有限。通常,從不同攝像頭輸入的圖像信息會(huì)幾乎同時(shí)的到達(dá),但是只有一個(gè)會(huì)進(jìn)入管道的處理階段。因此圖像的遴選和匹配是很必要的。
輸入輸出
本章節(jié)介紹了預(yù)處理階段的輸入輸出數(shù)據(jù)。輸入數(shù)據(jù)可以通過訂閱Apollo相關(guān)模塊數(shù)據(jù)來獲得,或者直接讀取本地的存儲(chǔ)文件。輸出數(shù)據(jù)被傳輸?shù)较乱粚拥奶幚黼A段。
輸入數(shù)據(jù)
-
可以通過訂閱以下topic來獲取不同攝像頭的圖像數(shù)據(jù):
- /apollo/sensor/camera/traffic/image_long
- /apollo/sensor/camera/traffic/image_short
-
定位信息,通過查詢以下topic獲得:
- /tf
-
高精地圖
-
校準(zhǔn)結(jié)果
輸出數(shù)據(jù)
- 被選擇的攝像頭輸出的的圖像信息
- 從世界坐標(biāo)系投射到圖像坐標(biāo)系的信號(hào)燈邊界盒
攝像頭選擇
使用一個(gè)唯一的ID和其邊界上的4個(gè)點(diǎn)來表示信號(hào)燈,每個(gè)點(diǎn)都是世界坐標(biāo)系中的3維坐標(biāo)點(diǎn)。
下例展示了一個(gè)典型的信號(hào)燈記錄信息signal info。給出車輛位置后,4個(gè)邊界點(diǎn)可以通過查詢高精地圖獲得。
signal info: id {id: "xxx" } boundary {point { x: ... y: ... z: ... }point { x: ... y: ... z: ... }point { x: ... y: ... z: ... }point { x: ... y: ... z: ... } }3維世界坐標(biāo)系中的邊界點(diǎn)隨后被投射到每個(gè)攝像頭圖像的2維坐標(biāo)系。對每個(gè)信號(hào)燈而言,遠(yuǎn)距攝像頭圖像上展示的4個(gè)投射點(diǎn)區(qū)域更大,這比廣角攝像頭更容易檢測信號(hào)燈。最后會(huì)選擇具有最長的焦距且能夠看到所有信號(hào)燈的攝像頭圖片作為輸出圖像。投射到該圖像上的信號(hào)邊界盒將作為輸出的邊界盒。
被選擇的攝像頭的ID和時(shí)間戳緩存在隊(duì)列中:
struct ImageLights {CarPose pose;CameraId camera_id;double timestamp;size_t num_signal;... other ... };至此,我們需要的所有信息包括定位信息、校準(zhǔn)結(jié)果和高精地圖。因?yàn)橥渡洳灰蕾囉趫D像的內(nèi)容,所以選擇可以在任何時(shí)間完成。在圖像信息到達(dá)時(shí)進(jìn)行選擇僅僅是為了簡單。而且,并不是圖像信息一到達(dá)就要進(jìn)行選擇,通常會(huì)設(shè)置選擇的時(shí)間間隔。
圖像同步
圖像信息包含了攝像頭ID和時(shí)間戳。攝像頭ID和時(shí)間戳的組合用來找到可能存在的緩存信息。如果能在緩存區(qū)找到和該圖像的攝像頭ID一樣且時(shí)間戳相差很小的緩存信息,則該圖像會(huì)被傳輸?shù)教幚黼A段。所有不合適的緩存信息會(huì)被丟棄。
處理階段
該階段分為3個(gè)步驟,每個(gè)步驟重點(diǎn)執(zhí)行一個(gè)任務(wù):
- 調(diào)整 — 在ROI中檢測信號(hào)燈邊界盒
- 識(shí)別 — 鑒別邊界盒的顏色
- 修正 — 根據(jù)信號(hào)燈顏色的時(shí)間順序關(guān)系修正顏色
輸入輸出
本章節(jié)介紹處理階段的輸入和輸出數(shù)據(jù)。輸入數(shù)據(jù)從預(yù)處理階段獲得,輸出數(shù)據(jù)作為鑒別信號(hào)燈的結(jié)果。
輸入數(shù)據(jù)
- 被選擇的攝像頭圖像信息
- 一組邊界盒信息
輸出數(shù)據(jù)
- 一組帶有顏色標(biāo)簽的邊界盒信息
調(diào)整
被定位信息、校準(zhǔn)信息和高精地圖信息影響的投射點(diǎn) 不是完全可靠的 。通過投射的信號(hào)燈位置計(jì)算的一個(gè)大的興趣區(qū)域(Region of Interest ROI)被用來確定信號(hào)燈精確的邊界盒。
在下述圖片中,藍(lán)色的長方形表示被投射的信號(hào)燈的邊界盒,實(shí)際上和信號(hào)燈的準(zhǔn)確位置有一定的偏差。大的黃色長方形是ROI。
信號(hào)燈檢測是一個(gè)常規(guī)的卷積神經(jīng)網(wǎng)絡(luò)檢測任務(wù),它接收帶有ROI信息的圖像作為輸入數(shù)據(jù),順序輸出邊界盒。輸出結(jié)果中的信號(hào)燈數(shù)量可能多于輸入數(shù)據(jù)。
Apollo會(huì)根據(jù)輸入信號(hào)燈的位置、形狀及檢測的評分選擇合適的信號(hào)燈。如果CNN在ROI內(nèi)找不到任何的信號(hào)燈,則輸入數(shù)據(jù)中的信號(hào)燈將被標(biāo)記為未知,且跳過剩下的兩個(gè)步驟。
識(shí)別
信號(hào)燈識(shí)別是一個(gè)常規(guī)的卷積神經(jīng)網(wǎng)絡(luò)鑒別任務(wù),它接收帶有ROI信息的圖像和一組邊界盒信息作為輸入數(shù)據(jù)。輸出數(shù)據(jù)是一個(gè)$4\times n$ vector, 表示每個(gè)邊界盒是黑色、紅色、黃色和綠色的概率。 當(dāng)且僅當(dāng)概率足夠大時(shí),有最大概率的類別會(huì)被識(shí)別為信號(hào)燈的狀態(tài)。否則信號(hào)燈狀態(tài)被設(shè)置為未知,表示狀態(tài)未確定。
修正
因?yàn)樾盘?hào)燈可能會(huì)閃爍或者被遮擋,并且識(shí)別階段也 并不是 完美的,輸出的信號(hào)燈狀態(tài)可能不是真正的狀態(tài)。修正信號(hào)燈狀態(tài)是很有必要的。
如果修正器接收到一個(gè)確定的信號(hào)燈狀態(tài)例如紅色或者綠色,則修正器保存該狀態(tài)并直接輸出。如果接收到黑色或者未知,修正器會(huì)檢測狀態(tài)保存列表。如果信號(hào)燈狀態(tài)已經(jīng)確定持續(xù)了一段時(shí)間,那么將保存的狀態(tài)輸出。否則將黑色或者未知輸出。
因?yàn)闀r(shí)間順序關(guān)系的存在,黃色只會(huì)在綠色之后紅色之前出現(xiàn),所以為了安全的考慮,在綠色出現(xiàn)之前任何紅色之后的黃色都會(huì)被設(shè)置為紅色。
總結(jié)
以上是生活随笔為你收集整理的【自动驾驶】13. Apollo交通信号灯感知的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【自动驾驶】16.计算机视觉:相机成像原
- 下一篇: 【c++】25.事件驱动的详解