梁曉妮 楚朋志 肖雄子彥
(上海交通大學(xué)學(xué)生創(chuàng)新中心,上海 200240)
近年隨著無人駕駛技術(shù)突飛猛進(jìn),商業(yè)化落地也在不斷推進(jìn)中[1]。無人駕駛技術(shù)在教學(xué)領(lǐng)域中的應(yīng)用也越來越廣泛。目前,存在的無人駕駛教學(xué)解決方案中,大致分為兩類,一類基于攝像頭捕捉的圖像,通過計算機(jī)視覺、神經(jīng)網(wǎng)絡(luò)、圖像處理等方法,對智能車的行進(jìn)路線進(jìn)行規(guī)劃[2];一類是基于激光雷達(dá)、SLAM[3]等技術(shù),通過構(gòu)建特征地圖等方法,對小車行進(jìn)軌跡進(jìn)行決策。本文提出一種基于計算機(jī)視覺與圖像處理的方法,實時規(guī)劃智能車的行進(jìn)路線。
智能車自主巡線系統(tǒng)硬件主要包括視覺傳感器模塊、計算模塊、控制模塊、電機(jī)驅(qū)動模塊、電源模塊及PC機(jī)等6部分硬件單元。
視覺傳感器模塊由車載前視攝像頭采集軌道圖像,圖像分辨率為1 280×720,并配有實時圖傳模塊,可將采集到的路面圖像傳回電腦端,方便監(jiān)測與修正。
計算模塊采用的是Nvidia的Jetson Nano開發(fā)板,搭載Ubuntu16.04系統(tǒng)及其自帶的ROS操作系統(tǒng),將處理好的控制信號(包括角度、速度信息)通過ROS系統(tǒng)提供的API傳給控制模塊(下位機(jī)),下位機(jī)發(fā)出PWM信號控制電機(jī)(速度)、舵機(jī)(角度),從而控制智能車行進(jìn)。整個系統(tǒng)外接20 W電源模塊負(fù)責(zé)給以上四個模塊供電。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖Fig.1 System hardware structure
PC機(jī)可以通過wifi與上位機(jī)相連,完成數(shù)據(jù)傳輸、手動控制、二次開發(fā)等操作。另外,在本教學(xué)案例中配套有地圖軌道,智能車需在地圖軌道中巡線行駛。
視覺巡線系統(tǒng)軟件主要是由python語言基于OpenCV庫實現(xiàn)。教學(xué)用智能小車配有對應(yīng)的地圖軌道,地圖軌道整體路徑如圖2所示。
圖2 整體路徑軌道圖Fig.2 Overall path of track map
全程50米,設(shè)有多處彎道,可根據(jù)需要添加紅綠燈、限速標(biāo)識、停車標(biāo)識等交通標(biāo)識模擬真實路況。車載攝像頭采集的前視圖像如圖3~圖5所示。
圖3 前視圖-直行軌道Fig.3 Front view-straight map
圖4 前視圖-彎道Fig.4 Front view-curve map
圖5 配有紅綠燈的軌道Fig.5 The map with traffic light
本方案的目標(biāo)是實現(xiàn)車道線自動識別,通過PID控制算法自動巡航,同時,具備紅綠燈識別功能。
根據(jù)前視圖中車道線顏色與背景色有明顯差異的特點(diǎn),設(shè)計了以下車道線識別流程。
圖6 車道線識別流程圖Fig.6 Lane line recognition flow
首先,讀入攝像頭拍攝的前視圖像,圖像分辨率為1 280×720。由于車載攝像頭位置固定,故可截取圖像中下部分固定區(qū)域作為興趣區(qū)域(Region of Interest)重點(diǎn)處理,從而排除背景板、障礙物等諸多干擾因素。將該區(qū)域得到的車道線的中心點(diǎn),作為小車的移動目標(biāo)點(diǎn)。ROI如圖7所示:
圖7 前視圖ROI選取Fig.7 ROI selection of front view
選定觀察區(qū)后,由于車道線具有較為明顯的顏色特征,可以通過設(shè)定顏色閾值區(qū)間進(jìn)行圖像二值化,從而過濾出黃色車道線區(qū)域。二值化結(jié)果如圖8所示,采用[0,160,160]~[80,255,255]的閾值范圍對黃色區(qū)域進(jìn)行分割。
圖8 黃色車道線提取結(jié)果Fig.8 Extraction result of yellow lane line
提取出車道線區(qū)域后,需要進(jìn)一步對車道線中心點(diǎn)進(jìn)行判定。本文采用初步估計加分情況增強(qiáng)檢測的方法進(jìn)行精確定位。初步估計采用二值化后白色區(qū)域的橫坐標(biāo)方向投影均值作為最初的中心點(diǎn)判定值,投影均值在圖像右半邊則判定為右車道線中心點(diǎn),反之,則為左車道線中心點(diǎn)。左右車道線中心點(diǎn)提取結(jié)果如圖9所示,綠色代表左車道線中心點(diǎn),紅色代表右車道線中心點(diǎn)。
圖9 初步估計判定中心點(diǎn)坐標(biāo)Fig.9 Preliminary estimation of lane line central point
但這種方法在轉(zhuǎn)彎、車身偏移等僅有一側(cè)車道線時,存在車道線左右混淆、單車道線檢測為雙車道線的不足,導(dǎo)致車輛無法繼續(xù)行駛。本文采用分情況增強(qiáng)檢測方法來增加檢測的魯棒性,具體步驟為:(1)若兩側(cè)車道線區(qū)域都檢測失敗,則用固定左右車道線點(diǎn)進(jìn)行補(bǔ)充。(2)若只檢測出左側(cè)車道線,則用左側(cè)車道線加上車道線間距對右車道線中心點(diǎn)位置進(jìn)行預(yù)測。(3)若只檢測出右側(cè)車道線,則用右側(cè)車道線減去車道線間距預(yù)測左車道線中心點(diǎn)位置。(4)車道線間距值在每次檢測出左車道線與右車道線時進(jìn)行更新。通過以上四種情況的增強(qiáng)檢測,對于路況中的轉(zhuǎn)彎、車身偏移等情況,都能得到準(zhǔn)確的修正。但在急轉(zhuǎn)彎的情況下,由雙車道線變?yōu)閱诬嚨谰€,且車道線橫向跨越較大,只依據(jù)檢測出的黃色車道線中心位置位于圖像左半邊還是右半邊來判別左右屬性,容易產(chǎn)生左右顛倒誤判,如圖10~圖12所示。
圖10 第一幀:黃色車道中心點(diǎn)位于圖像右側(cè)Fig.10 Frame 1:center point of the yellow lane on the right
圖11 第二幀:黃色車道分布在圖像左、右側(cè),出現(xiàn)兩個中心點(diǎn)的誤判Fig.11 Frame 2:yellow lane is distributed on both left and right,lead to misjudgment of two central points
圖12 第三幀:黃色車道位于圖像左半邊,誤判為左側(cè)車道線中心點(diǎn)Fig.12 Frame 3:yellow lane is based on the left,misjudged as left central point
對于這種“乾坤大挪移”的情況,采取與上一幀左右中心點(diǎn)比較判別的方法進(jìn)行修正。具體方法為記錄前一時刻車道中心點(diǎn)位置及左右屬性,當(dāng)新檢測出的車道線中心點(diǎn)和前一時刻的同側(cè)車道線距離過遠(yuǎn)卻離對側(cè)車道線距離較近,則認(rèn)為左右誤判,予以糾正。以圖11的綠色點(diǎn)修正過程為例:綠色點(diǎn)與圖10中紅色點(diǎn)減去車道間距得到的左側(cè)車道線中心點(diǎn)距離過大,且與圖10紅色點(diǎn)距離較近,故認(rèn)為綠色點(diǎn)為誤判,糾正為右側(cè)車道線(改為紅色)。通過這種方法,修正結(jié)果如圖13,ROI區(qū)域的黃色部分位于圖像右半邊,判為右側(cè)車道線中心點(diǎn),圖14為下一幀圖像,中心點(diǎn)雖位于圖像左側(cè),但糾正為右車道中心點(diǎn)。
圖13 第一幀:黃色車道中心點(diǎn)位于圖像右側(cè)Fig.13 Frame 1:center point of the yellow lane on the right
圖14 第二幀:糾正左半部分檢測出的中心點(diǎn)為右車道中心點(diǎn)Fig.14 Frame 2:correct central point of left image to right lane central point
通過以上幾種分情況檢測方法,有效的增強(qiáng)彎道場景檢測的準(zhǔn)確性與魯棒性。檢測出左右車道線中心點(diǎn)后,采用PID算法對智能車進(jìn)行行駛控制。PID算法具有算法簡單、可靠性高、魯棒性好等優(yōu)點(diǎn),廣泛應(yīng)用于過程控制系統(tǒng)中。PID算法中P代表“比例”控制,“I”代表消除靜態(tài)誤差的“積分”控制,“D”代表“微分”控制。P、I、D的系數(shù)需要根據(jù)實際取值范圍進(jìn)行調(diào)試。
圖15 PID控制算法流程圖Fig.15 PID control flow
為了更真實地模擬生活中的復(fù)雜場景,在智能車巡線行駛過程中增加了紅綠燈識別,當(dāng)檢測到紅燈與黃燈,減速停車,綠燈則繼續(xù)前進(jìn)。本系統(tǒng)采用圖像處理的方法進(jìn)行紅綠燈的識別與檢測,具體流程如圖16所示。
圖16 紅綠燈識別流程圖Fig.16 Traffic light recognition flow
由于智能車總是從距紅綠燈一定距離開始識別,所以紅綠燈出現(xiàn)在圖像中的位置相對固定,選取右上角固定區(qū)域作為興趣區(qū),以達(dá)到減少計算量及去除背景的目的。在興趣區(qū)內(nèi)分別使用紅、黃、綠三種顏色模板對圖像進(jìn)行二值化。由于反光、亮度等原因,會存在多個區(qū)域落在同一顏色范圍的情況,將面積最大的區(qū)域判定為紅綠燈的亮燈區(qū),其顏色為對應(yīng)模板的顏色。依據(jù)這個原則,通過提取二值化圖像的輪廓,按輪廓面積排序,選出面積最大的區(qū)域作為該顏色區(qū),并用輪廓的boundingRect[4]作為該區(qū)域的檢測結(jié)果。檢測結(jié)果如圖17、圖18所示。
圖17 綠燈識別結(jié)果圖Fig.17 Recognition result of green light
圖18 紅燈識別結(jié)果圖Fig.18 Recognition result of red light
本文所闡述方法過程簡單、易于實現(xiàn),在特定軌道中有較好的識別效果。對應(yīng)用圖像處理方法解決巡線、紅綠燈識別等問題有借鑒價值。若使用其他軌道或真實路面,二值化閾值、興趣區(qū)的選擇都需要按需調(diào)整,以達(dá)到最佳效果。后續(xù)可添加限速標(biāo)識、停車標(biāo)識等復(fù)雜路況信息,啟發(fā)學(xué)生進(jìn)行復(fù)雜路況標(biāo)識識別、避障等拓展研究。