基于arm的避障小車的結題報告_第1頁
已閱讀1頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p><b>  第一章 緒論3</b></p><p>  第二章 研究內(nèi)容和意義4</p><p>  第三章 預期達到的技術目標和擬解決的技術問題5</p><p>  第四章 研究、試驗方法和技術路線7</p>&

2、lt;p>  第五章 實現(xiàn)過程7</p><p><b>  5.1硬件7</b></p><p><b>  5.2軟件9</b></p><p>  5.3作品成型21</p><p>  第六章 課題總結22</p><p><b>  第一章

3、 緒論</b></p><p>  視頻采集技術目前最大的應用領域還是安防監(jiān)控,隨著國內(nèi)經(jīng)濟的發(fā)展和與國際經(jīng)濟的接軌,工業(yè)檢測和醫(yī)療領域?qū)Χ嗦凡杉男枨笠苍诓粩嗟脑黾?。在交通、機器視覺、多媒體等領域也有重要的應用。在交通領域的應用主要是路面監(jiān)控、違章抓拍、停車場收費、高速路收費;機器視覺領域的應用主要是生產(chǎn)過程監(jiān)控、產(chǎn)品篩選等;多媒體領域的應用主要是多路視頻采集后大屏顯示、電視節(jié)目監(jiān)播等。最后,視頻采

4、集應用的領域還包括紡織、印刷、印鈔等大幅面圖像檢測應用。</p><p>  基于圖像的視覺跟蹤伺服控制系統(tǒng),視覺伺服誤差直接定義在圖像特征空間,攝像機觀察到的特征信息直接用于反饋,不用對三維姿態(tài)進行估計?;趫D像的視覺伺服控制系統(tǒng)中,二維圖像特征通過雅可比矩陣與三維笛卡爾坐標系中的三維場景相聯(lián)系,所以這種控制系統(tǒng)中雅可比矩陣的求解是關鍵。確定雅可基于圖像的視覺伺服控比矩陣可以通過經(jīng)驗法、在線估計法、學習法等。經(jīng)

5、驗法主要是通過攝像機標定或先驗模型知識得到比較準確的雅可比矩陣;在線估計的方法可以事先不用進行攝像機標定,但存在雅可比矩陣的初值選擇問題;學習方法主要是通過離線示教、自我學習、自我決策的人工神經(jīng)網(wǎng)絡的方法,這種方法需要大量樣本才能計算準確?;趫D像的視覺伺服控制系統(tǒng)可以不用3D重建,直接用圖像特征控制執(zhí)行機構運動。與基于位置的方法相比,基于圖像的方法受傳感器模型、運動學方程、攝像機標定所到來的誤差的影響較小,靜態(tài)定位的精度也比較高,但動

6、態(tài)估計雅可比矩陣時,需要不斷進行更新和求逆,計算時間上需要進一步優(yōu)化;另外,由于系統(tǒng)是的且具有非線性解,因此不能保證在整個任務空間中都是收斂的。</p><p>  第二章 研究內(nèi)容和意義</p><p>  視覺跟蹤系統(tǒng)可分為基于位置和基于圖像兩種工作方式。</p><p>  基于位置的視覺跟蹤伺服控制系統(tǒng),視覺伺服誤差定義在三維笛卡爾坐標空間,視覺特征信息用來

7、估計執(zhí)行機構末端與目標的相對位姿。這種方法的主要優(yōu)點是直接在三維空間控制執(zhí)行機構運動,另外它把視覺重構問題從執(zhí)行機構控制中分離出來,這樣可以分別對二者進行研究,但這種方法一般需要對視覺系統(tǒng)和執(zhí)行機構進行標定,而且由于要對圖像進行解釋,因而增加了計算量,另外,這種方法受傳感器模型、運動學方程、攝像機標定所帶來的誤差影響較大。</p><p>  基于圖像的視覺跟蹤伺服控制系統(tǒng),視覺伺服誤差直接定義在圖像特征空間,攝

