畢業(yè)論文--基于gt2440的智能循跡小車(chē)的研究與設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩26頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  學(xué) 生 畢 業(yè) 設(shè) 計(jì)(論 文)</p><p>  2014年5月28 日</p><p> 課題名稱(chēng)基于GT2440的智能循跡小車(chē)的研究與設(shè)計(jì)</p><p> 姓 名</p><p> 學(xué) 號(hào)</p><p> 學(xué) 院信息科學(xué)與工程學(xué)院</p><p&g

2、t; 專(zhuān) 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)</p><p> 指導(dǎo)教師</p><p><b>  目 錄</b></p><p><b>  摘 要 1</b></p><p><b>  關(guān)鍵詞1</b></p><p>  Abstract.2<

3、;/p><p>  Key Words2</p><p><b>  1 緒論3</b></p><p>  1.1 循跡控制發(fā)展現(xiàn)狀和趨勢(shì)3</p><p>  1.2 課題研究的意義3</p><p>  2 智能循跡的技術(shù)背景5</p><p>  2.1

4、 圖像預(yù)處理算法5</p><p>  2.2 設(shè)備驅(qū)動(dòng)5</p><p>  2.3 ARM簡(jiǎn)介6</p><p>  3 嵌入式Linux開(kāi)發(fā)平臺(tái)的搭建7</p><p>  3.1 OpenCV在GT2440上的移植7</p><p>  3.1.1、GT2440開(kāi)發(fā)平臺(tái)搭建7</p>

5、;<p>  3.1.2、移植OpenCV所需的資源包匯總8</p><p>  3.1.3、安裝交叉編譯器9</p><p>  3.1.4、交叉編譯OpenCV所需庫(kù)9</p><p>  4 智能循跡實(shí)現(xiàn)13</p><p>  4.1 二值化13</p><p>  4.2 邊緣檢測(cè)

6、14</p><p>  4.3 路徑提取16</p><p>  5 電機(jī)控制設(shè)計(jì)18</p><p>  5.1 電機(jī)驅(qū)動(dòng)18</p><p>  5.1.1 電機(jī)驅(qū)動(dòng)電路18</p><p>  5.1.2 驅(qū)動(dòng)的編譯加載18</p><p>  5.1.3 直流電機(jī)驅(qū)動(dòng)19

7、</p><p>  6 模塊聯(lián)合測(cè)試與總結(jié)21</p><p><b>  參考文獻(xiàn)22</b></p><p><b>  致 謝23</b></p><p>  基于GT2440的智能循跡小車(chē)的研究與設(shè)計(jì)</p><p>  摘 要: 本文是基于GT2440的智

8、能尋跡小車(chē),通過(guò)攝像頭采集視頻數(shù)據(jù),OpenCV算法處理,將視頻幀里的軌跡路徑提取出來(lái),實(shí)時(shí)的傳入相關(guān)控制程序,控制電機(jī)的轉(zhuǎn)向來(lái)尋跡,從而達(dá)到智能控制小車(chē)的目的。隨著時(shí)代的進(jìn)步, 科技的發(fā)展,工業(yè)生產(chǎn)正在向著自動(dòng)化, 智能化的階段進(jìn)步以及對(duì)人性化的要求,對(duì)各種智能機(jī)器人的要求也越來(lái)越高。智能循跡小車(chē)技術(shù)可以應(yīng)用于無(wú)人駕駛機(jī)動(dòng)車(chē),無(wú)人工廠、倉(cāng)庫(kù)、服務(wù)機(jī)器人、未知路線探測(cè)和人類(lèi)不能存在或長(zhǎng)期存在等環(huán)境中;通過(guò)功能擴(kuò)展,小車(chē)具有在復(fù)雜地形條件

9、下礦藏探測(cè)的功能。 循跡小車(chē)的研究重點(diǎn)是對(duì)軌跡的自動(dòng)識(shí)別與自動(dòng)校正,并在行進(jìn)穩(wěn)定的情況下進(jìn)行其他拓展功能,這對(duì)整個(gè)小車(chē)系統(tǒng)有很高的要求。</p><p>  關(guān)鍵詞: 智能循跡;OpenCV;電機(jī)</p><p>  Based on the Research of Intelligent Tracking </p><p>  GT2440 Car and Des

10、ign</p><p>  Abstract: This thesis is based on GT2440 development board which is the mother board of the intelligent tracing car, and the video data is gathered through the camera, OpenCV algorithm processin

11、g, picking up the trajectory path in the video frames, the introduction of real-time relevant control program, turn to tracing control motor, so as to achieve the aim of the intelligent control of the car. With the devel

