2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

2、t; 專 業(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)狀和趨勢3</p><p>  1.2 課題研究的意義3</p><p>  2 智能循跡的技術(shù)背景5</p><p>  2.1

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

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

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

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

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

9、下礦藏探測的功能。 循跡小車的研究重點(diǎn)是對軌跡的自動識別與自動校正,并在行進(jìn)穩(wěn)定的情況下進(jìn)行其他拓展功能,這對整個小車系統(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)狀和趨勢</p><p>  目前,在企業(yè)生產(chǎn)技術(shù)不斷提高、對自動化技術(shù)要求不斷加深的環(huán)境下,智能車輛以及在智能車輛基礎(chǔ)上開發(fā)出來的產(chǎn)品已成為自動化物流運(yùn)輸、柔性生產(chǎn)組織等系統(tǒng)的關(guān)鍵設(shè)備。世界上許多國家都在積極進(jìn)行智能車輛的研究和開發(fā)設(shè)計(jì)。移動機(jī)器人是機(jī)器人學(xué)中的一個重要分支,出現(xiàn)于20世紀(jì)06年代。當(dāng)時斯坦福研究院(SRI)的Nils Nilssen和Cha

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

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

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

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

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

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

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

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

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

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

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

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

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

27、<p>  圖3.1 Xshell會話設(shè)置</p><p>  會話設(shè)置成功后,鏈接串口線,并將串口設(shè)置為與目標(biāo)板相同的波特率115200。開啟目標(biāo)板電源就可以對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ù)庫)</p><p>  ----libpng-1.2.18.tar.gz(png函數(shù)庫)</p><p>  ----zlib-1.2.3.tar.gz(z函數(shù)庫)</p><p>  ----x264-snapshot-20100410-2245.t

29、ar.bz2(x264函數(shù)庫)</p><p>  ----yasm-0.7.2.tar.gz(匯編編譯器,編譯x264時需要用到)</p><p>  ----xvidcore-1.3.2.tar.gz(xvid函數(shù)庫)</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>  說明:(1)以上資源包中ffmpeg是為了OpenCV能夠處理視頻,而ffmpeg依賴于x264和xvid兩個庫,而交叉編譯libx264時需要

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所需庫</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>  此處將會檢測libx264 libxvid安裝是否正確,以及版本是否是ffmpeg支持的,配置無誤則編譯:</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,即無法進(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、庫都支持,則進(jìn)行編譯,安裝:</p><p><b>  #make</b></p><p>  #make install</p><p>  將交叉編譯好的庫文件拷貝到開發(fā)板</p><p>  通過Xshell將/root/arm/4.3.2/arm-none-linux-gnueabi/lib目錄下生成的所有庫文

51、件拷貝到開發(fā)板的/lib目錄下,若拷貝至其他目錄則需指定LD-LIBRARY-PATH,/lib目錄則可避免此問題。具體操作如下:</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及其依賴庫已成功移植到GT2440開發(fā)板。</p><p><b>  4 智能循跡實(shí)現(xiàn)</b></p><p>  通過對圖像進(jìn)行處理,找到圖像中的障礙物,并把其邊緣坐標(biāo)提取出來,根據(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è)定一個全局的閾值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 邊緣檢測</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)度突然從一個值變化到另一個值,保持一較小行程后又回到原來的值。圖像的邊緣有方向和幅度兩個屬性,沿邊緣方向像素變化平緩,垂直于邊緣方

59、向像素變化劇烈.邊緣上的這種變化可以用微分算子檢測出來,通常用一階或二階導(dǎo)數(shù)來檢測邊緣。</p><p>  本程序通過邊緣檢測,從而找到圖像中的有具體輪廓的物體,根據(jù)存有邊緣信息的數(shù)組,我們可以得到邊緣的長度,邊緣所包括的面積,邊緣線上各點(diǎn)的坐標(biāo),我們就可根據(jù)這些信息得到將阻礙小車運(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)邊緣檢測效果圖</p><p><b>  圖4.2</b></p><p><b>  4.3 路徑提取</b></p><p>  通過對視頻幀的處理,將每幀圖像進(jìn)行二值化、膨脹腐蝕等操作將障礙物的輪廓提取出來,并獲得輪廓的最大和最小的X坐標(biāo)和Y坐標(biāo),將障礙物設(shè)定為一個矩形,并通過坐標(biāo)值來確定

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

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

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

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

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

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

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

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

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

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

75、板傳至小車,再通過小車使用OpenCV處理規(guī)劃路徑循跡。</p><p>  參考文獻(xiàn)[1] 陳賾,秦貴中,徐華中,王磊.ARM9嵌入式技術(shù)及Linux高級試驗(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)見嵌入式培訓(xùn)中心.嵌入式Linux C語言應(yīng)用程序設(shè)計(jì).北京:人民郵電出版社,2007.123-145.</p><p>  [5] 冼進(jìn),許振山,劉崢嶸.嵌入式Linux應(yīng)用開發(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)開

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),深深地感染和激勵著我。從課題的選擇到項(xiàng)目的最終完成,何老師都始終給予我細(xì)心的指導(dǎo)和不懈的支持。四年的大

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

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

溫馨提示

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

評論

0/150

提交評論