8、像機觀察到的特征信息直接用于反饋,不用對三維姿態(tài)進行估計?;趫D像的視覺伺服控制系統(tǒng)中,二維圖像特征通過雅可比矩陣與三維笛卡爾坐標系中的三維場景相聯(lián)系,所以這種控制系統(tǒng)中雅可比矩陣的求解是關鍵。確定雅可基于圖像的視覺伺服控比矩陣可以通過經(jīng)驗法、在線估計法、學習法等。經(jīng)驗法主要是通過攝像機標定或先驗模型知識得到比較準確的雅可比矩陣;在線估計的方法可以事先不用進行攝像機標定,但存在雅可比矩陣的初值選擇問題;學習方法主要是通過離線示教、自我學

9、習、自我決策的人工神經(jīng)網(wǎng)絡的方法,這種方法需要大量樣本才能計算準確?;趫D像的視覺伺服控制系統(tǒng)可以不用3D重建,直接用圖像特征控制執(zhí)行機構運動。與基于位置的方法相比,基于圖像的方法受傳感器模型、運動學方程、攝像機標定所到來的誤差的影響較小,靜態(tài)定位的精度也比較高,但動態(tài)估計雅可比矩陣時,需要不斷進行更新和求逆,計算時間上需要進一步優(yōu)化;另外,由于系統(tǒng)是的且具有非線性解,因此不能保證在整個任務空間中都是收斂的。</p>&l

10、t;p>  本課題的工作主要基于uclinux操作系統(tǒng),實現(xiàn)對特定障礙的監(jiān)測,以及壁障預警工作。</p><p>  本立項實現(xiàn)的目標包括如下幾個方面:</p><p>  ◇研究相關計算機視頻圖像采集的理論和方法</p><p><b>  ◇研究壁障技術</b></p><p>  ◇從復雜場景中提取特征障礙信

11、息</p><p>  ◇對障礙信息做出判斷,預警</p><p>  第三章 預期達到的技術目標 和擬解決的技術問題</p><p>  一、計算機視覺圖像處理技術主要有以下凡項內(nèi)容:</p><p>  1、圖像數(shù)字化和壓縮編碼</p><p>  圖像數(shù)字化技術是把連續(xù)圖像信號變?yōu)殡x

12、散的數(shù)字信號,適應數(shù)字計算機或其它數(shù)字設備的運算處理。壓縮編碼技術是減少描述圖像的數(shù)據(jù)量即比特率,以便節(jié)省傳輸、處理時間和存儲器容量。</p><p><b>  2、圖像增強和復原</b></p><p>  圖像增強是突出圖像中感興趣的部分,圖像復原是使失真圖像盡可能恢復本來面貌。</p><p><b>  3、圖像分割<

13、/b></p><p>  圖像中包含的物體,按其灰度、色彩或幾何特性分割,并進行分析處理,從中提取數(shù)據(jù)等有效分量。這是進一步進行圖像處理、模式識別和機器視覺等技術的基礎。</p><p><b>  4、圖像分類</b></p><p>  圖像分類是圖像處理技術的深入和發(fā)展,也可以認為是模式識別的一個分支。其主要內(nèi)容是在圖像經(jīng)過某些預

14、處理(壓縮、增強、復原)后,將圖像中有用物體的特征進行特征分割、特征選擇,進而進行判決分類。</p><p><b>  5、圖像重建</b></p><p>  圖像重建是對一些三維物體,應用X射線、超聲波等物理方法獲取物體內(nèi)部結構的數(shù)據(jù)。再將此數(shù)據(jù)進行運算處理構成物體內(nèi)部某些部位的圖像。</p><p>  第四章 研究、試驗方法和技術路線

15、</p><p>  圖1:初期整個系統(tǒng)簡要分析。</p><p>  圖2:修改后整個系統(tǒng)簡要分析(即技術線路)。</p><p><b>  第五章 實現(xiàn)過程</b></p><p><b>  5.1 硬件</b></p><p><b>  1、應用器件&l

