機(jī)器人操作系統(tǒng)(ROS)課件8.1機(jī)器視覺(jué)_第1頁(yè)
機(jī)器人操作系統(tǒng)(ROS)課件8.1機(jī)器視覺(jué)_第2頁(yè)
機(jī)器人操作系統(tǒng)(ROS)課件8.1機(jī)器視覺(jué)_第3頁(yè)
機(jī)器人操作系統(tǒng)(ROS)課件8.1機(jī)器視覺(jué)_第4頁(yè)
機(jī)器人操作系統(tǒng)(ROS)課件8.1機(jī)器視覺(jué)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

機(jī)器人操作系統(tǒng)(ROS)機(jī)器人操作系統(tǒng)(ROS)機(jī)器視覺(jué)8.1機(jī)器人操作系統(tǒng)(ROS)8.1機(jī)器視覺(jué)機(jī)器視覺(jué)作為人工智能技術(shù)的一個(gè)重要分支,近些年發(fā)展迅速。其主要原理為通過(guò)計(jì)算機(jī)和相機(jī),對(duì)生物的視覺(jué)系統(tǒng)進(jìn)行模擬,將被攝目標(biāo)的信息轉(zhuǎn)換成可以被計(jì)算機(jī)進(jìn)行處理的圖像信息。并根據(jù)其圖像特征,經(jīng)由圖像處理系統(tǒng),代替人類(lèi)對(duì)目標(biāo)進(jìn)行的識(shí)別、檢測(cè)、分類(lèi)、跟蹤等功能。機(jī)器人操作系統(tǒng)(ROS)8.1.1相機(jī)驅(qū)動(dòng)安裝本節(jié)使用的攝像頭品牌為RMONCAM林柏視,如圖8-1所示。$sudoapt-getinstallros-melodic-usb-cam運(yùn)行以下命令下載攝像頭驅(qū)動(dòng)(具體版本視安裝的ros版本決定),如果系統(tǒng)已經(jīng)安裝了驅(qū)動(dòng),則會(huì)顯示如右圖所示的結(jié)果:安裝攝像頭驅(qū)動(dòng)結(jié)果圖林柏視相機(jī)機(jī)器人操作系統(tǒng)(ROS)8.1.1相機(jī)驅(qū)動(dòng)安裝下面進(jìn)行相機(jī)測(cè)試,運(yùn)行以下命令啟動(dòng)攝像頭驅(qū)動(dòng)功能包,運(yùn)行結(jié)果如下圖所示:$roslaunchusb_camusb_cam-test.launch此時(shí)出現(xiàn)的圖像一般為電腦自帶的攝像頭,如果電腦不帶攝像頭且沒(méi)有接入攝像頭,就不會(huì)出現(xiàn)該界面。一般電腦的攝像頭默認(rèn)為video0,外部接入的USB攝像頭編號(hào)視實(shí)際情況而定(本節(jié)攝像頭設(shè)備號(hào)為video2)。機(jī)器人操作系統(tǒng)(ROS)8.1.1相機(jī)驅(qū)動(dòng)安裝如果電腦沒(méi)有自帶攝像頭,外部接入的攝像頭就會(huì)為video0,運(yùn)行以下命令查看攝像頭端口號(hào),運(yùn)行結(jié)果如下圖所示:$ls/dev/當(dāng)電腦自帶攝像頭且外接有攝像頭時(shí),usb_cam-test.launch只會(huì)調(diào)用自帶的攝像頭,此時(shí)如果要調(diào)用外接攝像頭,需運(yùn)行以下命令修改usb_cam-test.launch,運(yùn)行結(jié)果如下圖所示。機(jī)器人操作系統(tǒng)(ROS)8.1.1相機(jī)驅(qū)動(dòng)安裝將video_device的value從“/dev/video0”變成“/dev/video2”,這樣就能通過(guò)usb_cam-test.launch調(diào)用外接攝像頭,usb_cam-test.launch內(nèi)容如下所示:<launch><nodename="usb_cam"pkg="usb_cam"type="usb_cam_node"output="screen"><paramname="video_device"value="/dev/video0"/><paramname="image_width"value="640"/><paramname="image_height"value="480"/><paramname="pixel_format"value="yuyv"/><paramname="camera_frame_id"value="usb_cam"/><paramname="io_method"value="mmap"/></node></launch>修改完usb_cam-test.launch,運(yùn)行以下命令重新啟動(dòng)攝像頭驅(qū)動(dòng)功能包,此時(shí)啟動(dòng)的攝像頭是外接攝像頭,運(yùn)行結(jié)果如右圖所示:$roslaunchusb_camusb_cam-test.launch機(jī)器人操作系統(tǒng)(ROS)8.1.2通過(guò)rviz顯示圖像首先通過(guò)如下命令查看攝像頭發(fā)布的話(huà)題列表,運(yùn)行結(jié)果如圖8-7所示:$rostopiclist可以看到/usb_cam/image_raw是攝像頭功能包發(fā)布的圖像話(huà)題。機(jī)器人操作系統(tǒng)(ROS)8.1.2通過(guò)rviz顯示圖像運(yùn)行以下命令打開(kāi)rviz:$rosrunrvizrviz點(diǎn)擊左下角Add,選擇Image,確定并將其勾選,rviz添加Image界面如圖8-9所示機(jī)器人操作系統(tǒng)(ROS)8.1.2通過(guò)rviz顯示圖像然后修改Image的ImageTopic為/usb_cam/image_raw,即可通過(guò)rviz調(diào)用攝像頭顯示圖像,顯示結(jié)果如圖所示。機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定我們所處的世界是三維的,而照片是二維的。相機(jī)的內(nèi)參標(biāo)定就是假定相機(jī)符合針孔相機(jī)模型,通過(guò)內(nèi)參的標(biāo)定求解模型的參數(shù),以達(dá)到用簡(jiǎn)單的數(shù)學(xué)模型來(lái)表達(dá)復(fù)雜成像過(guò)程的目的,并求解出成像的反過(guò)程。而且由于鏡頭徑向曲率產(chǎn)生的徑向畸變,以及相機(jī)組裝過(guò)程中不能使透鏡嚴(yán)格和成像平面平行而產(chǎn)生的切向畸變,會(huì)在圖像的數(shù)據(jù)處理中產(chǎn)生誤差,因此需要針對(duì)攝像頭的參數(shù)進(jìn)行標(biāo)定。本節(jié)采用的是基于ROS的可對(duì)單目和雙目相機(jī)標(biāo)定的camera_calibration功能包。機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定在進(jìn)行標(biāo)定之前,需要先準(zhǔn)備一個(gè)尺寸已知的標(biāo)定板。本書(shū)采用如下圖所示的棋盤(pán)格標(biāo)定板,每個(gè)棋盤(pán)格的邊長(zhǎng)為0.024m。實(shí)際標(biāo)定過(guò)程中檢測(cè)的為標(biāo)定板內(nèi)部的角點(diǎn),標(biāo)定的size也就是內(nèi)部交叉點(diǎn)的個(gè)數(shù),而不是方形格的個(gè)數(shù),因此該棋盤(pán)格的size為9*6。除了標(biāo)定板的size,還需要知道標(biāo)定板每個(gè)棋盤(pán)格的邊長(zhǎng)square,準(zhǔn)備好了標(biāo)定板之后,就能開(kāi)始標(biāo)定過(guò)程了。棋盤(pán)格標(biāo)定板相機(jī)內(nèi)存標(biāo)定-標(biāo)定板準(zhǔn)備機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定運(yùn)行以下命令安裝攝像頭標(biāo)定功能包c(diǎn)amera_calibration,運(yùn)行結(jié)果如圖所示:$sudoapt-getinstallros-melodic-camera-calibration

