許龍銘,徐宗銳
(廣州城市理工學(xué)院通信工程學(xué)院,廣東 廣州 510800)
近年來,汽車技術(shù)不斷發(fā)展,人們?cè)絹碓街匾暺嚢踩珕栴}[1]。車周圍相對(duì)較近的區(qū)域是駕駛者的視野盲區(qū)[2-4],汽車在倒車時(shí)極易引發(fā)碰撞,同時(shí)倒車的失誤會(huì)引發(fā)較多交通事故的發(fā)生[5-6]。汽車倒車系統(tǒng)一般分為倒車影像和倒車?yán)走_(dá)兩種,汽車廠商為了不同配置車型的營(yíng)銷往往在中高配車型上才會(huì)選擇一種或者兩種倒車系統(tǒng)安裝,導(dǎo)致了部分車主只能自行加裝。加裝的倒車系統(tǒng)需要在中控上安裝一個(gè)或兩個(gè)顯示器件,甚至需要改變?cè)嚲€路,造成了安全隱患。文中設(shè)計(jì)的汽車倒車系統(tǒng)同時(shí)整合了倒車影像和倒車?yán)走_(dá),使用安卓手機(jī)端APP 進(jìn)行監(jiān)控視頻和倒車距離的顯示,解決了汽車加裝倒車系統(tǒng)的局限性。
倒車系統(tǒng)的結(jié)構(gòu)如圖1 所示,主控制器使用聯(lián)發(fā)科公司的MT7688 平臺(tái),搭建基于OpenWrt Linux發(fā)行版的開放式開發(fā)平臺(tái)。然后驅(qū)動(dòng)USB 連接的UVC 攝像頭采集實(shí)時(shí)倒車影像數(shù)據(jù)、雷達(dá)檢測(cè)倒車距離數(shù)據(jù),兩路數(shù)據(jù)分別由主控制器通過WIFI 發(fā)送給駕駛員的安卓手機(jī)端APP 進(jìn)行顯示和距離預(yù)警等處理。系統(tǒng)設(shè)計(jì)了離線模式,當(dāng)未使用APP 連接時(shí),也可作為正常的倒車?yán)走_(dá)使用,可在倒車過程中進(jìn)行距離播報(bào)和報(bào)警提示。
圖1 倒車系統(tǒng)結(jié)構(gòu)圖
整個(gè)可視倒車系統(tǒng)主要由5 個(gè)部分組成:
1)MT7688 主控,作為整個(gè)系統(tǒng)的核心,主要進(jìn)行攝像頭圖像數(shù)據(jù)處理、雷達(dá)傳感器數(shù)據(jù)采集、TTS語音處理以及局域網(wǎng)數(shù)據(jù)傳輸。
2)雷達(dá)電路,檢測(cè)汽車實(shí)時(shí)的倒車距離。
3)UVC 攝像頭,采集實(shí)時(shí)的倒車圖像數(shù)據(jù)。
4)TTS電路,播報(bào)實(shí)時(shí)倒車距離并進(jìn)行報(bào)警提示。
5)安卓手機(jī)端APP,整個(gè)系統(tǒng)的用戶交互接口。
可視倒車系統(tǒng)使用LinkIt Smart 7688 核心板作為主控。LinkIt Smart 7688 搭載的是聯(lián)發(fā)科公司的MT7688AN 芯片,MT7688AN 作為一顆系統(tǒng)級(jí)別的芯片,能夠提供高性能的802.11n 1T1R WiFi 和各種周邊連接能力。
LinkIt Smart 7688 核心板IO 圖如圖2 所示,對(duì)外提供了常用的PWM、I2C、SPI、I2S 和UART 等數(shù)字通信接口,安裝了OpenWrt 操作系統(tǒng)可支持Python、Node.js 和C 語音等編程語言,能夠驅(qū)動(dòng)外圍硬件進(jìn)行物聯(lián)網(wǎng)產(chǎn)品的快速開發(fā)。
圖2 LinkIt Smart 7688 IO圖
UVC 攝像頭的選用基于標(biāo)準(zhǔn)的USB 視頻設(shè)備協(xié)議。由于各大主流操作系統(tǒng)均提供了設(shè)備驅(qū)動(dòng)支持[7],文中選用的是一款30 W 像素的UVC 攝像頭,支持YUV/MJPG 動(dòng)態(tài)格式的輸出,最大支持640×480的分辨率,性能滿足倒車影像的圖像數(shù)據(jù)采集需求。
雷達(dá)電路中選用收發(fā)一體式超聲波傳感器,搭載超聲波驅(qū)動(dòng)專用集成電路芯片—LM1812。LM1812芯片內(nèi)部的主要器件由以下幾部分組成:脈沖調(diào)制C 類振蕩器、高增益接收器、脈沖調(diào)制檢測(cè)器和噪音抑制器。
雷達(dá)電路如圖3 所示,將LM1812 芯片的第1 腳外接L1、C1,并由此決定電路發(fā)送的工作頻率,其工作頻率f0=1/2π[8]。
圖3 雷達(dá)電路圖
LM1812 的8 號(hào)引腳用于切換發(fā)射/接收模式,當(dāng)8 號(hào)引腳為低電平時(shí),LM1812 工作于接收模式;當(dāng)8號(hào)引腳為高電平時(shí),LM1812 工作于發(fā)射模式。由于LM1812 芯片需要12 V 電壓驅(qū)動(dòng),因此MT7688 主控與LM1812 連接時(shí)需要進(jìn)行電壓轉(zhuǎn)換,即MT7688 通過IN 引腳,經(jīng)過電平轉(zhuǎn)換電路放大IO 的電壓信號(hào)后輸入到LM1812 中。LM1812 的14 號(hào)引腳(OUT)為輸出端,接MT7688 的外部中斷IO。
為了保證用戶未使用手機(jī)連接可視倒車系統(tǒng)也能夠提供基本的倒車?yán)走_(dá)功能,文中設(shè)計(jì)了基于SYN6288 語音合成芯片的TTS 電路,用于在離線模式下進(jìn)行倒車距離的播報(bào)和報(bào)警提示。
TTS 電路如圖4 所示,SYN6288 是一款采用異步串口(UART)通信的語音合成芯片,因此將SYN6288的TxD 和RxD 連接到MT7688 的串口后,向SYN6288發(fā)送文本數(shù)據(jù),便可輸出對(duì)應(yīng)的語音信號(hào),實(shí)現(xiàn)文本到語音的轉(zhuǎn)換。
圖4 TTS電路
3.1.1 移植OpenWrt
OpenWrt 是一個(gè)高度模塊化、高度自動(dòng)化的嵌入式Linux 系統(tǒng)[9],作為主流路由器的固件使用。OpenWrt 區(qū)別于其他單一的、靜態(tài)的系統(tǒng),最重要的是其提供了一個(gè)完全可寫的文件系統(tǒng)。
在MT7688 平臺(tái)上移植OpenWrt 的步驟如圖5所示,整個(gè)移植過程包括以下4 個(gè)步驟。
圖5 OpenWrt移植步驟
1)安裝依賴
由于該文是在Ubuntu 系統(tǒng)下進(jìn)行的OpenWrt 系統(tǒng)編譯,因此首先需要在Ubuntu 下搭建編譯環(huán)境,安裝U-Boot 和OpenWrt 源碼編譯所需要的依賴庫。
2)編譯U-Boot
從GitHub 上下載U-Boot 源碼,使用交叉編譯工具編譯源碼,編譯完成后得到U-Boot 鏡像文件。
3)編譯OpenWrt 源碼
下載了OpenWrt 源碼后,根據(jù)需求修改配置文件,編譯完成后得到目標(biāo)平臺(tái)的OpenWrt 固件。
4)燒寫固件
通過TFTP 燒寫U-Boot 和OpenWrt 固件。
3.1.2 mjpeg-streamer視頻服務(wù)器搭建
mjpeg-streamer 是一款免費(fèi)的視頻流服務(wù)器軟件[10],倒車影像的實(shí)現(xiàn)主要由mjpeg-streamer 視頻服務(wù)器實(shí)現(xiàn),因此需要在OpenWrt 系統(tǒng)上搭建服務(wù)器。
首先下載UVC攝像頭對(duì)應(yīng)的驅(qū)動(dòng),在OpenWrt上進(jìn)行安裝,安裝完成后測(cè)試系統(tǒng)能夠成功識(shí)別設(shè)備。
然后對(duì)mjpeg-streamer 進(jìn)行配置,設(shè)置攝像頭設(shè)備名、分辨率和幀率等,再將服務(wù)器設(shè)置為開機(jī)自啟動(dòng)。
MT7688主控重啟后,首先驅(qū)動(dòng)UVC攝像頭采集圖片,用服務(wù)器中的JPEG圖庫存儲(chǔ)圖片數(shù)據(jù)流。用戶再使用瀏覽器通過html進(jìn)行解析,用mjpeg-streamer持續(xù)進(jìn)行流程控制,最終實(shí)現(xiàn)mjpeg-streamer視頻服務(wù)器。
3.1.3 Python主程序設(shè)計(jì)
Python 是現(xiàn)在最流行、最常用的編程語言[11],文中的MT7688 下位機(jī)軟件使用Python 進(jìn)行編寫。
由于視頻傳輸由mjpeg-streamer 服務(wù)器完成,因此MT7688 下位機(jī)軟件的主要工作包括:
1)搭建TCP 服務(wù)器
為了與安卓手機(jī)端APP 進(jìn)行通信,采用基于TCP協(xié)議的上、下位機(jī)通訊模式[12],因此需要在OpenWrt上搭建TCP 服務(wù)器,用于傳輸?shù)管嚲嚯x數(shù)據(jù)。
2)倒車距離檢測(cè)
采用LM1812 驅(qū)動(dòng)超聲波探頭檢測(cè)實(shí)時(shí)倒車距離,由MT7688 對(duì)數(shù)據(jù)進(jìn)行處理,再通過TCP 服務(wù)器向APP 轉(zhuǎn)發(fā)。
3)TTS
TTS 是Text-to-Speech 的縮寫[13],TTS 技術(shù)是指通過預(yù)錄制的語音元素,運(yùn)用目前語音合成中的拼接方法進(jìn)行發(fā)聲[14]。MT7688 下位機(jī)軟件通過心跳包檢測(cè)安卓手機(jī)端APP 是否在線,當(dāng)其離線后通過串口驅(qū)動(dòng)TTS 電路,進(jìn)行倒車距離播報(bào)。同時(shí)判斷倒車距離是否低于APP 設(shè)置的報(bào)警距離,如果是,則進(jìn)行對(duì)應(yīng)的語音報(bào)警。
3.2.1 APP總體軟件流程概述
APP 軟件流程如圖6 所示,軟件運(yùn)行后進(jìn)行Activity 初始化操作,在onCreate()方法中初始化各個(gè)界面控件,為控件設(shè)置監(jiān)聽器,設(shè)置事件處理方法。初始化完成后通過Socket 向TCP 服務(wù)器請(qǐng)求倒車距離數(shù)據(jù),接收成功后將數(shù)據(jù)顯示在TextView 上,同時(shí)進(jìn)行報(bào)警距離判斷處理。最后在子線程上通過Http獲取倒車影像數(shù)據(jù),更新到SurfaceView 控件中。
圖6 APP軟件流程
3.2.2 倒車影像處理軟件設(shè)計(jì)
安卓手機(jī)端APP 倒車影像功能主要通過Http 連接mjpeg-streamer 服務(wù)器,獲取服務(wù)器上存儲(chǔ)的圖像數(shù)據(jù)。由于安卓的View適合主動(dòng)更新,而SurfaceView更適合頻繁的被動(dòng)更新。因此,APP 獲取到的每一幀倒車影像數(shù)據(jù)均在子線程中通過SurfaceView 進(jìn)行實(shí)時(shí)的更新顯示,不會(huì)影響UI 的主線程[15]。
3.2.3 倒車距離處理軟件設(shè)計(jì)
MT7688 上檢測(cè)到的實(shí)時(shí)倒車距離通過TCP 服務(wù)器往外傳輸,因此在APP 上需要由TCP 客戶端子程序來獲取。TCP 套接口是字節(jié)流套接口(stream socket)的一種[16],APP 通過Socket 來完成倒車距離的獲取,與TCP 服務(wù)器建立連接后,主動(dòng)請(qǐng)求數(shù)據(jù),得到倒車距離數(shù)據(jù),并進(jìn)行判斷處理。
可視倒車系統(tǒng)最關(guān)鍵的兩個(gè)參數(shù)是倒車影像的流暢度(幀率)和倒車距離的精度。因此,實(shí)驗(yàn)環(huán)節(jié)分別對(duì)兩個(gè)參數(shù)進(jìn)行實(shí)驗(yàn)測(cè)試。
首先,進(jìn)行倒車影像幀率測(cè)試實(shí)驗(yàn),由于通信距離是固定的,實(shí)驗(yàn)時(shí)主要測(cè)量車輛在靜止和倒車時(shí)的幀率。每種狀態(tài)進(jìn)行100 次測(cè)量,然后取平均值,得到倒車影像幀率測(cè)試數(shù)據(jù)如表1 所示。
表1 倒車影像幀率數(shù)據(jù)
其次,進(jìn)行倒車距離精度測(cè)試實(shí)驗(yàn),分別將雷達(dá)探頭正對(duì)墻壁,放置在不同距離時(shí),記錄系統(tǒng)測(cè)試到的倒車距離。取100 個(gè)樣本數(shù)據(jù)的平均值,再與實(shí)際距離進(jìn)行對(duì)比,得到倒車距離數(shù)據(jù)如表2 所示。
表2 倒車距離測(cè)試數(shù)據(jù)
由實(shí)驗(yàn)數(shù)據(jù)分析可知,可視倒車系統(tǒng)的倒車影像幀率無論在靜止或倒車狀態(tài)下,均能達(dá)到27 Hz 以上,倒車距離精度為±6 cm 以內(nèi),總體能滿足汽車倒車情景的應(yīng)用要求。
基于安卓手機(jī)端實(shí)現(xiàn)的可視倒車系統(tǒng)可以解決傳統(tǒng)車機(jī)可視倒車系統(tǒng)安裝過程繁瑣以及費(fèi)用昂貴的弊端,能夠應(yīng)用在低配小汽車、貨車以及大巴車上等出廠沒安裝倒車系統(tǒng)的車輛上。