16、t;/b></p><p>  ARM7開發(fā)板,L298 ,DS18B20, ST188,電容,電阻等</p><p><b>  2、電路原理圖</b></p><p><b>  圖3</b></p><p><b>  3、成型電路</b></p>&

17、lt;p><b>  圖4</b></p><p><b>  5.2 軟件</b></p><p><b>  1、軟件結構圖</b></p><p><b>  圖5</b></p><p><b>  2、主要程序</b>

18、</p><p>  #include "stdafx.h"</p><p>  #include "cv.h"</p><p>  #include "highgui.h"</p><p>  #include <stdio.h></p><p>

19、;  #include <ctype.h></p><p>  IplImage *image = 0, *hsv = 0, *hue = 0, *mask = 0, *backproject = 0, *histimg = 0;</p><p>  //用HSV中的Hue分量進行跟蹤</p><p>  CvHistogram *hist = 0;//

20、直方圖類</p><p>  int backproject_mode = 0;</p><p>  int select_object = 0;</p><p>  int track_object = 0;</p><p>  int show_hist = 1;</p><p>  CvPoint origin;

21、</p><p>  CvRect selection;</p><p>  CvRect track_window;</p><p>  CvBox2D track_box;//Meanshift跟蹤算法返回的Box類</p><p>  CvConnectedComp track_comp;</p><p>  i

22、nt hdims = 16;// 劃分直方圖bins的個數(shù),越多越精確</p><p>  float hranges_arr[] = {0,180};//像素值的范圍</p><p>  float* hranges = hranges_arr;//用于初始化CvHistogram類</p><p>  int vmin = 90, vmax = 256, smi

23、n = 90;</p><p>  CvScalar hsv2rgb( float hue );//用于將Hue量轉(zhuǎn)換成RGB量 這里沒寫</p><p>  void loadTemplateImage()</p><p><b>  {</b></p><p>  IplImage *tempimage = c

24、vLoadImage("red.jpg",1);</p><p>  cvCvtColor( tempimage, hsv, CV_BGR2HSV );</p><p>  int _vmin = vmin, _vmax = vmax;</p><p>  cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,

25、_vmax),0),</p><p>  cvScalar(180,256,MAX(_vmin,_vmax),0), mask );</p><p>  cvSplit( hsv, hue, 0, 0, 0 );</p><p>  selection.x = 1;</p><p>  selection.y = 1;</p>

26、;<p>  selection.width = 640-1;</p><p>  selection.height= 480-1;</p><p>  cvSetImageROI( hue, selection );</p><p>  cvSetImageROI( mask, selection );</p><p>

27、  cvCalcHist( &hue, hist, 0, mask );</p><p>  float max_val = 0.f;</p><p>  cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );</p><p>  cvConvertScale( hist->bins, his

28、t->bins, max_val ? 255. / max_val : 0., 0 );</p><p>  cvResetImageROI( hue );</p><p>  cvResetImageROI( mask );</p><p>  track_window = selection;</p><p>  track

29、_object = 1;</p><p>  cvZero( histimg );</p><p>  int bin_w = histimg->width / hdims;</p><p>  for(int i = 0; i < hdims; i++ )</p><p><b>  {</b>&l

30、t;/p><p>  int val = cvRound( cvGetReal1D(hist->bins,i)*histimg->height/255 );</p><p>  CvScalar color = hsv2rgb(i*180.f/hdims);</p><p>  cvRectangle( histimg, cvPoint(i*bin_

31、w,histimg->height),</p><p>  cvPoint((i+1)*bin_w,histimg->height - val),</p><p>  color, -1, 8, 0 );</p><p><b>  }</b></p><p>  cvReleaseImage(&t

32、empimage);</p><p><b>  }</b></p><p>  void on_mouse( int event, int x, int y, int flags, void* param )//該函數(shù)用于選擇跟蹤目標</p><p><b>  { </b></p><p>

33、  if( !image ) </p><p><b>  return; </b></p><p>  if( image->origin ) </p><p>  y = image->height - y; </p><p>  if( select_object )//如