12、opment of science and technology, industrial production becomes automation, intelligen</p><p>  Key Words: intelligent tracking;OpenCV;electrical machine</p><p><b>  1 緒論</b></p&g

13、t;<p>  1.1 循跡控制發(fā)展現(xiàn)狀和趨勢(shì)</p><p>  目前,在企業(yè)生產(chǎn)技術(shù)不斷提高、對(duì)自動(dòng)化技術(shù)要求不斷加深的環(huán)境下,智能車(chē)輛以及在智能車(chē)輛基礎(chǔ)上開(kāi)發(fā)出來(lái)的產(chǎn)品已成為自動(dòng)化物流運(yùn)輸、柔性生產(chǎn)組織等系統(tǒng)的關(guān)鍵設(shè)備。世界上許多國(guó)家都在積極進(jìn)行智能車(chē)輛的研究和開(kāi)發(fā)設(shè)計(jì)。移動(dòng)機(jī)器人是機(jī)器人學(xué)中的一個(gè)重要分支,出現(xiàn)于20世紀(jì)06年代。當(dāng)時(shí)斯坦福研究院(SRI)的Nils Nilssen和Cha

14、rles Rosen等人,在1966年至1972年中研制出了取名shakey的自主式移動(dòng)機(jī)器人,目的是將人工智能技術(shù)應(yīng)用在復(fù)雜環(huán)境下,完成機(jī)器人系統(tǒng)的自主推理、規(guī)劃和控制。從此,移動(dòng)機(jī)器人從無(wú)到有,數(shù)量不斷增多,智能車(chē)輛作為移動(dòng)機(jī)器人的一個(gè)重要分支也得到越來(lái)越多的關(guān)注智能小車(chē),是一個(gè)集環(huán)境感知、規(guī)劃決策,自動(dòng)行駛等功能于一體的綜合系統(tǒng),它集中地運(yùn)用了計(jì)算機(jī)、傳感、信息、通信、導(dǎo)航及白動(dòng)控制等技術(shù),是典型的高新技術(shù)綜合體。</p&g

15、t;<p>  隨著時(shí)代的進(jìn)步, 科技的發(fā)展, 工業(yè)生產(chǎn)正在向著自動(dòng)化, 智能化的階段進(jìn)步以及對(duì)人性化的要求, 對(duì)各種智能機(jī)器人的要求也越來(lái)越高. 智能循跡小車(chē)技術(shù)可以應(yīng)用于無(wú)人駕駛機(jī)動(dòng)車(chē), 無(wú)人工廠、倉(cāng)庫(kù)、服務(wù)機(jī)器人、未知路線探測(cè)和人類(lèi)不能存在或長(zhǎng)期存在等環(huán)境中; 通過(guò)功能擴(kuò)展, 小車(chē)具有在復(fù)雜地形條件下礦藏探測(cè)的功能。</p><p>  1.2 課題研究的意義</p><

16、p>  本課題研究的是基于GT2440的智能循跡小車(chē)的研究,本課題的意義在于:</p><p>  智能化的階段進(jìn)步以及對(duì)人性化的要求, 對(duì)各種智能機(jī)器人的要求也越來(lái)越高。 智能循跡小車(chē)技術(shù)可以應(yīng)用于考古、機(jī)器人、醫(yī)療器械等許多方面。尤其是 在足球機(jī)器人研究方面具有很好的發(fā)展前景。無(wú)人駕駛機(jī)動(dòng)車(chē), 無(wú)人工廠、倉(cāng)庫(kù)、服務(wù)機(jī)器人、未知路線探測(cè)和人類(lèi)不能存在或長(zhǎng)期存在等環(huán)境中;通過(guò)功能擴(kuò)展, 小車(chē)具有在復(fù)雜地形條

17、件下礦藏探測(cè)的功能。</p><p>  1.3 課題研究的主要工作</p><p>  本課題的主要工作如下:</p><p> ?。?)OpenCV在GT2440上的移植;</p><p>  (2)進(jìn)行路徑識(shí)別;</p><p> ?。?)通過(guò)GPIO口驅(qū)動(dòng)編程控制小車(chē)電機(jī)轉(zhuǎn)動(dòng)。</p><

18、p>  2 智能循跡的技術(shù)背景</p><p>  OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一個(gè)基于[1](開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),可以運(yùn)行在Linux、Windows和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列 C 函數(shù)和少量 C++ 類(lèi)構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方

