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