34、果處于選擇跟蹤物體階段,則對selection用當前的鼠標位置進行設置 </p><p><b>  { </b></p><p>  selection.x = MIN(x,origin.x); </p><p>  selection.y = MIN(y,origin.y); </p><p>  se

35、lection.width = selection.x + CV_IABS(x - origin.x); </p><p>  selection.height = selection.y + CV_IABS(y - origin.y); </p><p>  selection.x = MAX( selection.x, 0 ); </p><p>  se

36、lection.y = MAX( selection.y, 0 ); </p><p>  selection.width = MIN( selection.width, image->width ); </p><p>  selection.height = MIN( selection.height, image->height ); </p

37、><p>  selection.width -= selection.x; </p><p>  selection.height -= selection.y;</p><p><b>  } </b></p><p>  switch( event ) </p><p><b>  

38、{</b></p><p>  case CV_EVENT_LBUTTONDOWN://開始點擊選擇跟蹤物體</p><p>  origin = cvPoint(x,y);</p><p>  selection = cvRect(x,y,0,0);//坐標</p><p>  select_object = 1;//表明開始進

39、行選取</p><p><b>  break;</b></p><p>  case CV_EVENT_LBUTTONUP:</p><p>  select_object = 0;//選取完成 </p><p>  if( selection.width > 0 && selection.hei

40、ght > 0 )</p><p>  track_object = -1;//如果選擇物體有效,則打開跟蹤功能</p><p><b>  break;</b></p><p><b>  }</b></p><p>  CvScalar hsv2rgb( float hue )//用于將H

41、ue量轉(zhuǎn)換成RGB量</p><p><b>  {</b></p><p>  int rgb[3] , p, sector;</p><p>  static const int sector_data[][3]=</p><p>  {{0,2,1}, {1,2,0}, {1,0,2}, {2,0,1}, {2

42、,1,0}, {0,1,2}};</p><p>  hue *= 0.033333333333333333333333333333333f;</p><p>  sector = cvFloor(hue);</p><p>  p = cvRound(255*(hue - sector));</p><p>  p ^= sector &a

43、mp; 1 ? 255 : 0;</p><p>  rgb[sector_data[sector][0]] = 255;</p><p>  rgb[sector_data[sector][1]] = 0;</p><p>  rgb[sector_data[sector][2]] = p;</p><p>  return cvScala

44、r(rgb[2], rgb[1], rgb[0],0);//返回對應的顏色值</p><p><b>  }</b></p><p>  int main( int argc, char** argv )</p><p><b>  {</b></p><p>  CvCapture* captur

45、e = 0;</p><p>  if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))</p><p>  capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );//打開攝

46、像頭</p><p>  else if( argc == 2 )</p><p>  capture = cvCaptureFromAVI( argv[1] );//打開AVI文件 </p><p>  if( !capture )</p><p><b>  {</b></p><p>  f

47、printf(stderr,"Could not initialize capturing...\n");//打開視頻流失敗處理</p><p>  return -1;</p><p><b>  }</b></p><p>  printf( "Hot keys: \n"</p><

48、;p>  "\tESC - quit the program\n"</p><p>  "\tc - stop the tracking\n"</p><p>  "\tb - switch to/from backprojection view\n"</p><p>  "\th - sh

49、ow/hide object histogram\n"</p><p>  "To initialize tracking, select the object with mouse\n" );////打印出程序功能列表</p><p>  cvNamedWindow( "Histogram", 0 );</p><p&

50、gt;  cvNamedWindow( "CamShiftDemo", 0 );//建立視頻窗口</p><p>  cvSetMouseCallback( "CamShiftDemo", on_mouse, 0 );// 設置鼠標回調(diào)函數(shù)</p><p>  cvCreateTrackbar( "Vmin", "Cam

51、ShiftDemo", &vmin, 256, 0 );//建立滑動條</p><p>  cvCreateTrackbar( "Vmax", "CamShiftDemo", &vmax, 256, 0 );</p><p>  cvCreateTrackbar( "Smin", "CamShi