19、面的很多通用算法。[2]最新版本是2.4.7。</p><p>  OpenCV 擁有包括 500 多個(gè)C函數(shù)的跨平臺(tái)的中、高層 API。它不依賴(lài)于其它的外部庫(kù)——盡管也可以使用某些外部庫(kù)。</p><p>  OpenCV 為Intel® Integrated Performance Primitives (IPP) 提供了透明接口。 這意味著如果有為特定處理器優(yōu)化的的 IPP

20、 庫(kù), OpenCV 將在運(yùn)行時(shí)自動(dòng)加載這些庫(kù)。</p><p>  2.1 圖像預(yù)處理算法</p><p><b>  膨脹腐蝕算法</b></p><p>  腐蝕和膨脹是最基本的形態(tài)學(xué)運(yùn)算。腐蝕是消除物體圖像無(wú)用點(diǎn)的一種過(guò)程,其結(jié)果是使剩下的物體沿周邊比處理前小幾個(gè)像素的面積,能有效地去除二值圖像中小且無(wú)意義的圖像元素集合,可應(yīng)用于二值

21、圖的去噪處理;膨脹是將與物體接觸的所有點(diǎn)合并到該物體的過(guò)程,其結(jié)果是使物體的面積增大了相應(yīng)數(shù)量的像素點(diǎn),能有效地填補(bǔ)分割后物體中的空洞及合并相隔較少像素的兩個(gè)區(qū)域。本文中先后多次應(yīng)用腐蝕、膨脹算法對(duì)待測(cè)圖像進(jìn)行預(yù)處理并取得了較好的效果。</p><p><b>  (2)邊緣檢測(cè)算法</b></p><p>  函數(shù) cvCanny 采用 CANNY 算法發(fā)現(xiàn)輸入圖像

22、的邊緣而且在輸出圖像中標(biāo)識(shí)這些邊緣。threshold1和threshold2 當(dāng)中的小閾值用來(lái)控制邊緣連接,大的閾值用來(lái)控制強(qiáng)邊緣的初始分割。 </p><p><b>  2.2 設(shè)備驅(qū)動(dòng)</b></p><p>  設(shè)備驅(qū)動(dòng)程序是介于硬件和Linux內(nèi)核之間的軟件接口,是一種低級(jí)的、專(zhuān)用于某一硬件的軟件組件。Linux有兩種方式使用設(shè)備驅(qū)動(dòng)程序

23、:直接編澤到內(nèi)核中;在運(yùn)行時(shí)加載(也就是內(nèi)核模塊)。Linux下的設(shè)備驅(qū)動(dòng)程序[7]是一些用于完成不同任務(wù)的函數(shù)的集合,通過(guò)這些函數(shù)使得Linux下的設(shè)備猶如普通文件一般。因此對(duì)于應(yīng)用程序來(lái)說(shuō)設(shè)備只是一個(gè)普通的文件,應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行打開(kāi)、關(guān)閉、讀、寫(xiě)、IO控制等操作。</p><p>  2.3 ARM簡(jiǎn)介</p><p>  ARM(Advanced RIS

24、C Machines),既可以認(rèn)為是一個(gè)公司的名字,也可以認(rèn)為是對(duì)一類(lèi)微處理器的通稱(chēng),還可以認(rèn)為是一種技術(shù)的名字。1991年ARM公司成立于英國(guó)劍橋,主要出售芯片設(shè)計(jì)技術(shù)的授權(quán)。目前,采用ARM技術(shù)知識(shí)產(chǎn)權(quán)(P)核的微處理器,即我們通常所說(shuō)的ARM微處理器,已遍及工業(yè)控制、消費(fèi)類(lèi)電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無(wú)線系統(tǒng)等各類(lèi)產(chǎn)品市場(chǎng),基于ARM技術(shù)的微處理器應(yīng)用約占據(jù)了32位RISC微處理器75%以上的市場(chǎng)份額,ARM技術(shù)正在逐步滲入到我

25、們生活的各個(gè)方面。</p><p>  3 嵌入式Linux開(kāi)發(fā)平臺(tái)的搭建</p><p>  本章詳述了嵌入式Linux開(kāi)發(fā)平臺(tái)的搭建,包括內(nèi)核移植,根文件系統(tǒng)制作等。主要是為本系統(tǒng)開(kāi)發(fā)搭建軟件平臺(tái),對(duì)于嵌入式項(xiàng)目開(kāi)發(fā)這是尤為關(guān)鍵的一步,需要充分考慮到后續(xù)應(yīng)用程序設(shè)計(jì)開(kāi)發(fā)中需要使用的資源。例如,本設(shè)計(jì)在內(nèi)核版本的選擇上,即充分考慮到對(duì)USB攝像頭的驅(qū)動(dòng)支持。</p>&l