安裝標(biāo)定功能包相機(jī)內(nèi)存標(biāo)定-camera_calibration功能表配置機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定在標(biāo)定前,通過(guò)以下命令啟動(dòng)攝像頭:$roslaunchusb_camusb_cam-test.launch運(yùn)行以下命令啟動(dòng)標(biāo)定程序,對(duì)攝像頭進(jìn)行標(biāo)定,啟動(dòng)標(biāo)定程序結(jié)果下圖所示:$rosruncamera_calibrationcameracalibrator.py--size9x6--square0.024image:=/usb_cam/image_rawcamera:=/usb_cam

啟動(dòng)標(biāo)定程序其中--size后面為使用的標(biāo)定板的內(nèi)部角點(diǎn)的個(gè)數(shù),--square為每個(gè)棋盤(pán)格的邊長(zhǎng),單位為米,image:=/usb_cam/image_raw表示標(biāo)定時(shí)訂閱的圖像來(lái)自于/usb_cam/image_raw的話(huà)題,camera:=/usb_cam表示的當(dāng)前攝像頭名,具體的參數(shù)請(qǐng)根據(jù)使用的標(biāo)定板和攝像頭進(jìn)行選擇。相機(jī)內(nèi)存標(biāo)定-啟動(dòng)標(biāo)定節(jié)點(diǎn)機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定進(jìn)入標(biāo)定界面后,將標(biāo)定板放在攝像頭下,就可以開(kāi)始標(biāo)定了,標(biāo)定界面如圖所示。相機(jī)內(nèi)存標(biāo)定-標(biāo)定相機(jī)參數(shù)機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定標(biāo)定界面右邊有四個(gè)進(jìn)度條,標(biāo)定沒(méi)有成功時(shí),右下角的三個(gè)按鈕都是不能使用的,通過(guò)將標(biāo)定板左右移動(dòng)來(lái)提高X進(jìn)度條的進(jìn)度,將標(biāo)定板上下移動(dòng)來(lái)提高Y進(jìn)度條的進(jìn)度,標(biāo)定過(guò)程如圖所示。相機(jī)內(nèi)存標(biāo)定-標(biāo)定相機(jī)參數(shù)機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定將標(biāo)定板前后移動(dòng)來(lái)提高Size進(jìn)度條的進(jìn)度,將標(biāo)定板左右上下傾斜來(lái)提高Skew的進(jìn)度條,標(biāo)定過(guò)程如下圖所示。相機(jī)內(nèi)存標(biāo)定-標(biāo)定相機(jī)參數(shù)機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定通過(guò)不斷變更位置來(lái)提高標(biāo)定進(jìn)度條進(jìn)度指導(dǎo)四個(gè)進(jìn)度條都達(dá)到滿(mǎn)意的效果,標(biāo)定結(jié)束如下圖所示。相機(jī)內(nèi)存標(biāo)定-標(biāo)定相機(jī)參數(shù)機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定最后按下右下角的CALIBRATE按鈕對(duì)內(nèi)參系數(shù)和畸變系數(shù)進(jìn)行計(jì)算,計(jì)算過(guò)程中不要關(guān)閉標(biāo)定界面,參數(shù)計(jì)算完成后,SAVE和COMMIT按鈕會(huì)亮起,點(diǎn)擊SAVE按鈕對(duì)結(jié)果數(shù)據(jù)進(jìn)行保存,此時(shí)在終端中也會(huì)出現(xiàn)標(biāo)定的結(jié)果,如下圖所示。相機(jī)內(nèi)存標(biāo)定-標(biāo)定相機(jī)參數(shù)機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定點(diǎn)擊COMMIT按鈕可以提交數(shù)據(jù)并退出標(biāo)定界面,并在~/.ros/camera_info/文件夾下生成標(biāo)定參數(shù)配置文件head_camera.yaml如圖所示,此時(shí)重新打開(kāi)相機(jī),將自動(dòng)加載該配置文件,矯正相機(jī)畸變,相機(jī)內(nèi)存標(biāo)定-標(biāo)定相機(jī)參數(shù)機(jī)器人操作系統(tǒng)(ROS)8.1.3相機(jī)內(nèi)參標(biāo)定根據(jù)終端中輸出的路徑可以找到保存的標(biāo)定參數(shù),標(biāo)定參數(shù)保存路徑如下圖所示。根據(jù)上述路徑打開(kāi)壓縮包c(diǎn)alibrationdata.tar.gz,里面放著標(biāo)定過(guò)程的圖片以及存放標(biāo)定結(jié)果的ost.txt和ost.yaml文件,這里的ost.yaml文件就是所需要的內(nèi)參標(biāo)定結(jié)果文件,如圖所示。相機(jī)內(nèi)存標(biāo)定-標(biāo)定相機(jī)參數(shù)機(jī)器人操作系統(tǒng)(ROS)8.1.4人臉識(shí)別實(shí)驗(yàn)OpenCV作為開(kāi)源的計(jì)算機(jī)視覺(jué)庫(kù),由一系列的C函數(shù)和少量的C++類(lèi)構(gòu)成,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法,能夠運(yùn)行于Windows、Linux、macOS等操作系統(tǒng)中,由于我們使用的ROS版本為Melodic,在該版本中ROS會(huì)默認(rèn)安裝OpenCV3,可以通過(guò)以下命令查看OpenCV是否安裝成功以及其版本:$python>>>importcv2>>>cv2.__version__當(dāng)出現(xiàn)如圖所示結(jié)果時(shí),就說(shuō)明OpenCV被正常安裝,對(duì)應(yīng)的版本為OpenCV3.2.0:

若未安裝OpenCV,可以運(yùn)行如下命令安裝:$sudo

apt-get

install

ros-melodic-vision-opencv

libopencv-dev

python-opencv人臉識(shí)別實(shí)驗(yàn)-Opencv配置機(jī)器人操作系統(tǒng)(ROS)8.1.4人臉識(shí)別實(shí)驗(yàn)人臉識(shí)別實(shí)驗(yàn)-初始化函數(shù)部分def__init__(self):rospy.on_shutdown(self.cleanup);#創(chuàng)建cv_bridge,由于在Opencv中,圖像是以Mat矩陣的形式儲(chǔ)存的,這與ROS的圖像消息的格式有所區(qū)別,因此需要通過(guò)cv_bridge將其聯(lián)系起來(lái)。self.bridge=CvBridge()self.image_pub=rospy.Publisher("cv_bridge_image",Image,queue_size=1)

#獲取haar特征的級(jí)聯(lián)表的XML文件,設(shè)置在啟動(dòng)文件中。cascade_1=rospy.get_param("~cascade_1","")cascade_2=rospy.get_param("~cascade_2","")

#使用級(jí)聯(lián)表初始化haar特征檢測(cè)器。self.cascade_1=cv2.CascadeClassifier(cascade_1)self.cascade_2=cv2.CascadeClassifier(cascade_2)

