李偉東+陳小龍+羅曉
【摘 要】本設計實驗通過基于樹莓派3代B型來實現對外界圖像和聲音信息識別來控制電機運動。研究這個項目的意義在于為CCS提供一個可以通過聲音和手勢來調整汽車的前期成果。巡航控制系統(CCS)是一種利用電子控制技術保持汽車自動等速行駛的系統。由巡航控制組件讀取車速傳感器發來的脈沖信號與設定的速度進行比較,CCS的ECU來調整節氣門開度的增大或減小,增加或降低車速,達到動態調節車速的目的使車進入穩態行駛。汽車的節氣門開度通常是CCS的ECU通過Raspberry用聲控和手勢控來控制電機的速度和運動方向。
【關鍵詞】樹莓派3;CCS;語音識別;手勢識別;電機控制
引言
汽車巡航控制系統發展至今己有四十多年的歷史,它經歷了機械控制、晶體管控制、模擬式微機控制和數字式微機控制四個階段。隨著高速公路的迅速發展,巡航控制系統的裝車率也在不斷提高,根據次此設計的實際情況,選電子式巡航控制系統。采用以樹莓派3帶B型為ECU,聲音控制通過Microphone接入Raspberry,手勢識別通過CCD或CMOS用圖像傳感器接入Raspberry將控制信號轉換成控制命令來驅動伺服電機或者步進電機的運動速度和運動方向。
1.基本原理及設計思路
本系統模塊主要部件有USB或LINE IN 普通麥克風,CMOS和CCD的圖像傳感器,樹莓派3代B型,直流伺服電機或步進電機。整體構想Raspberry是整個系統的控制核心,內部使用ARM/Linux操作系統其中可以使用C語言和Python語言進行開發和擴展,C語言和Python語言開發的庫可以使用第三方類似于0pencv庫來處理圖像傳感器和聲音傳感器的信號。通過麥克風得到的聲音信號通過LINE IN或USB接口連入Raspberry,圖像信息可使用CMOS或CCD的攝像頭通過USB或Raspberry的內部攝像頭接口接入。Raspberry控制器分析出聲音和手勢控制的命令信號,得到控制電機轉速和轉向的參數,通過電機驅動芯片來控制伺電機或者步進電機的轉速和轉向。
2.系統硬件部分準備
(1)樹莓派系統鏡像可到樹莓派官網:www.raspberrypi.org下載。
(2)USB轉TTL模塊用于電腦和樹莓派的連接,通過串口輸入命令及代碼。
(3)Win32DiskImager軟件用于系統鏡像的燒寫。
(4)PuTTY軟件官網:putty.org
電腦與樹莓派通信的輸入輸出串口監視軟件,支持快捷鍵操作。
(5)USB無線網卡。
(6)WiringPIWiringPi(官網: wiringpi.com)是應用于樹莓派平臺的GPIO控制庫函數,WiringPi遵守GUN Lv3。wiringPi使用C或者C++開發并且可以被其他語言包轉。
(7)microSD卡用于燒寫系統鏡像,由于系統較大,盡量使用8GB以上的卡,高速卡更佳。
(8)5V 2A左右的電源,電源線為通用的microUSB線。
3.系統環境搭建
插入microSD卡至讀卡器連接到電腦上,先用網上下載的打開Win32DiskImager軟件選擇好下載的鏡像文件,點擊(Write)進行燒寫。選SD Formatter 4.0 現將SD卡格式化,然后登陸樹莓派官網下載最新2017版的Raspberrybian 的操作系統并且在電腦上解壓。打開下載好點的Win32DiskImager選擇好下載的鏡像文件,點擊Write進行燒寫,開機登陸樹莓派系統插上燒寫好鏡像文件的microSD卡,插上USB無線網卡,連接好串口線,串口通信連接三根線,GND-GND、TX-RX、RX-TX。將USB轉TTL串口模塊連接電腦,在電腦設備管理器中查看串口號(如:COM3)。打開PuTTY軟件,先選擇22端口(SSH) >> 選擇對應的串口號(COM15)給樹莓派插上電源供電開機,串口監視串口會輸出系統開機信息,輸出顯示(raspberrypi login:),輸入用戶名:LWD,輸入密碼(LWD):raspberry 回車。顯示輸出如上pi@raspberrypi:~$時 開機完成。配置樹莓派連接wifi網絡使用wpa_cli命令行配置wifi無線網絡,中途輸出信息可無視,配置完成,輸入Ctrl + c退出wpa_cli命令行。退出后可輸入ifconfig查看網絡連接。通過網絡使用GIT工具安裝wiringPi。安裝完GIT工具后可通過GIT獲得wiringPi的源代碼安裝過wiringPi,程序工作環境安裝完畢。
4.語音模塊系統搭建
首先將樹莓派聲卡連接到一個USB端口,在操作系統啟動的最后我們在控制臺介入這個命令以列出所有連接的USB設備:lsusb 看到“C-Media Electronics, Inc. Audio Adapter”,則USB音頻卡已成功檢測到。想要USB卡音頻輸出而不是樹莓派,則必須編輯配置文件,控制音響設備的操作系統。打開文件/etc/modprobe.d/alsa-base.conf,使用sudo nano/etc/modprobe.d/alsa-base.conf 進行文本編輯,然后重新啟動樹莓派。前面已經應該能夠使用USB卡作為默認的音頻設備,你可以上傳音頻文件到樹莓和試試看能不能聽到聲音,用命令:aplay/home/pi/test.wav 如果一切順利,你就沒問題地能聽到聲音。安裝免費的語音識別軟件:PocketSphinx,執行命令:
sudo apt-get install rpi-update
sudo apt-get install git-core
sudo rpi-updateendprint
PocketSphinx:
安裝后可以運行命令:/pocketsphinx_continuous來啟動。
打開python需要登陸PocketSphinx官網獲得相應的代碼和范例程序進行相應的更改語音命令組利用官網所給的語音庫來實現開發。
5.圖像模塊系統搭建
設置好樹莓派,升級相關軟件安裝好OpenCV的相關庫,確定攝像頭和樹莓派是兼容的。
調用一個攝像頭的例子:
VideoCapture cap(0); // 使用默認攝像頭
if(!cap.isOpened()) // 檢查攝像頭是否成功打開return -1;Mat edges;
namedWindow(“edges”,1); //建立一個窗口
cap >> frame; // 獲得攝像頭的一幀。下面三句代碼是利用canny算子進行邊緣檢測cvtColor(frame,edges,COLOR_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); Canny(edges, edges, 0, 30, 3)。imshow(“edges”, edges); 在名字為“edges”的窗口顯示。最后看到the camera will be
Deinitialized automatically in VideoCapture destructor系統提示則完成圖像識別。
6.電機模塊系統搭建
安裝Python,連入電機下面是簡單的代碼片段基本的開關引腳的Python代碼片段:
import RPi.GPIO as GPIO
# Use GPIO numbers not pin numbers
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
在樹莓派上運行命令使電動機運轉:sudo python motor.py
輸入以下代碼規范進程:
GPIO.setup(Motor1E,GPIO.OUT)
print “Turning motor on”
GPIO.output(Motor1A,GPIO.HIGH)
完成電機驅動模塊。
參考文獻:
[1]Maik Schmidt,Raspberry Pi A quick Start Guide,Progmatic Bookshelf,August 8,2012.
[2]Matt Richarsxon &&Shawn Wallace jklfd,Start with raspberry pi, OReily medio,December7,2012.
[3]Fredrik Lundh,Python standard library,oreily media,May 2001.
[4]Mendel Copper,Advanced Bash-Scripting Guide,The Linux Document project,Nov 2012.
[5]Robert Sedgewick,Algorithem in C,Addison-Wesley, Sep 1997.
[6] Richard Stallman,Freee in Freedom,orelly,march 2002.endprint