26、t;p>  3.1 OpenCV在GT2440上的移植</p><p>  3.1.1 GT2440開(kāi)發(fā)平臺(tái)搭建</p><p>  Xshell軟件在Windows系統(tǒng)下安裝后,新建會(huì)話是將設(shè)置如下:</p><p>  a)會(huì)話基本屬性設(shè)置</p><p><b>  b)串口設(shè)置</b></p>

27、<p>  圖3.1 Xshell會(huì)話設(shè)置</p><p>  會(huì)話設(shè)置成功后,鏈接串口線,并將串口設(shè)置為與目標(biāo)板相同的波特率115200。開(kāi)啟目標(biāo)板電源就可以對(duì)GT2440目標(biāo)板進(jìn)行操作,如下圖所示:</p><p>  圖3.2 Xshell連接GT2440</p><p>  3.1.2 移植OpenCV所需的資源包匯總</p>&l

28、t;p>  ----jpegsrc.v6b.tar.gz(jpeg函數(shù)庫(kù))</p><p>  ----libpng-1.2.18.tar.gz(png函數(shù)庫(kù))</p><p>  ----zlib-1.2.3.tar.gz(z函數(shù)庫(kù))</p><p>  ----x264-snapshot-20100410-2245.t

29、ar.bz2(x264函數(shù)庫(kù))</p><p>  ----yasm-0.7.2.tar.gz(匯編編譯器,編譯x264時(shí)需要用到)</p><p>  ----xvidcore-1.3.2.tar.gz(xvid函數(shù)庫(kù))</p><p>  ----ffmpeg-0.5.3.tar.bz2(ffmpeg源碼包)</p&g

