王 嚴 張 琪 劉心語 龐金煉 王新國
上海工程技術大學 電子電氣工程學院 上海 201620
智能車是集決策規劃、周邊環境感知、道路自動識別等功能于一體的綜合系統,它集中地運用了計算機、傳感、信息、通信及自動控制等技術。[1]
目前市面上普及的智能車多以紅外傳感器和超聲波傳感器融合的方式實現循跡避障。紅外傳感器通過發送和接收路徑引導線白色和黑色反射面的光信號并轉換為電信號驅動智能車,超聲波傳感器通過接收障礙物反射的信號確定障礙物的位置實現主動避障。
隨著前沿科學技術的進步與人工智能領域的快速發展,智能車的創新也迎來了新的節點。人工智能,信息傳輸等相關領域成果的應用使智能循跡小車交互性的特點得到了進一步的體現。影像識別模塊Open MV的使用增強了路徑識別的準確性。
智能循跡小車選用樹莓派(Raspberry Pi 3B+)作為核心控制器,Arduino MEGA板為輔助控制器,外圍設備包括視覺處理模塊Open MV M7 Camera,電機驅動模塊Dual DC Motor Drive和供電模塊DC to DC 等。其中電機驅動模塊由12V外部電源直接供電,雙控制器的供電需要通過穩壓模塊將12V外部電源降到5V實現。
使用Open MV模塊進行圖像采集與識別。圖像數據在樹莓派上進行處理,根據圖像處理信息,將小車中心線與賽道中線的偏差經過位置式PID算法后產生相應的控制信號經過串口給Arduino MEGA(輔助控制器)發送指令控制智能車。
Arduino MEGA控制板通過直流電機控制板控制電機速度與舵機轉向,保證智能車對路徑引導線的循跡。最終實現智能車的人機交互與視覺循跡。系統設計框圖如圖1所示。

圖1 系統設計框圖
2.1 Micro Python Python的高級語言結構在機器視覺算法進行復雜輸出的處理中有著一些其他編程語言所不具備的優勢。Micro Python是基于Python 3的一種更精簡和高效地實現編程的語言,它包含了Python標準庫的一個小子集,同時在微控制器和受限環境中的運 行得到了優化[2]。借助Mirco Python,用戶可以很容易的執行視覺捕捉識別算法或者使用外部終端觸發拍攝實現完全控制Open MV,也可以將算法的結果用來控制I/O引腳。
2.2 Open MV Open MV是一個圖像傳感器與處理器集成在一起的開源智能硬件,具有低功耗、低成本的特點。Open MV的處理器采用ARM Cortex M7架構的STM32F765VI處理器,依靠于開發者基于Micro Python的硬件函數庫以及常用的圖像識別函數庫,用戶可以像調用opencv一樣使用該函數庫實現圖像識別、完成機器視覺(machine vision)的應用。
3.1 圖像預處理 Open MV模塊在進行圖像捕獲時獲取的不僅僅是白色路徑引導線,同時也捕獲到周圍環境,為提高路徑識別的準確性,對捕獲的圖像進行預處理。其中預處理的內容主要包括圖像增強、噪聲抑制、將彩色圖像轉換為灰質圖、圖像的二值化處理以及圖像的邊緣分割與輪廓檢測。
在Open MV視覺模塊中,內嵌了基本的圖像處理函數庫,其中包含灰度化的算法函數,調用sensor.set_pixformat(sensor.GRAYSCALE)
函數語句即可實現圖像的灰度化。然后采用最大類間方差法實現圖像的二值化,將灰度圖像轉化為只有兩種像素值的圖像,其中背景為0、目標為l。
3.2 路徑識別
3.2.1 識別原理 調用函數庫中pyb模塊并引入UART函數,設定白色路徑引導線的閾值與所捕捉圖像中的感興趣區ROI=(0,100,320,40),若不設ROI則會以整個圖像視野分析,減慢對每一幀圖像的處理速度。線檢測算法將嘗試找到每個感興趣區中最大色塊(blob)的質心,然后將質心的x位置用不同的權重取平均值,其中最大權重分配給圖像底部附近的感興趣區。
選取色塊寬度作為排序的屬性,根據返回值,選擇最大權重的兩個白線色塊。將選取后的色塊劃分為左中右三部分,計算出白色路徑偏移角度值Direct_ratio。若Direct_ratio<0,車身需左轉;Direct_ratio>0,車身需右轉;Direct_ratio=0,繼續直行。循跡流程圖如圖2所示
3.2.2 Direct_ratio計算
分別求取左邊色塊X軸中心點X1與右邊色塊X軸中心點X2:

左右色塊X軸中心點距離wcenter:
wcenter=|X2-X1|
求取左右色塊X軸中心點距離捕獲圖像邊緣的距離wleft與wright
wleft=X1
wright=MAXWIDTH-X2
設定θ中間寬度比重為0.01,b為3,θ越高Direct_ratio越靠近0

3.3 位置式PID算法 核心控制器樹莓派(Raspberry Pi 3B+)完成對圖像的處理與路徑引導線的位置判定與識別后通過串行單工的串口通信方式將視覺模塊處理完成的數據給輔助控制器Arduino MEGA。為平穩電機轉速,借用Arduino中已經封裝好的PID庫進行調節。首先設定目標值setpoint,預選擇一個足夠短的采樣時間sampletime,分別確定比例增益Kp、積分時間常數Ti、微分時間常數Td三個參數。上傳程序后打開Arduino IDE的監控視窗,可觀察到左右電機依跑道彎曲的配速。
3.4 語音板喚醒 項目使用科大訊飛語音版實現語音喚醒的功能。語音喚醒是設備在休眠或待機狀態下,設備能進行檢測用戶的聲音,當檢測到用戶發出提前設定的語音指令時,喚醒設備,并讓設備處于等待用戶指令的發出的狀態。[4]

圖2 循跡流程圖

圖3 喚醒檢測API調用流程圖
調用QIVWAudioWrite()函數,調用此函數,從而實現連續的檢測喚醒詞的目的。
3.5 離線命令詞識別 語音識別技術(ASR),通過此技術將語音音頻文件進行識別并轉換為文本數據供機器進行參考。根據語法規則,離線ASR識別,就是在離線的狀態下對用戶發出命令詞進行識別。接收到語音之后,將語言音頻轉換為文本輸出并使設備后續能做出相應的反應。[5]
使用巴科斯范式格式的的語法規則,并對使用到的規則進行實時的更新。

圖4 更新本地語法詞典的API
wiringPi的庫中現成的數據可以根據需求進行調用,從而達到對樹莓派上的IO口控制的目的,以達成我們實現語音交互并且控制小車運動,控制對應設備的開關的實現,通過控制對應的GPIO接口的高低電平實現對應的功能或是動作。[6]
基于Open MV的視覺循跡人機交互智能車,通過對所捕獲圖像的預處理獲取白色循跡引導線位置,計算引導線所偏移角度,借助設定的算法獲取轉向指令,驅動電機左轉或者右轉,依靠位置式PID算法實現對電機速度的穩定控制,具有良好智能循跡功能與延伸性。但功能較為單一,可通過升級硬件設施和優化軟件設計實現功能擴展。
基于語音識別技術(ASR),將人的聲音識別成文本,通過對人聲的捕捉,將語言音頻數據轉換成文本數據,再通過單片機對文本數據進行處理,讓機器做出相應的反應,而離線數據擺脫了網絡的束縛,及識別數據只在可識別的文本數據值域中,因此有更高的匹配率。