52、ftDemo", &smin, 256, 0 );</p><p>  for(;;)//進入視頻幀處理主循環(huán)</p><p><b>  { </b></p><p>  IplImage* frame = 0;</p><p>  int i, bin_w, c;</p><p&

53、gt;  frame = cvQueryFrame( capture );</p><p>  if( !frame )</p><p><b>  break;</b></p><p>  cvAnd( backproject, mask, backproject, 0 );//得到反向投影圖mask內(nèi)的內(nèi)容</p><p

54、>  cvCamShift( backproject, track_window,</p><p>  cvTermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ),</p><p>  &track_comp, &track_box );//使用MeanShift算法對backproject中的內(nèi)容進行搜索,

55、返回跟蹤結果</p><p>  track_window = track_comp.rect;//得到跟蹤結果的矩形框</p><p><b>  }</b></p><p>  if( select_object && selection.width > 0 && selection.height &g

56、t; 0 )//如果正處于物體選擇,畫出選擇框</p><p><b>  {</b></p><p>  cvSetImageROI( image, selection );</p><p>  cvXorS( image, cvScalarAll(255), image, 0 );</p><p>  cvReset

57、ImageROI( image );</p><p><b>  }</b></p><p>  cvShowImage( "CamShiftDemo", image );//顯示視頻和直方圖</p><p>  cvShowImage( "Histogram", histimg );</p>

58、<p>  c = cvWaitKey(10);</p><p>  if( c == 27 )break;</p><p>  switch( c )</p><p><b>  {</b></p><p><b>  case 'b':</b></p&g

59、t;<p>  backproject_mode ^= 1;break;</p><p><b>  case 'c':</b></p><p>  track_object = 0;cvZero( histimg );break;</p><p>  case 'h':show_hist ^= 1

60、;</p><p>  if( !show_hist )</p><p>  cvDestroyWindow( "Histogram" );</p><p>  default: ;</p><p><b>  }</b></p><p><b>

61、;  }</b></p><p>  cvReleaseCapture( &capture ); </p><p>  cvDestroyWindow("CamShiftDemo"); </p><p><b>  return 0;</b></p><p><b

62、>  }</b></p><p>  #ifdef _EiC</p><p>  main(1,"camshiftdemo.c");</p><p><b>  #endif</b></p><p><b>  5.3 作品成型</b></p>&

63、lt;p>  作品成型后如圖所示:</p><p><b>  圖6</b></p><p><b>  第六章 課題總結</b></p><p>  將近三個月的課題研究,我們基本上完成了題為小車的制作,作品基本能完成要求的功能。在此期間經(jīng)過不斷地學習與探索,使我們了解了ARM的工作原理及其應用。在電路原理圖到電路

64、成型的整個過程中,使我們深刻的了解到各種電子器件的電氣特性以及工作環(huán)境,尤其是要參考現(xiàn)場環(huán)境因素。實現(xiàn)了小車通過紅外傳感器的準確巡線,驅(qū)動模塊正常工作。還有通過軟件的調(diào)試使四位共陰數(shù)碼管實現(xiàn)精確計時。</p><p>  指導老師把設計和制作的任務完全交給了我們,我們得自選方案,畫好設計所需的電路圖,還要從硬件和軟件兩個方面著手開展我們的設計與制作。這和我們以前做的課程設計有很大的不同,一是沒有現(xiàn)成的方案供選擇,

65、二是沒有現(xiàn)成的電路圖供參考,三是沒有類似的算法和程序供使用。我們初期復習了單片機的基礎知識,因為智能小車控制的核心部件是單片機,然后我們從小車需要完成的不同任務著手查閱了大量的資料,確定小車制作需要的控制模塊。確定好控制模塊后,我們開始動手制作各個相關的模塊,同時還要把控制各個模塊的程序?qū)懞貌⑼瓿上嚓P的硬件和軟件的調(diào)試。 </p><p>  此次設計涉及到電氣專業(yè)的許多主干課程:模電(放大器和光電隔離)、數(shù)電(

溫馨提示

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

評論

0/150

提交評論