30、t;<p>  ----OpenCV-2.0.0.tar.bz2(OpenCV源碼包)</p><p>  ----(arm-linux-gcc-4.3.2.tgz (交叉編譯工具鏈)</p><p>  說(shuō)明:(1)以上資源包中ffmpeg是為了OpenCV能夠處理視頻,而ffmpeg依賴(lài)于x264和xvid兩個(gè)庫(kù),而交叉編譯libx264時(shí)需要

31、用到匯編編譯器yasm。</p><p>  3.1.3 安裝交叉編譯器</p><p>  #tar -zvxf arm-linux-gcc-4.3.2.tgz -C /root/</p><p><b>  添加環(huán)境變量</b></p><p>  #vim /etc/environment</p&g

32、t;<p>  在路徑中添加/root/arm/4.3.2/bin</p><p><b>  刷新環(huán)境變量:</b></p><p>  #source /etc/enviroment</p><p>  3.1.4 交叉編譯OpenCV所需庫(kù)</p><p>  #tar -zvxf zlib-1.

33、2.3.tar.gz</p><p>  #cd zlib-1.2.3</p><p>  #CC=arm-linux-gcc ./configure --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi --shared</p><p><b>  #make</b></p>&

34、lt;p>  #make install</p><p>  交叉編譯libjpeg</p><p>  #tar –zvxf jpegsrc.v6b.tar.gz</p><p>  #cd jpeg-6b</p><p>  # ./configure --prefix=/root/arm/4.3.2/arm-none-lin

35、ux-gnueabi --enable-shared --enable-static</p><p>  修改生成的Makefile文件:</p><p>  CC=gcc改為CC=arm-linux-gcc</p><p>  AR=ar rc改為AR=arm-linux-ar rc</p><p>  AR2=ranlib改為AR2=

36、arm-linux-ranlib</p><p><b>  #make</b></p><p>  需在/root/arm/4.3.2/arm-none-linux-gnueabi目錄下創(chuàng)建/man/man1目錄,才能執(zhí)行安裝命令。</p><p>  #cd /root/arm/4.3.2/arm-none-linux-gnueabi&l

37、t;/p><p>  #mkdir man</p><p>  #mkdir man/man1</p><p>  #cd /root/need_to_cross_compile_version2/libjpeg-6b</p><p>  #make install</p><p>  交叉編譯libpng</p&g

38、t;<p>  #tar –zvxf libpng-1.2.18.tar.gz</p><p>  #cd libpng-1.2.18</p><p>  #./configure --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi --enable-shared --enable-static --host=arm-linux&l

39、t;/p><p><b>  #make</b></p><p>  #make install</p><p><b>  交叉編譯yasm</b></p><p>  #tar –zvxf yasm-0.7.2.tar.gz</p><p>  #cd yasm-0.7.2&

40、lt;/p><p>  #./configure --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi --enable-shared --enable-static --host=arm-linux#make#make install</p><p>  交叉編譯libx264</p><p>  #tar –jvxf x

41、264-snapshot-20100410-2245.tar.bz2</p><p>  #cd x264-snapshot-20100410-2245</p><p>  #CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/root/arm/4.3.2/arm-non

42、e-linux-gnueabi#make#make install</p><p>  交叉編譯libxvid</p><p>  #tar –zvxf xvidcore-1.3.2.tar.gz</p><p>  #cd xvidcore-1.3.2</p><p>  #./configure --host=arm-linux

43、60; --disable-assembly --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi#make#make install</p><p>  交叉編譯ffmpeg</p><p>  #tar –jxvf ffmpeg-0.5.3.tar.bz2</p><p>  #cd ffmpeg-0.5.3<

44、;/p><p>  #./configure --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --disable-ffserver --

45、enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale</p><p>  此處將會(huì)檢測(cè)libx264 libxvid安裝是否正確,以及版本是否是ffmpeg支持的,配置無(wú)誤則編譯:</p><p><b>  #make</b></p><p>  #make i

46、nstall</p><p>  交叉編譯OpenCV</p><p>  #tar –jxvf OpenCV-2.0.0.tar.bz2</p><p>  #cd OpenCV-2.0.0</p><p>  #vim configure</p><p>  定位到大概18182行的位置,在“FFMPEGLIBS=

47、"-lavcodec -lavformat” 后添加 “-lswscale”, 修改之后變?yōu)椋骸癋FMPEGLIBS="-lavcodec -lavformat -lswscale $FFMPEG_SWSCALE_LIBS"”,然后保存退出。</p><p>  若不修改此信息,OpenCV將不支持libswscale,即無(wú)法進(jìn)行圖像格式轉(zhuǎn)換。</p><p>

48、;  # ./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --without-quicktime --without-1394libs --with-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=arm-l

49、inux-g++ CPPFLAGS=-I/root/arm/4.3.2/arm-none-linux-gnueabi/include/ LDFLAGS=-L/root/arm/4.3.2/arm-none-linux-gnueabi/lib --with-v4l --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi CXXFLAGS=-O2</p><p>  確認(rèn)所需

50、庫(kù)都支持,則進(jìn)行編譯,安裝:</p><p><b>  #make</b></p><p>  #make install</p><p>  將交叉編譯好的庫(kù)文件拷貝到開(kāi)發(fā)板</p><p>  通過(guò)Xshell將/root/arm/4.3.2/arm-none-linux-gnueabi/lib目錄下生成的所有庫(kù)文

51、件拷貝到開(kāi)發(fā)板的/lib目錄下,若拷貝至其他目錄則需指定LD-LIBRARY-PATH,/lib目錄則可避免此問(wèn)題。具體操作如下:</p><p>  #cp /root/arm/4.3.2/arm-none-linux-gnueabi/lib/lib* /root/worknfs/arm-opencv-2.0</p><p><b>  執(zhí)行如下操作:</b><

52、;/p><p>  #cp /mnt/arm-opencv-2.0/lib* /lib</p><p>  至此OpenCV2.0及其依賴(lài)庫(kù)已成功移植到GT2440開(kāi)發(fā)板。</p><p><b>  4 智能循跡實(shí)現(xiàn)</b></p><p>  通過(guò)對(duì)圖像進(jìn)行處理,找到圖像中的障礙物,并把其邊緣坐標(biāo)提取出來(lái),根據(jù)坐標(biāo)確定

53、障礙物位置與所占最大矩形面積,并根據(jù)上述信息規(guī)劃路線,圖像處理流程如圖4.1:</p><p><b>  圖4.1</b></p><p><b>  4.1 二值化</b></p><p>  一幅圖像包括目標(biāo)物體、背景還有噪聲,要想從多值的數(shù)字圖像中直接提取出目標(biāo)物體,最常用的方法就是設(shè)定一個(gè)全局的閾值T,用T將圖

54、像的數(shù)據(jù)分成兩部分:大于T的像素群和小于T的像素群。將大于T的像素群的像素值設(shè)定為白色(或者黑色),小于T的像素群的像素值設(shè)定為黑色(或者白色)。下面為二值化的實(shí)現(xiàn)代碼:</p><p>  void Gray2Binary(IplImage *In_img,unsigned char threshold)</p><p>  { CvScalar s;</p><

55、p><b>  int x,y;</b></p><p>  unsigned char Binary;</p><p>  for(y=0;y<In_img->height;y++)</p><p>  for(x=0;x<In_img->width;x++)</p><p><b&

56、gt;  {</b></p><p>  s=cvGet2D(In_img,y,x);</p><p>  if(s.val[0]>threshold)</p><p><b>  Binary=0;</b></p><p>  else Binary=255;</p><p&

57、gt;  s.val[0]=(double)Binary;</p><p>  cvSet2D(In_img,y,x,s);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  4.2 邊緣檢測(cè)</b></p>

58、<p>  邊緣(edge)是指圖像局部強(qiáng)度變化最顯著的部分。主要存在于目標(biāo)與目標(biāo)、目標(biāo)與背景、區(qū)域與區(qū)域(包括不同色彩)之間,是圖像分割、紋理特征和形狀特征等圖像分析的重要基礎(chǔ)。圖像強(qiáng)度的顯著變化可分為:階躍變化函數(shù),即圖像強(qiáng)度在不連續(xù)處的兩邊的像素灰度值有著顯著的差異;線條變化函數(shù),即圖像強(qiáng)度突然從一個(gè)值變化到另一個(gè)值,保持一較小行程后又回到原來(lái)的值。圖像的邊緣有方向和幅度兩個(gè)屬性,沿邊緣方向像素變化平緩,垂直于邊緣方

59、向像素變化劇烈.邊緣上的這種變化可以用微分算子檢測(cè)出來(lái),通常用一階或二階導(dǎo)數(shù)來(lái)檢測(cè)邊緣。</p><p>  本程序通過(guò)邊緣檢測(cè),從而找到圖像中的有具體輪廓的物體,根據(jù)存有邊緣信息的數(shù)組,我們可以得到邊緣的長(zhǎng)度,邊緣所包括的面積,邊緣線上各點(diǎn)的坐標(biāo),我們就可根據(jù)這些信息得到將阻礙小車(chē)運(yùn)行的障礙物的具體位置和所在矩形的最大面積。</p><p>  char* filename = argc

60、 == 2 ? argv[1] : (char*)"fruits.jpg";</p><p>  if( (image = cvLoadImage( filename, 1)) == 0 )return -1;</p><p>  cedge = cvCreateImage(cvSize(image->width,image->height), IP

61、L_DEPTH_8U, 3);gray = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 1);edge = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 1);cvCvtColor(image, gray, CV_BGR2GRAY);

62、</p><p>  cvNamedWindow(wndname, 1);cvCreateTrackbar(tbarname, wndname, &edge_thresh, 100, on_trackbar);</p><p><b>  a)源圖像</b></p><p>  b)二值化圖像