#設(shè)置級(jí)聯(lián)表的參數(shù),優(yōu)化人臉識(shí)別,可以在launch文件中重新配置。self.haar_scaleFactor=rospy.get_param("~haar_scaleFactor",1.2)self.haar_minNeighbors=rospy.get_param("~haar_minNeighbors",2)self.haar_minSize=rospy.get_param("~haar_minSize",40)self.haar_maxSize=rospy.get_param("~haar_maxSize",60)self.color=(50,255,50)

#初始化圖像數(shù)據(jù)的訂閱者,使圖像的話(huà)題名能在launch文件中重映射。self.image_sub=rospy.Subscriber("input_rgb_image",Image,self.image_callback,queue_size=1)機(jī)器人操作系統(tǒng)(ROS)8.1.4人臉識(shí)別實(shí)驗(yàn)人臉識(shí)別實(shí)驗(yàn)-圖像處理函數(shù)部分defimage_callback(self,data):#使用cv_bridge將ROS的圖像數(shù)據(jù)轉(zhuǎn)換成OpenCV的圖像格式。try:cv_image=self.bridge.imgmsg_to_cv2(data,"bgr8")frame=np.array(cv_image,dtype=np.uint8)exceptCvBridgeError,e:printe

#將圖像轉(zhuǎn)化成灰度圖。grey_image=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#平衡直方圖以減少光線(xiàn)影響。grey_image=cv2.equalizeHist(grey_image)#嘗試檢測(cè)人臉faces_result=self.detect_face(grey_image#在opencv的窗口中框出所有人臉區(qū)域。iflen(faces_result)>0:forfaceinfaces_result:x,y,w,h=facecv2.rectangle(cv_image,(x,y),(x+w,y+h),self.color,2

#將識(shí)別后的圖像轉(zhuǎn)換成ROS消息并發(fā)布。self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image,"bgr8"))機(jī)器人操作系統(tǒng)(ROS)8.1.4人臉識(shí)別實(shí)驗(yàn)人臉識(shí)別實(shí)驗(yàn)-人臉識(shí)別函數(shù)部分defdetect_face(self,input_image):#正面人臉的模型匹配。ifself.cascade_1:faces=self.cascade_1.detectMultiScale(input_image,self.haar_scaleFactor,self.haar_minNeighbors,cv2.CASCADE_SCALE_IMAGE,(self.haar_minSize,self.haar_maxSize))#側(cè)面人臉的模型匹配。iflen(faces)==0andself.cascade_2:faces=self.cascade_2.detectMultiScale(input_image,self.haar_scaleFactor,self.haar_minNeighbors,cv2.CASCADE_SCALE_IMAGE,self.

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論