葛亞明,胡一博,雷喬治,陳浩耀
(1.哈爾濱工業(yè)大學(xué)(深圳) 實(shí)驗(yàn)與創(chuàng)新實(shí)踐教育中心,廣東 深圳 518055;2.哈爾濱工業(yè)大學(xué)(深圳) 機(jī)電工程與自動(dòng)化學(xué)院,廣東 深圳 518055)
智能網(wǎng)聯(lián)汽車是汽車發(fā)展的主要方向,無人駕駛技術(shù)是智能網(wǎng)聯(lián)汽車的重要組成部分,是體現(xiàn)汽車產(chǎn)業(yè)核心競(jìng)爭(zhēng)能力的重要指標(biāo)[1-5]。本創(chuàng)新實(shí)驗(yàn)課從當(dāng)前無人駕駛技術(shù)研究的熱點(diǎn)、難點(diǎn)中提煉教學(xué)內(nèi)容,讓學(xué)生了解無人駕駛技術(shù)國(guó)內(nèi)外發(fā)展現(xiàn)狀,全面掌握無人駕駛技術(shù)的整體技術(shù)框架和技術(shù)要點(diǎn),包括攝像頭、激光雷達(dá)、陀螺儀等傳感器在無人駕駛技術(shù)中的使用方法與數(shù)據(jù)處理方法,無人駕駛技術(shù)中的車輛控制技術(shù)和系統(tǒng)決策機(jī)制,以及通信、感知、控制、導(dǎo)航等技術(shù)的交叉融合[6-10]等。這不僅能讓學(xué)生初步掌握無人駕駛技術(shù)的相關(guān)理論和實(shí)現(xiàn)方法,還能提高學(xué)生的研究興趣,培養(yǎng)動(dòng)手能力和創(chuàng)新能力,為學(xué)生將來的進(jìn)一步發(fā)展和就業(yè)奠定基礎(chǔ)。該課程旨在提升學(xué)生對(duì)人工智能、機(jī)械、檢測(cè)、控制等交叉學(xué)科知識(shí)的綜合運(yùn)用能力,同時(shí)給學(xué)生提供一個(gè)可以自由創(chuàng)作、自由發(fā)揮,且不失趣味的實(shí)驗(yàn)平臺(tái)。課程采用團(tuán)隊(duì)合作方式,不同專業(yè)、不同年級(jí)學(xué)生的搭配與合作,不僅能促進(jìn)各自專業(yè)知識(shí)的互補(bǔ)式學(xué)習(xí),更有可能迸發(fā)出意想不到的新思路和新創(chuàng)意。
基于以上課程建設(shè)理念,本文從無人駕駛系統(tǒng)的硬件設(shè)計(jì)、軟件設(shè)計(jì)、教學(xué)實(shí)踐效果等方面進(jìn)行詳細(xì)闡述。
圖1 為無人駕駛車設(shè)計(jì)雛形。希望學(xué)生理解系統(tǒng)的硬件架構(gòu),以及無人駕駛車所使用的主要傳感器。軟件選擇在ROS(robot operating system)下開發(fā),以便能方便地處理各類傳感器數(shù)據(jù),能夠輕松地使用不同語(yǔ)言及不同功能的代碼,并快速調(diào)用各節(jié)點(diǎn)來實(shí)現(xiàn)所需的功能。該車不僅能完成無人駕駛技術(shù)中的一些主要功能,還能實(shí)現(xiàn)室內(nèi)環(huán)境的同步定位與地圖構(gòu)建(SLAM),以及自主導(dǎo)航等功能。在圖1 的雛形設(shè)計(jì)基礎(chǔ)上,學(xué)生可以自由設(shè)計(jì)底盤硬件結(jié)構(gòu),利用各類傳感器實(shí)現(xiàn)自己的無人駕駛車設(shè)計(jì)及控制。
圖1 無人駕駛車設(shè)計(jì)雛形
無人駕駛系統(tǒng)主要由電腦、STM32、雙目攝像頭、激光雷達(dá)、陀螺儀等組成,如圖2 所示。電腦作為上位機(jī)總控單元,可以完成系統(tǒng)的導(dǎo)航、避障、通信等功能,并作為顯示及操作機(jī)構(gòu),完成程序的修改與裝載、導(dǎo)航的顯示、航跡路徑規(guī)劃等功能;路由器完成與其他機(jī)器人的通信,每臺(tái)車都有自己的局域網(wǎng)Wi-Fi,實(shí)驗(yàn)時(shí)需要選擇好對(duì)應(yīng)的車;STM32 作為系統(tǒng)的底層控制,完成采集陀螺儀、超聲波、左右輪編碼器等傳感器數(shù)據(jù),以及控制電機(jī)轉(zhuǎn)動(dòng)的功能;陀螺儀用于測(cè)量車轉(zhuǎn)動(dòng)的角度;超聲波主要用于檢測(cè)玻璃等透明障礙物。
圖2 系統(tǒng)硬件架構(gòu)框圖
本實(shí)驗(yàn)使用Linux 16.04 操作系統(tǒng),ROS 是連接該操作系統(tǒng)和開發(fā)者所寫程序的機(jī)器人操作系統(tǒng),它提供類似于操作系統(tǒng)的功能,如硬件抽象、通信架構(gòu)、軟件分發(fā)、包管理等。ROS 下可以同時(shí)運(yùn)行多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)可以單獨(dú)設(shè)計(jì),ROS 將提供一個(gè)框架來管理這些節(jié)點(diǎn),作為他們之間通信的橋梁[11-12]。
軟件系統(tǒng)的構(gòu)建主要包括STM32 控制無人車移動(dòng)、車道線識(shí)別、紅綠燈識(shí)別、交通避障等。此外,還給學(xué)生提出了以下拓展研究點(diǎn):車輛自主導(dǎo)航,車與車之間的控制決策、通信及復(fù)雜環(huán)境識(shí)別等。以命名為dashgo_ws 的ROS 工程為例,系統(tǒng)軟件的主要結(jié)構(gòu)和功能如圖3 所示。
圖3 ROS 工程的主要結(jié)構(gòu)和功能
STM32 模塊與電腦是通過串口在規(guī)定的通信協(xié)議下進(jìn)行通信的。STM32 模塊將采集的陀螺儀、超聲波、左右輪電機(jī)編碼器等傳感器數(shù)據(jù)傳輸給電腦,并且接收電腦傳輸過來的左右輪電機(jī)速度數(shù)據(jù),控制電機(jī)轉(zhuǎn)動(dòng)。在dashgo_ws 工程中,dashgo_driver 包負(fù)責(zé)與STM32 通信并控制無人車移動(dòng),因此需要先啟動(dòng)dashgo_driver 驅(qū)動(dòng),然后再啟動(dòng)鍵盤控制程序,來控制車的移動(dòng)。通信交互過程如圖4 所示。鍵盤控制節(jié)點(diǎn)會(huì)向速度主題發(fā)布ROS 消息,包括機(jī)器人中心的線速度和角速度,驅(qū)動(dòng)節(jié)點(diǎn)監(jiān)聽到/cmd_vel 中有新消息后,將其轉(zhuǎn)成左右輪電機(jī)速度,并下發(fā)給STM32,從而控制無人車移動(dòng)。
圖4 控制無人車移動(dòng)的通信圖
使用ZED 攝像頭對(duì)交通環(huán)境中的車道線進(jìn)行識(shí)別,將圖像原來的RGB 圖像空間轉(zhuǎn)換為HSV 圖像空間。如果不進(jìn)行顏色識(shí)別,可以采用HSL 通道。然后再將H 通道進(jìn)行二值化處理,對(duì)車道線截面進(jìn)行分析,統(tǒng)計(jì)出各個(gè)截面中點(diǎn)的橫坐標(biāo),取其中中點(diǎn)數(shù)目最多的橫坐標(biāo)作為車道線位置,進(jìn)行PID 調(diào)節(jié)。圖5 為編寫lineonly.cpp 程序的流程。
圖5 對(duì)車道線圖像處理過程框圖
使用深度攝像頭識(shí)別紅綠燈。由于紅燈和綠燈的特征差別較小,直接進(jìn)行紅綠燈識(shí)別會(huì)存在較大誤差。為了提高紅綠燈識(shí)別的效果與效率,將紅綠燈識(shí)別分為紅綠燈位置識(shí)別和紅綠燈顏色識(shí)別兩個(gè)部分。
實(shí)驗(yàn)采用AdaBoost算法進(jìn)行紅綠燈的位置識(shí)別[13],共有兩個(gè)步驟。第一,初始化訓(xùn)練數(shù)據(jù)的權(quán)值分布。假設(shè)有n 個(gè)樣本數(shù)據(jù),則初始化所有樣本權(quán)值為1/n。第二,訓(xùn)練所有的弱分類器。在具體訓(xùn)練過程中,如果某個(gè)樣本已經(jīng)被準(zhǔn)確地分類,那么在構(gòu)造下一個(gè)訓(xùn)練集時(shí),它的權(quán)重就被降低;相反,如果某個(gè)樣本點(diǎn)沒有被準(zhǔn)確地分類,那么它的權(quán)重就得到提高,同時(shí)得到弱分類器對(duì)應(yīng)的話語(yǔ)權(quán)。更新權(quán)值后的樣本集被用于訓(xùn)練下一個(gè)分類器,整個(gè)訓(xùn)練過程如此迭代地進(jìn)行下去。
依據(jù)圖片和圖片中紅綠燈的位置截取出紅綠燈,目的是去除圖片中的背景;再將紅綠燈圖片轉(zhuǎn)換到HSV 空間,并依據(jù)一定的范圍進(jìn)行二值化;然后對(duì)包含紅綠區(qū)域的紅綠燈的二值圖像進(jìn)行輪廓提取,并確定輪廓大小,根據(jù)輪廓大小及其位置,確定紅綠燈的顏色。為了提高顏色識(shí)別準(zhǔn)確率,需要確定連續(xù)多幀圖像中紅綠燈的顏色,當(dāng)連續(xù)多幀圖像的顏色大于一定閾值則認(rèn)為是顏色判斷成功,并輸出結(jié)果。
將訓(xùn)練后的樣本文件拷貝到指定目錄下,并在紅綠燈識(shí)別代碼trafficlight.cpp 中修改存放樣本的實(shí)際路徑,即可測(cè)試紅綠燈的識(shí)別程序。
激光雷達(dá)用于測(cè)試周圍環(huán)境,判斷相對(duì)于車的哪個(gè)角度及多遠(yuǎn)距離處有障礙物。首先要對(duì)激光雷達(dá)數(shù)據(jù)進(jìn)行處理,選取一個(gè)扇形區(qū)域,設(shè)定最小和最大弧度為-1.05 rad 和1.05 rad,檢測(cè)的最小和最大距離為0.1~1.8 m,該設(shè)定值可以根據(jù)環(huán)境在程序中調(diào)整。然后訂閱雷達(dá)消息,對(duì)每一個(gè)角度激光的返回距離值進(jìn)行閾值判斷,當(dāng)滿足條件的激光數(shù)達(dá)到一定閾值時(shí),則認(rèn)定為有障礙物。將檢測(cè)到障礙物的結(jié)果話題發(fā)布到車道識(shí)別程序。如果檢測(cè)到障礙物,發(fā)布讓車速度為零的話題,反之,使車按正常情況行駛。按照以上方法編寫避障程序obscontrol.cpp,待后續(xù)調(diào)用。
基于Ubuntu16.04 系統(tǒng),并以ROS 機(jī)器人操作系統(tǒng)作為上位機(jī),在ROS 下很容易將車道線識(shí)別、紅綠燈識(shí)別、避障等程序節(jié)點(diǎn)調(diào)用起來,對(duì)車進(jìn)行控制。學(xué)生基于給定的車和DEMO 程序,通過調(diào)試來實(shí)現(xiàn)運(yùn)行效果。對(duì)于在調(diào)試過程中出現(xiàn)的各種問題,要逐一解決。解決問題的過程也是熟悉和掌握系統(tǒng)軟硬件架構(gòu)的過程。
圖1 的初級(jí)版無人駕駛車,是兩輪差速結(jié)構(gòu)底盤,運(yùn)行速度受到一定限制,靈活性也不高。在此基礎(chǔ)上,學(xué)生自行設(shè)計(jì)了如圖6 的全向輪結(jié)構(gòu)底盤。
該車尺寸為400mm×400mm,雙層結(jié)構(gòu),下層放置電池、STM32 等,上層為懸掛避震器、固連分流板、電調(diào)等,以便最大限度地利用空間。上板上面可搭載攝像頭、激光雷達(dá)等傳感器,以實(shí)現(xiàn)基于SLAM 的無人駕駛。
圖6 全向輪底盤的無人駕駛車實(shí)物圖
在實(shí)現(xiàn)車道線識(shí)別的基礎(chǔ)上,提出車輛變道和急轉(zhuǎn)彎控制兩個(gè)拓展研究點(diǎn),讓學(xué)生自行研究。車輛變道的實(shí)現(xiàn),是在車輛行駛到一定位置時(shí),識(shí)別標(biāo)志物,并結(jié)合定時(shí)函數(shù)讓車在一段時(shí)間內(nèi)重復(fù)這一動(dòng)作(如賦予一定的角速度),從而使車偏離某一軌道,進(jìn)入另一軌道,實(shí)現(xiàn)變道。在急轉(zhuǎn)彎(特別是尖角)時(shí),由于霍夫變換求取出的斜率極不穩(wěn)定,所以減小了攝像頭讀取范圍,減小了遇到尖角時(shí)斜率不穩(wěn)定的時(shí)間,同時(shí)在進(jìn)、出急轉(zhuǎn)彎區(qū)域貼兩個(gè)紅色標(biāo)志物,讓車進(jìn)入急轉(zhuǎn)彎前識(shí)別到第一個(gè)標(biāo)志物時(shí)降低速度,走完急轉(zhuǎn)彎并識(shí)別到第二個(gè)標(biāo)志物時(shí)恢復(fù)速度,提高急轉(zhuǎn)彎的穩(wěn)定性。
在課程實(shí)踐中,鼓勵(lì)學(xué)生提出改進(jìn)無人駕駛技術(shù)的想法,因此在課程考核中,拓展研究點(diǎn)的分值權(quán)重最高。能夠在原有設(shè)計(jì)基礎(chǔ)上,進(jìn)行一定的創(chuàng)新或者是技術(shù)改進(jìn),都可獲得加分。考核標(biāo)準(zhǔn)中列出了很多加分點(diǎn),大大激發(fā)了學(xué)生的研究熱情。
學(xué)生的研究態(tài)度、表現(xiàn)、解決問題的能力等也是考核的內(nèi)容。課程結(jié)課時(shí),采取現(xiàn)場(chǎng)實(shí)際調(diào)試和答辯的方式記錄分值,并與以上各個(gè)環(huán)節(jié)的分值一起作為最終評(píng)定成績(jī)。
在教學(xué)實(shí)施過程中,學(xué)生的自主學(xué)習(xí)能力出現(xiàn)了一些層次上的分級(jí),主要體現(xiàn)在應(yīng)用新知識(shí)、新方法的快速性和靈活性以及尋找解決問題的途徑上,在動(dòng)手設(shè)計(jì)和軟件程序的編寫上也參差不齊。
針對(duì)這些問題,首先應(yīng)建設(shè)完善的軟資源,如實(shí)驗(yàn)指導(dǎo)書、相關(guān)的參考書等。在指導(dǎo)書中,將學(xué)生遇到的疑難問題進(jìn)行匯總,給出相應(yīng)的解決方法,并對(duì)所涉及的知識(shí)點(diǎn)做相應(yīng)的講解。第二,應(yīng)開發(fā)模塊化、功能化的程序,以功能性實(shí)現(xiàn)為主對(duì)程序進(jìn)行注釋,用思維導(dǎo)圖方式引導(dǎo)學(xué)生編寫、調(diào)試、豐富和完善代碼。第三,在硬件結(jié)構(gòu)設(shè)計(jì)上,應(yīng)借鑒已有的機(jī)械設(shè)計(jì)經(jīng)驗(yàn),基于成熟的機(jī)械結(jié)構(gòu)加以改善,制作符合本課程要求的機(jī)械結(jié)構(gòu)。
基于ROS 構(gòu)建的無人駕駛創(chuàng)新實(shí)驗(yàn)課,是本科教學(xué)中的一門新的實(shí)踐課程,適于在學(xué)習(xí)之余有能力進(jìn)行拓展研究的學(xué)生。在課程教學(xué)中,教師的作用是構(gòu)建課程框架,引導(dǎo)學(xué)生正確的研究方向,對(duì)學(xué)生研究中遇到的問題給予解決思路,鼓勵(lì)學(xué)生使用新的思路、新的技術(shù)去實(shí)現(xiàn)研究任務(wù)。該選課不限制學(xué)生專業(yè),鼓勵(lì)通過各專業(yè)學(xué)生的合作,在機(jī)械結(jié)構(gòu)設(shè)計(jì)、程序代碼優(yōu)化、視覺數(shù)據(jù)處理、傳感器應(yīng)用、通信方式等方面提出各種各樣有意義的新穎想法。這樣的學(xué)科交叉與互補(bǔ)研究活動(dòng),契合了“新工科”“雙一流”高校建設(shè)的理念。