63、 c)邊緣檢測(cè)效果圖</p><p><b>  圖4.2</b></p><p><b>  4.3 路徑提取</b></p><p>  通過(guò)對(duì)視頻幀的處理,將每幀圖像進(jìn)行二值化、膨脹腐蝕等操作將障礙物的輪廓提取出來(lái),并獲得輪廓的最大和最小的X坐標(biāo)和Y坐標(biāo),將障礙物設(shè)定為一個(gè)矩形,并通過(guò)坐標(biāo)值來(lái)確定

64、小車(chē)行進(jìn)路徑。流程圖如圖4.3所示(tnum為障礙物個(gè)數(shù)、Fx和Fy為車(chē)頭中心位置的x和y坐標(biāo)、csize為小車(chē)寬度、keep、left、right分別為控制小車(chē)的3個(gè)狀態(tài)):</p><p><b>  圖4.3</b></p><p><b>  5 電機(jī)控制設(shè)計(jì)</b></p><p><b>  5.1

65、電機(jī)驅(qū)動(dòng)</b></p><p>  設(shè)備驅(qū)動(dòng)程序是介于硬件和Linux內(nèi)核之間的軟件接口,是一種低級(jí)的、專(zhuān)用于某一硬件的軟件組件。Linux有兩種方式使用設(shè)備驅(qū)動(dòng)程序:直接編澤到內(nèi)核中;在運(yùn)行時(shí)加載(也就是內(nèi)核模塊)。Linux下的設(shè)備驅(qū)動(dòng)程序[7]是一些用于完成不同任務(wù)的函數(shù)的集合,通過(guò)這些函數(shù)使得Linux下的設(shè)備猶如普通文件一般。因此對(duì)于應(yīng)用程序來(lái)說(shuō)設(shè)備只是一個(gè)普通的文件,應(yīng)用程序可以像操作普

66、通文件一樣對(duì)硬件設(shè)備進(jìn)行打開(kāi)、關(guān)閉、讀、寫(xiě)、IO控制等操作。</p><p>  5.1.1 電機(jī)驅(qū)動(dòng)電路</p><p>  L298N是SGS公司的產(chǎn)品,其內(nèi)部包含4通道邏輯驅(qū)動(dòng)電路,即內(nèi)含兩個(gè)H的高電壓大電流雙全橋式驅(qū)動(dòng)器,接受標(biāo)準(zhǔn)TTL邏輯電平信號(hào),可驅(qū)動(dòng)46V、2A以下的電機(jī)。由L298N構(gòu)成的PWM功率放大器的工作形式為單級(jí)可逆變模式、2個(gè)H橋的下側(cè)橋晶體管發(fā)射極在一起,其芯片

67、引腳排列如圖3.1所示,1腳和15腳客單獨(dú)引出連接電流采樣電阻器,形成電流傳感信號(hào)。L298N可驅(qū)動(dòng)兩個(gè)直流電機(jī),OUT1、OUT2和OUT3、OUT4之間分別接2個(gè)直流電機(jī)。5、7、10、12腳接入控制電平,可控制電機(jī)的正反轉(zhuǎn),ENA、ENB接控制使能端,控制電機(jī)的停轉(zhuǎn)。</p><p>  5.1.2 驅(qū)動(dòng)的編譯加載</p><p>  Linux下的驅(qū)動(dòng)主要分為字符設(shè)備驅(qū)動(dòng)、塊設(shè)備驅(qū)

68、動(dòng)和流設(shè)備驅(qū)動(dòng)三類(lèi)。字符設(shè)備是指設(shè)備發(fā)送和接收數(shù)據(jù)以字符的形式進(jìn)行;塊設(shè)備以整個(gè)數(shù)據(jù)緩沖區(qū)為發(fā)送和接收的對(duì)象;流設(shè)備主要應(yīng)用于網(wǎng)絡(luò)通信方面。</p><p>  Linux設(shè)備驅(qū)動(dòng)屬于內(nèi)核的一部分,我們可以通過(guò)兩種方式對(duì)其進(jìn)行編譯和加載:</p><p>  1. 與內(nèi)核一同編譯,使其隨linux的啟動(dòng)而自動(dòng)加載。</p><p>  2. 編譯成一個(gè)可加載和刪除的

69、模塊,在linux運(yùn)行過(guò)程中使用命令對(duì)其進(jìn)行動(dòng)態(tài)的加載和卸載。</p><p>  Linux驅(qū)動(dòng)編寫(xiě)的最小框架如下所示:</p><p>  MODULE_LICENSE(“GPL”);</p><p>  static int__init name_init(void)</p><p><b>  {</b><

70、/p><p>  模塊加載時(shí)執(zhí)行的相關(guān)操作</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  static void__exit name_exit(void)</p><p><b>  {</b

71、></p><p>  模塊卸載時(shí)執(zhí)行的相關(guān)操作</p><p><b>  }</b></p><p>  從上面可以看出,一個(gè)linux最小驅(qū)動(dòng)模塊所必需的組成部分為模塊初始化函數(shù)和模塊卸載函數(shù),其中MODULE_LICENSE(“GPL”)用來(lái)聲明一個(gè)模塊的許可證。</p><p>  當(dāng)內(nèi)核模塊(驅(qū)動(dòng)程序)

72、編譯成功后,可使用命令“insmod模塊文件名稱(chēng)”加載驅(qū)動(dòng)程序。當(dāng)內(nèi)核模塊不再需要時(shí),可使用“rmmod模塊名稱(chēng)”卸載驅(qū)動(dòng)程序。注意:這兩條命令參數(shù)是不同的?!澳K文件名稱(chēng)”是可修改的,而“模塊名稱(chēng)”是編譯時(shí)由源代碼確定的。用戶還可使用命令“l(fā)srmod”查看當(dāng)前加載了哪些驅(qū)動(dòng)程序。</p><p>  5.1.3 直流電機(jī)驅(qū)動(dòng)</p><p>  小車(chē)驅(qū)動(dòng)部分采用直流電機(jī)作為動(dòng)力驅(qū)動(dòng),通

73、過(guò)擴(kuò)展ARM開(kāi)發(fā)板GPIO口實(shí)現(xiàn)對(duì)小車(chē)的運(yùn)動(dòng)控制,采用PWM波實(shí)現(xiàn)小車(chē)的速度控制,擴(kuò)展電路圖如圖5.1:</p><p>  圖5.1 GT2440擴(kuò)展電路接口</p><p>  本程序?qū)﹄姍C(jī)控制只有3個(gè)狀態(tài)(keep 保持當(dāng)前方向前進(jìn)、left 左轉(zhuǎn)90°、right 右轉(zhuǎn)90°)</p><p>  6 模塊聯(lián)合測(cè)試與總結(jié)</p>

74、;<p>  本課題主要有路徑識(shí)別模塊、電機(jī)控制模塊。路徑識(shí)別定位在經(jīng)過(guò)前期的OpenCV的圖像處理過(guò)程,通過(guò)對(duì)攝像頭攝入圖像的處理,根據(jù)所獲得的障礙物的位置規(guī)劃小車(chē)行駛路徑,最終實(shí)現(xiàn)智能循跡。</p><p>  由于車(chē)載攝像頭無(wú)法拍攝俯視圖,若非俯拍則循跡時(shí)的路徑規(guī)劃就必須考慮拍攝角度問(wèn)題,根據(jù)現(xiàn)實(shí)應(yīng)用考慮,若在小范圍的循跡,可采取攝像頭與小車(chē)分離,攝像頭端固定在高處俯拍地面情況,圖片通過(guò)ARM

75、板傳至小車(chē),再通過(guò)小車(chē)使用OpenCV處理規(guī)劃路徑循跡。</p><p>  參考文獻(xiàn)[1] 陳賾,秦貴中,徐華中,王磊.ARM9嵌入式技術(shù)及Linux高級(jí)試驗(yàn)教程 [M].北京:北京航空航天大學(xué)出版社,2005.121-166.</p><p>  [2] 徐虹,何嘉.操作系統(tǒng)試驗(yàn)指導(dǎo)——基于Linux內(nèi)核 [M].北京:清華大學(xué)出版社,2004.122-135.</p>

76、<p>  [3] 譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2005.212-235.</p><p>  [4] 華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心.嵌入式Linux C語(yǔ)言應(yīng)用程序設(shè)計(jì).北京:人民郵電出版社,2007.123-145.</p><p>  [5] 冼進(jìn),許振山,劉崢嶸.嵌入式Linux應(yīng)用開(kāi)發(fā)詳解 [M].北京:電子工業(yè)出版社,2007.56-115.</

77、p><p>  [6] GaryBradsik Adrainkaeherl著,于仕琪 劉瑞錚譯.學(xué)習(xí)Opencv [M].北京:清華大學(xué)出版社,2007.92-135.</p><p>  [7] 葉學(xué)義,莊鎮(zhèn)泉,張?jiān)瞥?一種新穎快速的虹膜定位算法[J] 計(jì)算機(jī)工程與應(yīng)用,2003,,39(30):54-56</p><p>  [8] 孫紀(jì)坤.嵌入式Linux系統(tǒng)開(kāi)

78、發(fā)技術(shù)詳解——基于ARM [M].北京:人民郵電出版社,2006:89-156.</p><p><b>  致 謝:</b></p><p>  本課題之所以能夠順利完成,首先我要感謝我的指導(dǎo)老師**老師。*老師他嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),深深地感染和激勵(lì)著我。從課題的選擇到項(xiàng)目的最終完成,何老師都始終給予我細(xì)心的指導(dǎo)和不懈的支持。四年的大

79、學(xué)時(shí)光稍縱即逝,最終將以畢業(yè)設(shè)計(jì)這最后一次考核而結(jié)束。此次畢業(yè)設(shè)計(jì)課題的研究以及論文的撰寫(xiě)是在我的指導(dǎo)老師**老師的悉心耐心的指導(dǎo)下得以完成的。所以要深深感謝**老師在畢業(yè)設(shè)計(jì)期間對(duì)我無(wú)微不至的指導(dǎo)關(guān)懷和幫助。何老師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、淵博的知識(shí)、對(duì)工作孜孜不倦的敬業(yè)精神,都讓我非常的崇。他是一個(gè)嚴(yán)格要求學(xué)生的老師,又似一個(gè)關(guān)愛(ài)學(xué)生的兄長(zhǎng)。他在我感到迷茫的時(shí)候給我指明了方向,在我畏懼難題不敢向前時(shí)給了我動(dòng)力,使我在這段時(shí)間里獲益匪淺,老師您

80、辛苦了。在此特向**老師表示誠(chéng)摯的敬意,忠誠(chéng)的感謝。</p><p>  在此,我還要感謝在一起愉快的度過(guò)大學(xué)生活的402班同學(xué)們,還有我們一直堅(jiān)持走下來(lái)的項(xiàng)目小組成員,正是由于你們的幫助和支持,我才能克服一個(gè)一個(gè)的困難和疑惑,直至本文的順利完成。 </p><p>  最后當(dāng)然要感謝在大學(xué)四年學(xué)習(xí)和生活中關(guān)心幫助我的所有老師和同學(xué),感謝學(xué)校給了我快樂(lè)的時(shí)光和美好的回憶。</p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論