日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

NAO机器人高尔夫中的视觉系统设计

發(fā)布時(shí)間:2023/12/3 windows 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NAO机器人高尔夫中的视觉系统设计 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

去年(2017)年分別參加了江蘇省和全國(guó)的NAO機(jī)器人高爾夫比賽,負(fù)責(zé)的是視覺(jué)部分編程。在這里把之前的工作總結(jié)一下。內(nèi)容主要包括紅球和黃桿的識(shí)別和定位(包括在比賽中遇到的一些問(wèn)題和解決辦法)。完整的代碼(C++和Python兩個(gè)版本)見(jiàn)https://github.com/ZhouJiaHuan/nao-golf-visual-task,本篇只以Python代碼為例進(jìn)行介紹。

基本配置(基類(lèi))

在代碼實(shí)現(xiàn)上,為了方便擴(kuò)展,我先定義了一個(gè)基類(lèi)用來(lái)定義一些最基本的配置信息,然后再派生出視覺(jué)類(lèi)(寫(xiě)運(yùn)動(dòng)代碼也可以派生出一個(gè)運(yùn)動(dòng)的類(lèi))、用于紅球黃和黃桿的檢測(cè)?;?lèi)的定義如下:

# date: 1/15/2017 # description: basic class for all Nao tasks. ## ---------------------------------------------------------------------import sys # sys.path.append("/home/meringue/Softwares/pynaoqi-sdk/") # naoqi directory from naoqi import ALProxyclass ConfigureNao(object):"""a basic class for all nao tasks, including motion, bisualization etc."""def __init__(self, IP):self._IP = IPself._PORT = 9559self._cameraProxy = ALProxy("ALVideoDevice", self._IP, self._PORT)self._motionProxy = ALProxy("ALMotion", self._IP, self._PORT)self._postureProxy = ALProxy("ALRobotPosture", self._IP, self._PORT)self._tts = ALProxy("ALTextToSpeech",self._IP, self._PORT)self._memoryProxy = ALProxy("ALMemory", self._IP, self._PORT)

從代碼中可以看出,ConfigureNao這個(gè)基類(lèi)中主要包含了一些基本配置信息,如IP,端口號(hào),并且創(chuàng)建了一些需要用到的NAO庫(kù)中自帶的類(lèi)的對(duì)象(視覺(jué)、語(yǔ)音、運(yùn)動(dòng)等)。在等會(huì)我們定義視覺(jué)類(lèi)的時(shí)候,可以直接從ConfigureNao這個(gè)類(lèi)繼承。

視覺(jué)模塊

視覺(jué)基類(lèi)——視覺(jué)任務(wù)的基類(lèi)

由于視覺(jué)任務(wù)中(紅球檢測(cè)、黃桿檢測(cè))都需要共用一些基本功能(如從攝像頭獲取數(shù)據(jù)),因此再定義一個(gè)視覺(jué)基類(lèi)VisualBasis供使用,這個(gè)類(lèi)是從ConfigureNao繼承出來(lái)的。定義如下:

class VisualBasis(ConfigureNao):"""a basic class for visual task."""def __init__(self, IP, cameraId, resolution=vd.kVGA):"""initilization. Args:IP: NAO's IPcameraId: bottom camera (1,default) or top camera (0).resolution: kVGA, default: 640*480)Return: none""" super(VisualBasis, self).__init__(IP)self._cameraId = cameraIdself._resolution = resolutionself._colorSpace = vd.kBGRColorSpaceself._fps = 20self._frameHeight = 0self._frameWidth = 0self._frameChannels = 0self._frameArray = Noneself._cameraPitchRange = 47.64/180*np.piself._cameraYawRange = 60.97/180*np.piself._cameraProxy.setActiveCamera(self._cameraId)def updateFrame(self, client="python_client"):"""get a new image from the specified camera and save it in self._frame.Args:client: client name.Return: none.""""""if self._cameraProxy.getActiveCamera() == self._cameraId:print("current camera has been actived.")else:self._cameraProxy.setActiveCamera(self._cameraId)"""self._videoClient = self._cameraProxy.subscribe(client, self._resolution, self._colorSpace, self._fps)frame = self._cameraProxy.getImageRemote(self._videoClient)self._cameraProxy.unsubscribe(self._videoClient)try:self._frameWidth = frame[0]self._frameHeight = frame[1]self._frameChannels = frame[2]self._frameArray = np.frombuffer(frame[6], dtype=np.uint8).reshape([frame[1],frame[0],frame[2]])except IndexError:raisedef getFrameArray(self):"""get current frame.Return: current frame array (numpy array)."""if self._frameArray is None:return np.array([])return self._frameArraydef showFrame(self):"""show current frame image."""if self._frameArray is None:print("please get an image from Nao with the method updateFrame()")else:cv2.imshow("current frame", self._frameArray)def printFrameData(self):"""print current frame data."""print("frame height = ", self._frameHeight)print("frame width = ", self._frameWidth)print("frame channels = ", self._frameChannels)print("frame shape = ", self._frameArray.shape)def saveFrame(self, framePath):"""save current frame to specified direction. Arguments:framePath: image path."""cv2.imwrite(framePath, self._frameArray)print("current frame image has been saved in", framePath)def setParam(self, paramName=None, paramValue = None):raise NotImplementedErrordef setAllParamsToDefault(self):raise NotImplementedError

視覺(jué)基類(lèi)中除了定義了一些默認(rèn)的攝像頭參數(shù),還定義了一些基本的成員函數(shù)、包括從指定攝像頭獲取一幀圖像、返回當(dāng)前存儲(chǔ)的圖像數(shù)據(jù)、顯示當(dāng)前圖像、保存當(dāng)前圖像到本地,還有一些以后用到再定義的函數(shù),先預(yù)留借口在這里。因?yàn)檫@個(gè)類(lèi)中都是一些簡(jiǎn)單的功能,此處不多介紹。

有了上面定義的視覺(jué)類(lèi),就可以繼續(xù)派生出紅球檢測(cè)類(lèi)和黃桿檢測(cè)類(lèi),下面分別介紹。

紅球檢測(cè)類(lèi)

其實(shí)NAO的官方庫(kù)里面提供了紅球識(shí)別的API,但我們測(cè)試過(guò),發(fā)現(xiàn)效果很不好,非常容易受到一些干擾物的影響。因此我們打算基于OpenCV自己寫(xiě)紅球識(shí)別的代碼。最簡(jiǎn)單的思路就是顏色閾值分割+霍夫圓檢測(cè),然而在測(cè)試的時(shí)候我們發(fā)現(xiàn)僅僅通過(guò)這兩個(gè)步驟檢測(cè)的結(jié)果并不穩(wěn)定,于是我們?cè)谶@基礎(chǔ)上針對(duì)比賽環(huán)境做了改進(jìn)。

紅球檢測(cè)類(lèi)的類(lèi)名叫BallDetect,是從VisualBasis類(lèi)繼承出來(lái)的,因此已經(jīng)包含了VisualBasis類(lèi)中的基本屬性和成員函數(shù),我們只要在此基礎(chǔ)上繼續(xù)編寫(xiě)紅球檢測(cè)需要的成員函數(shù)即可。

紅球基本屬性

我們需要保存的紅球相關(guān)的信息有兩塊:(1)紅球在圖像中的位置信息;(2)紅球相對(duì)于機(jī)器人坐標(biāo)系的位置信息。因此我們先定義這兩個(gè)屬性,如下:

def __init__(self, IP, cameraId=vd.kBottomCamera, resolution=vd.kVGA):"""initialization."""super(BallDetect, self).__init__(IP, cameraId, resolution)self._ballData = {"centerX":0, "centerY":0, "radius":0}self._ballPosition= {"disX":0, "disY":0, "angle":0}self._ballRadius = 0.05

紅球在圖像中的位置信息和實(shí)際位置信息分別用”_ballData”和”_ballPosition”來(lái)存放,初始值都設(shè)為0

圖像預(yù)處理

該函數(shù)功能是對(duì)圖像進(jìn)行特定通道的分離和濾波,這里我分別針對(duì)RGB空間和HSV空間都寫(xiě)了預(yù)處理函數(shù)供調(diào)用.

RGB空間預(yù)處理函數(shù)

def _getChannelAndBlur(self, color):"""get the specified channel and blur the result.Arguments:color: the color channel to split, only supports the color of red, geen and blue. Return: the specified color channel or None (when the color is not supported)."""try:channelB = self._frameArray[:,:,0]channelG = self._frameArray[:,:,1]channelR = self._frameArray[:,:,2]except:raise Exception("no image detected!")Hm = 6if color == "red":channelB = channelB*0.1*HmchannelG = channelG*0.1*HmchannelR = channelR - channelB - channelGchannelR = 3*channelRchannelR = cv2.GaussianBlur(channelR, (9,9), 1.5)channelR[channelR<0] = 0channelR[channelR>255] = 255return np.uint8(np.round(channelR))elif color == "blue":channelR = channelR*0.1*HmchannelG = channelG*0.1*HmchannelB = channelB - channelG - channelRchannelB = 3*channelB channelB = cv2.GaussianBlur(channelB, (9,9), 1.5)channelB[channelB<0] = 0channelB[channelB>255] = 255return np.uint8(np.round(channelB))elif color == "green":channelB = channelB*0.1*HmchannelR= channelR*0.1*HmchannelG = channelG - channelB - channelRchannelG = 3*channelGchannelG = cv2.GaussianBlur(channelG, (9,9), 1.5)channelG[channelG<0] = 0channelG[channelG>255] = 255return np.uint8(np.round(channelG))else:print("can not recognize the color!")print("supported color:red, green and blue.")return None

雖然說(shuō)是紅球檢測(cè),但為了考慮代碼的一般性,我也增加了綠色和藍(lán)色。在分離的時(shí)候增強(qiáng)了紅色通道的值并削減了其他空間的結(jié)果,這樣可以使分離的結(jié)果更好。另外增加高斯濾波讓局部信息模糊有利于霍夫圓的檢測(cè)。

HSV空間預(yù)處理函數(shù)

def _binImageHSV(self, color):"""get binary image from the HSV image (transformed from BGR image)Args:color: the color for binarization.Return:binImage: binary image."""try:frameArray = self._frameArray.copy()imgHSV = cv2.cvtColor(frameArray, cv2.COLOR_BGR2HSV)except:raise Exception("no image detected!")if color == "red":minHSV1=np.array([0,43,46])maxHSV1=np.array([10,255,255])minHSV2=np.array([156,43,46])maxHSV2=np.array([180,255,255])frameBin1 = cv2.inRange(imgHSV, minHSV1, maxHSV1)frameBin2 = cv2.inRange(imgHSV, minHSV2, maxHSV2)frameBin = np.maximum(frameBin1, frameBin2)return frameBinelse:raise Exception("not recognize the color!")

這個(gè)函數(shù)的輸入依然是一個(gè)RGB空間圖像,內(nèi)部轉(zhuǎn)換為HSV空間進(jìn)行處理。這里用到了OpenCV庫(kù)中的inRange()函數(shù)進(jìn)行二值化,由于紅色對(duì)應(yīng)的HSV的區(qū)間范圍有兩個(gè),所以在代碼實(shí)現(xiàn)上用了“并”操作。函數(shù)實(shí)現(xiàn)上只提供了紅色的提取,但也可以拓展到其他顏色的預(yù)處理,這里給出一個(gè)各個(gè)顏色HSV空間的實(shí)驗(yàn)取值范圍:

在實(shí)驗(yàn)測(cè)試的時(shí)候,發(fā)現(xiàn)在一般的情況下,兩個(gè)空間都能準(zhǔn)確地把紅球分割出來(lái),但在光線條件較差的時(shí)候(較強(qiáng)或較弱),發(fā)現(xiàn)HSV空間更加穩(wěn)定。

紅球識(shí)別

圖像預(yù)處理后,圖像上會(huì)分割出紅球所在區(qū)域和其他的一些噪聲。理想情況下,紅球所在的區(qū)域分割結(jié)果應(yīng)該是一個(gè)圓(橢圓),這里我是直接通過(guò)OpenCV庫(kù)中的霍夫圓檢測(cè)函數(shù)實(shí)現(xiàn)的:

def _findCircles(self, img, minDist, minRadius, maxRadius):"""detect circles from an image.Arguments:img: image to be detected.minDist: minimum distance between the centers of the detected circles.minRadius: minimum circle radius.maxRadius: maximum circle radius.Return: an uint16 numpy array shaped circleNum*3 if circleNum>0, ([[circleX, circleY,radius]])else return None."""circles = cv2.HoughCircles(np.uint8(img), cv2.HOUGH_GRADIENT, 1, minDist, param1=150, param2=15, minRadius=minRadius, maxRadius=maxRadius)if circles is None:return np.uint16([])else:return np.uint16(np.around(circles[0, ]))

根據(jù)比賽用球的大小要求可以大概限制一下紅球在圖像中的半徑范圍(和分辨率有關(guān)),代碼中的參數(shù)是基于640×480的分辨率設(shè)置的。需要注意的是,經(jīng)過(guò)上述霍夫圓檢測(cè)到的球可能有多個(gè)(可能包含了一些噪聲),因此還應(yīng)該對(duì)結(jié)果進(jìn)一步的判斷。

紅球篩選

經(jīng)過(guò)紅球識(shí)別的結(jié)果可能有如下2種情況:

  • 圖像中沒(méi)有檢測(cè)到球。
  • 圖像中檢測(cè)到一個(gè)或者多個(gè)球。

第一種情況不需要討論,只需要返回沒(méi)有球的信息即可。對(duì)于第二種情況,我們需要對(duì)每一個(gè)檢測(cè)出的紅球進(jìn)行二次判斷。因?yàn)樵诒荣惉F(xiàn)場(chǎng),NAO機(jī)器人最多只應(yīng)該檢測(cè)到一個(gè)球。因此,針對(duì)第二種情況,我給出的篩選方法如下:

對(duì)于每一個(gè)檢測(cè)出的紅球,以紅球圓心為中心,以紅球的4倍半徑為邊長(zhǎng)畫(huà)一個(gè)外圍正方形,計(jì)算外接正方形區(qū)域內(nèi)紅色和綠色像素點(diǎn)所占的比值。一個(gè)簡(jiǎn)單的示意圖如下:

最理想的情況下,紅色像素的比例為πr2/16r2=0.196πr2/16r2=0.196,綠色像素所占的比例為0.8040.804,但在實(shí)際檢測(cè)的時(shí)候,存在各種不確定因素(圓檢測(cè)誤差、光線不均勻?qū)е骂伾畔l(fā)生變化、其他干擾物的影響等),幾乎不可能達(dá)到理想情況。因此,在具體的實(shí)現(xiàn)上,我們需要把條件設(shè)定得寬松點(diǎn)。實(shí)現(xiàn)代碼如下:

def _selectCircle(self, circles):"""select one circle in list type from all circles detected. Args:circles: numpy array shaped (N, 3), N is the number of circles.Return:selected circle or None (no circle is selected)."""if len(circles) == 0 :return circlesif circles.shape[0] == 1:centerX = circles[0][0]centerY = circles[0][1]radius = circles[0][2]initX = centerX - 2*radiusinitY = centerY - 2*radiusif initX<0 or initY<0 or (initX+4*radius)>self._frameWidth or (initY+4*radius)>self._frameHeight or radius<1:return circleschannelB = self._frameArray[:,:,0]channelG = self._frameArray[:,:,1]channelR = self._frameArray[:,:,2]rRatioMin = 1.0; circleSelected = np.uint16([])for circle in circles:centerX = circle[0]centerY = circle[1]radius = circle[2]initX = centerX - 2*radiusinitY = centerY - 2*radiusif initX<0 or initY<0 or (initX+4*radius)>self._frameWidth or (initY+4*radius)>self._frameHeight or radius<1:continuerectBallArea = self._frameArray[initY:initY+4*radius+1, initX:initX+4*radius+1,:]bFlat = np.float16(rectBallArea[:,:,0].flatten())gFlat = np.float16(rectBallArea[:,:,1].flatten())rFlat = np.float16(rectBallArea[:,:,2].flatten())rScore1 = np.uint8(rFlat>1.0*gFlat)rScore2 = np.uint8(rFlat>1.0*bFlat)rScore = float(np.sum(rScore1*rScore2))gScore = float(np.sum(np.uint8(gFlat>1.0*rFlat)))rRatio = rScore/len(rFlat)gRatio = gScore/len(gFlat) print("red ratio = ", rRatio)print("green ratio = ", gRatio)if rRatio>=0.12 and gRatio>=0.1 and abs(rRatio-0.19)<abs(rRatioMin-0.19):circleSelected = circlereturn circleSelected

該函數(shù)的輸入是一個(gè)2維數(shù)組,每一個(gè)代表一個(gè)檢測(cè)出來(lái)的紅球信息(x,y,r)(x,y,r),為了保證篩選后最多只剩一個(gè)紅球,代碼最后再所有滿足比例條件中的球中選擇了紅色比例最接近理想值0.19的紅球。

還有一點(diǎn)需要說(shuō)明的是,上面的代碼中使用的是RGB空間進(jìn)行顏色統(tǒng)計(jì)的,在實(shí)現(xiàn)上其實(shí)也可以使用HSV空間進(jìn)行統(tǒng)計(jì),方法還是一樣。一個(gè)完整的紅球檢測(cè)過(guò)程如下:

紅球定位

上面只是把紅球的位置在圖像中定位出來(lái)了,而我們?cè)诒荣愔行枰t球相對(duì)于機(jī)器人(機(jī)器人坐標(biāo)系)的位置信息。比較簡(jiǎn)單的一種定位方法就是三角函數(shù)定位,也就是利用已知的一些參數(shù)(紅球半徑、機(jī)器人攝像頭離地面高度、攝像頭位置、廣角等)構(gòu)造幾個(gè)直角三角形,最后即可得出紅球相當(dāng)于機(jī)器人的位置信息。一個(gè)簡(jiǎn)單的計(jì)算示意圖如下(具體計(jì)算公式見(jiàn)代碼):

對(duì)應(yīng)的計(jì)算位置的代碼如下:

def _updateBallPosition(self, standState):"""compute and update the ball position with the ball data in frame.standState: "standInit" or "standUp"."""bottomCameraDirection = {"standInit":49.2/180*np.pi, "standUp":39.7/180*np.pi} try:cameraDirection = bottomCameraDirection[standState]except KeyError:print("Error! unknown standState, please check the value of stand state!")raiseelse:if self._ballData["radius"] == 0:self._ballPosition= {"disX":0, "disY":0, "angle":0}else:centerX = self._ballData["centerX"]centerY = self._ballData["centerY"]radius = self._ballData["radius"]cameraPos = self._motionProxy.getPosition(self._cameraName, motion.FRAME_WORLD, True)cameraX, cameraY, cameraHeight = cameraPos[:3]head_yaw, head_pitch = self._motionProxy.getAngles("Head", True)camera_pitch = head_pitch + cameraDirectionimg_center_x = self._frameWidth/2img_center_y = self._frameHeight/2center_x = self._ballData["centerX"]center_y = self._ballData["centerY"]img_pitch = (center_y-img_center_y)/(self._frameHeight)*self._cameraPitchRangeimg_yaw = (img_center_x-center_x)/(self._frameWidth)*self._cameraYawRangeball_pitch = camera_pitch + img_pitchball_yaw = img_yaw + head_yawprint("ball yaw = ", ball_yaw/np.pi*180)dis_x = (cameraHeight-self._ballRadius)/np.tan(ball_pitch) + np.sqrt(cameraX**2+cameraY**2)dis_y = dis_x*np.sin(ball_yaw)dis_x = dis_x*np.cos(ball_yaw)self._ballPosition["disX"] = dis_xself._ballPosition["disY"] = dis_yself._ballPosition["angle"] = ball_yaw

代碼中前一部分主要是獲取計(jì)算所需要的信息(傳感器的值和常數(shù)項(xiàng)),后一部分是紅球位置計(jì)算公式。最后直接將計(jì)算的結(jié)果保存在類(lèi)中。在實(shí)驗(yàn)的時(shí)候,統(tǒng)計(jì)各個(gè)位置的平均誤差在1-2里面,視野中心的位置誤差較小,視野邊界附近的誤差較大。

這里還需要補(bǔ)充一點(diǎn)的是,之前由于我們代碼中的計(jì)算公式有誤(可對(duì)比上下代碼的不同),導(dǎo)致計(jì)算的位置信息有很大的偏差,具體表現(xiàn)是X方向的距離基本準(zhǔn)確,Y方向的距離信息偏小,而且X越小的時(shí)候相對(duì)偏差越明顯。為此,我們通過(guò)采集視野中的不同位置信息(采集多次數(shù)據(jù)取平均),統(tǒng)計(jì)各個(gè)離散位置的誤差信息,最后用多項(xiàng)式對(duì)誤差進(jìn)行補(bǔ)償。在測(cè)試的時(shí)候發(fā)現(xiàn)補(bǔ)償?shù)慕Y(jié)果可以把誤差縮小到1厘米左右。代碼如下:

def _updateBallPositionFitting(self, standState):"""compute and update the ball position with compensation.Args:standState: "standInit" or "standUp"."""bottomCameraDirection = {"standInit":49.2, "standUp":39.7} ballRadius = self._ballRadiustry:cameraDirection = bottomCameraDirection[standState]except KeyError:print("Error! unknown standState, please check the value of stand state!")raiseelse:if self._ballData["radius"] == 0:self._ballPosition= {"disX":0, "disY":0, "angle":0}else:centerX = self._ballData["centerX"]centerY = self._ballData["centerY"]radius = self._ballData["radius"]cameraPosition = self._motionProxy.getPosition("CameraBottom", 2, True)cameraX = cameraPosition[0]cameraY = cameraPosition[1]cameraHeight = cameraPosition[2]headPitches = self._motionProxy.getAngles("HeadPitch", True)headPitch = headPitches[0]headYaws = self._motionProxy.getAngles("HeadYaw", True)headYaw = headYaws[0]ballPitch = (centerY-240.0)*self._cameraPitchRange/480.0 # y (pitch angle)ballYaw = (320.0-centerX)*self._cameraYawRange/640.0 # x (yaw angle)dPitch = (cameraHeight-ballRadius)/np.tan(cameraDirection/180*np.pi+headPitch+ballPitch)dYaw = dPitch/np.cos(ballYaw)ballX = dYaw*np.cos(ballYaw+headYaw)+cameraXballY = dYaw*np.sin(ballYaw+headYaw)+cameraYballYaw = np.arctan2(ballY, ballX)self._ballPosition["disX"] = ballX# 誤差補(bǔ)償(多項(xiàng)式) if (standState == "standInit"):ky = 42.513*ballX**4 - 109.66*ballX**3 + 104.2*ballX**2 - 44.218*ballX + 8.5526 #ky = 12.604*ballX**4 - 37.962*ballX**3 + 43.163*ballX**2 - 22.688*ballX + 6.0526ballY = ky*ballYballYaw = np.arctan2(ballY,ballX) self._ballPosition["disY"] = ballYself._ballPosition["angle"] = ballYaw

最后要實(shí)現(xiàn)上面的所有功能,在類(lèi)中再定義一個(gè)函數(shù),把之前實(shí)現(xiàn)的各個(gè)模塊封裝在一起,如下:

def updateBallData(self, standState="standInit", color="red", color_space="BGR", fitting=False):"""update the ball data with the frame get from the bottom camera.Arguments:standState: ("standInit", default), "standInit" or "standUp".color: ("red", default) the color of ball to be detected.color_space: "BGR", "HSV".fittting: the method of localization.Return: a dict with ball data. for example: {"centerX":0, "centerY":0, "radius":0}."""self.updateFrame()#cv2.imwrite("src_image.jpg", self._frameArray)minDist = int(self._frameHeight/30.0)minRadius = 1maxRadius = int(self._frameHeight/10.0)if color_space == "BGR":grayFrame = self._getChannelAndBlur(color)else:grayFrame = self._binImageHSV(color)#cv2.imshow("bin frame", grayFrame)#cv2.imwrite("bin_frame.jpg", grayFrame)#cv2.waitKey(20)circles = self._findCircles(grayFrame, minDist, minRadius, maxRadius)circle = self._selectCircle(circles)if len(circle) == 0:self._ballData = {"centerX":0, "centerY":0, "radius":0}self._ballPosition= {"disX":0, "disY":0, "angle":0}else: self._ballData = {"centerX":circle[0], "centerY":circle[1], "radius":circle[2]}if fitting == True:self._updateBallPositionFitting(standState=standState)else:self._updateBallPosition(standState=standState)

黃桿檢測(cè)類(lèi)

在NAO機(jī)器人高爾夫中,球洞上會(huì)立著一根黃桿用于NAO機(jī)器人遠(yuǎn)程定位球洞的方向。因?yàn)镹AO機(jī)器人的頭部攝像頭看到距離更遠(yuǎn),所以在比賽中會(huì)使用NAO機(jī)器人的頭部攝像頭檢測(cè)黃桿。但這也帶來(lái)一些問(wèn)題,比如會(huì)把遠(yuǎn)處一些黃色的東西錯(cuò)認(rèn)為黃桿。

同樣,我們需要定義一個(gè)黃桿檢測(cè)類(lèi)StickDetect,它也是從視覺(jué)基類(lèi)VisualBasis繼承出來(lái)的。類(lèi)中我定義了三個(gè)屬性:一個(gè)列表用來(lái)存放檢測(cè)出來(lái)的黃桿的位置信息、一個(gè)值用來(lái)存放黃桿相對(duì)于機(jī)器人的角度、一個(gè)常數(shù)用來(lái)確定是否要對(duì)圖像進(jìn)行裁剪。前兩個(gè)很好理解,定義一個(gè)裁剪的常用的原因是在比賽現(xiàn)場(chǎng),當(dāng)NAO機(jī)器人以正常走路的姿勢(shì)去尋找黃桿時(shí),黃桿一般位于圖像的下方,因此將圖像上半圖像剪掉不但可以排除一些干擾物,還可以減少計(jì)算量。具體的定義如下:

def __init__(self, IP, cameraId=vd.kTopCamera, resolution=vd.kVGA):super(StickDetect, self).__init__(IP, cameraId, resolution)self._boundRect = []self._cropKeep = 1self._stickAngle = None # rad

在我們的檢測(cè)方法中,采用HSV顏色分割+形狀判別的方式。其中HSV顏色分割和上面用HSV空間進(jìn)行紅球分割是一樣的,只要改一下閾值范圍就行,函數(shù)如下:

def _preprocess(self, minHSV, maxHSV, cropKeep, morphology):"""preprocess the current frame for stick detection.(binalization, crop etc.)Arguments:minHSV: the lower limit for binalization.maxHSV: the upper limit for binalization.cropKeep: crop ratio (>=0.5).morphology: erosion and dilation.Return:preprocessed image for stick detection."""self._cropKeep = cropKeepframeArray = self._frameArrayheight = self._frameHeightwidth = self._frameWidthtry:frameArray = frameArray[int((1-cropKeep)*height):,:]except IndexError:raise frameHSV = cv2.cvtColor(frameArray, cv2.COLOR_BGR2HSV)frameBin = cv2.inRange(frameHSV, minHSV, maxHSV)kernelErosion = np.ones((5,5), np.uint8)kernelDilation = np.ones((5,5), np.uint8) frameBin = cv2.erode(frameBin, kernelErosion, iterations=1)frameBin = cv2.dilate(frameBin, kernelDilation, iterations=1)frameBin = cv2.GaussianBlur(frameBin, (9,9), 0)return frameBin

另外,在代碼中我還加入了腐蝕膨脹和高斯濾波。這主要是在實(shí)驗(yàn)中發(fā)現(xiàn),當(dāng)黃桿離機(jī)器人比較遠(yuǎn)的時(shí)候,一些干擾物對(duì)檢測(cè)的影響很大,加入腐蝕膨脹可以很好地濾除大量不必要的干擾。當(dāng)然濾波器的大小也需要把握好,否則可能會(huì)把黃桿也濾除。

圖片經(jīng)上面的預(yù)處理后,會(huì)得到一張二值化圖。理想情況下,應(yīng)主要包含黃桿信息(可能包含一些顏色相似的噪聲)。為此我們需要在二值化圖像中找到黃桿所在的位置。由于我們比賽用的黃桿是長(zhǎng)條形,可以進(jìn)一步借助形狀信息來(lái)判斷。我在代碼中用的判別方法如下:

先在二值化圖像上進(jìn)行凸包檢測(cè),移除面積或周長(zhǎng)較小的凸包,找到剩下凸包的最小包圍矩形框,對(duì)每個(gè)外接矩形框進(jìn)行形狀判別,保留長(zhǎng)寬比符合要求的矩形框,最后在剩下的矩形框中選擇長(zhǎng)寬比最大的矩形框。代碼如下:

def _findStick(self, frameBin, minPerimeter, minArea):"""find the yellow stick in the preprocessed frame.Args:frameBin: preprocessed frame.minPerimeter: minimum perimeter of detected stick.minArea: minimum area of detected stick.Return: detected stick marked with rectangle or []."""rects = []_, contours, _ = cv2.findContours(frameBin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)if len(contours) == 0:return rectsfor contour in contours:perimeter = cv2.arcLength(contour, True)area = cv2.contourArea(contour)if perimeter>minPerimeter and area>minArea:x,y,w,h = cv2.boundingRect(contour)rects.append([x,y,w,h])if len(rects) == 0:return rectsrects = [rect for rect in rects if (1.0*rect[3]/rect[2])>0.8]if len(rects) == 0:return rectsrects = np.array(rects)print(rects)rect = rects[np.argmax(1.0*(rects[:,-1])/rects[:,-2]),]rect[1] += int(self._frameHeight *(1-self._cropKeep))return rect

上面的代碼中還加入和很多判斷。目的是為了當(dāng)圖像中沒(méi)有我們需要的黃桿時(shí),直接返回一個(gè)空的列表。還有需要注意的一點(diǎn)是,最后我們是在經(jīng)過(guò)裁剪的圖像上進(jìn)行檢測(cè)的,因此還需要把最終的坐標(biāo)信息轉(zhuǎn)換的到原圖中。下面給出一個(gè)完整的黃桿檢測(cè)結(jié)果圖:

至此,我們已經(jīng)實(shí)現(xiàn)了NAO機(jī)器人高爾夫比賽中紅球和黃桿的識(shí)別和定位。其實(shí)比賽場(chǎng)地上還有其他的目標(biāo)需要檢測(cè),如白線、障礙物甚至球洞,這里就不多介紹。


寫(xiě)在最后的話:
感謝你一直讀到這里,希望本篇博客對(duì)你有點(diǎn)幫助。關(guān)于本篇博客中的任何問(wèn)題歡迎指出,虛心接受各位大佬的教導(dǎo)!

總結(jié)

以上是生活随笔為你收集整理的NAO机器人高尔夫中的视觉系统设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

久久成人一区 | 欧美男女爱爱视频 | 国产精品一区二区 91 | 欧美日韩国产页 | 久精品视频在线 | 日韩欧美高清在线观看 | 国内外成人免费在线视频 | 久久国产视屏 | 97av在线视频免费播放 | 日韩在线视频观看免费 | 在线观看成人一级片 | 久草在线手机观看 | 玖玖爱国产在线 | 奇米导航 | 久久久穴 | 国产在线999 | 国产h在线播放 | 免费av在 | www.黄色片网站 | 日韩在线高清免费视频 | 中文字幕免费国产精品 | 色多视频在线观看 | 亚洲精品高清视频 | 欧美精品久久久久久久亚洲调教 | 成人在线观看资源 | 欧美最新大片在线看 | 99国内精品久久久久久久 | 国产精品9区| 久久综合之合合综合久久 | 国产精品11 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 在线色视频小说 | 亚洲va综合va国产va中文 | 婷婷综合伊人 | 久久精品视频在线免费观看 | 99re8这里有精品热视频免费 | 免费观看性生活大片3 | 在线影院中文字幕 | 国产区精品在线 | 500部大龄熟乱视频使用方法 | 亚洲国产免费av | 久久久久女人精品毛片九一 | 一区二区不卡高清 | 欧美孕妇视频 | 国产精品毛片久久 | 色综合网在线 | 日韩一区二区三区在线看 | 久久免费看 | 91最新视频 | 亚洲男男gaygay无套 | 国产精品原创在线 | 天堂网中文在线 | 99色在线播放 | 亚洲综合网站在线观看 | 婷婷色av | 九九热精品视频在线观看 | 国产中文字幕视频 | 96av在线视频| 婷婷六月天在线 | 超级碰碰碰免费视频 | 日韩理论电影在线 | 日韩久久久久久久久久 | 97视频免费观看 | 99热99re6国产在线播放 | 中文字幕在线观看1 | 中国一区二区视频 | 国产亚洲精品久久久久久移动网络 | 伊人天天操 | 国产专区一 | 国产在线免费 | 亚洲蜜桃在线 | 国产视频 亚洲视频 | 日韩中文字幕在线看 | 婷婷色综合色 | 欧美作爱视频 | 亚洲欧美视频一区二区三区 | 久久免费福利视频 | 久久国精品 | 在线中文字幕视频 | 国产资源精品在线观看 | 综合婷婷丁香 | 日韩天天操 | 黄色www免费 | 久久久久久国产精品 | 一区二区三区四区精品视频 | 中文字幕亚洲五码 | 欧美色婷婷 | 中文字幕二区 | 色噜噜狠狠狠狠色综合久不 | 91精品国产九九九久久久亚洲 | 国产一级精品在线观看 | 99自拍视频在线观看 | 永久免费精品视频网站 | 国产精品一区二区三区在线看 | 成人全视频免费观看在线看 | 三上悠亚一区二区在线观看 | 91网址在线观看 | 免费视频97| 中文字幕久久精品一区 | 亚洲成色777777在线观看影院 | 天堂入口网站 | 国产精品 欧美 日韩 | a级国产乱理伦片在线观看 亚洲3级 | 综合天天久久 | 成人久久精品视频 | 中文字幕在线观看你懂的 | 在线高清 | 在线观看 国产 | 毛片无卡免费无播放器 | 99精品在这里 | 婷婷资源站 | 嫩草av在线| 日本中文字幕在线 | 亚洲dvd| 亚洲视频一级 | 久草久 | 亚洲欧美国产精品久久久久 | 中文字幕国产精品 | 国内免费的中文字幕 | 国产亚洲激情视频在线 | 天天综合日| 国产色资源 | 午夜国产在线 | 伊人久久在线观看 | 91精品在线免费视频 | 免费看久久久 | 欧美一区二区三区在线观看 | 国产一区视频在线观看免费 | 久精品视频免费观看2 | 操操操日日 | 久久久999| 99精品视频在线免费观看 | 国产操在线 | 成人亚洲综合 | 超碰在线观看av.com | 久久精品免视看 | 亚洲精品乱码久久久久久久久久 | 欧美一二三区播放 | 国产精品女视频 | 日韩在线视频网址 | 欧美精品久久久久久久 | 在线观看精品视频 | 福利一区在线视频 | 九九热re| 黄色成人影院 | 色噜噜狠狠色综合中国 | av成人免费在线观看 | 成人av在线资源 | 香蕉在线观看视频 | 日本精品视频在线 | 夜夜天天干 | 视频直播国产精品 | 欧美精品一区二区在线播放 | 欧洲精品码一区二区三区免费看 | 国产日韩欧美在线观看 | 亚洲爱爱视频 | 麻豆视频成人 | 97人人超 | 国产精品亚洲综合久久 | av成人在线网站 | 欧美精品xx| 亚洲免费在线视频 | av在线播放亚洲 | 免费大片av | 99久久久久免费精品国产 | 五月天九九 | 97人人艹| 久久精品视频5 | 日日干天夜夜 | 亚洲精品2区| 成人黄色av网站 | 国产福利av | 久久手机视频 | 日韩av午夜 | 又黄又爽又无遮挡的视频 | 国内精品一区二区 | 在线免费观看麻豆 | 天天干天天操天天搞 | 午夜丁香视频在线观看 | 久久视频这里有久久精品视频11 | 国产日韩欧美自拍 | 久久精品欧美一区二区三区麻豆 | 五月天最新网址 | 国产露脸91国语对白 | 亚洲少妇久久 | 一级电影免费在线观看 | 黄色免费观看 | 日韩理论片在线 | 夜夜躁狠狠躁日日躁 | 日日干激情五月 | 美女网站色 | 欧美一级特黄高清视频 | 日韩理论电影网 | 成人a免费看 | 日韩二区三区 | 欧美专区亚洲专区 | 99re国产| 久久久久在线观看 | 免费在线观看中文字幕 | 久久精品视频18 | 亚洲精品视频在线观看网站 | 91在线一区二区 | 国产精品国产亚洲精品看不卡15 | 91精品福利在线 | av在线免费观看黄 | 亚洲乱码国产乱码精品天美传媒 | 中文资源在线播放 | 在线精品在线 | 国产精品综合在线观看 | 天天操夜夜拍 | 免费a一级| 免费黄在线观看 | 欧美性生活免费看 | 最新日韩视频在线观看 | 黄色一级在线免费观看 | 久草在线久 | 伊人导航| 在线观看日本高清mv视频 | 亚洲天堂va| 中文字幕在线观看免费高清完整版 | 日本特黄一级 | 特级西西444www大精品视频免费看 | 欧美国产精品久久久久久免费 | 97精品在线 | 天天综合五月天 | 国产区网址 | 玖玖爱在线观看 | 日韩电影一区二区三区 | 精品一区二区日韩 | 国产91国语对白在线 | 国产色爽 | 国产精品一区二区视频 | 99久久精品免费看国产麻豆 | 狠狠干天天干 | 在线观看国产91 | 久久久久久黄 | 国产手机在线观看视频 | 欧美日韩视频在线一区 | 色5月婷婷 | 欧美视屏一区二区 | 99久久精品日本一区二区免费 | 五月天亚洲精品 | 亚洲在线精品视频 | 欧美日本国产在线观看 | 伊人中文字幕在线 | 中文字幕在线免费看 | 精品久久久久久久久久久久 | 久久精品视频在线看 | 中文字幕不卡在线88 | 久久久久久久国产精品 | 国内精品久久久久久中文字幕 | avav片| 西西www444| 少妇自拍av | 日韩av成人在线观看 | 久草在线一免费新视频 | 日韩a在线看 | 五月开心六月伊人色婷婷 | 黄色的视频网站 | 精品福利在线 | 91精品久久久久久久久久久久久 | 午夜在线免费观看 | 色a综合 | 最近日本mv字幕免费观看 | 精品国产视频在线 | 国产一区免费 | 国产一级h| 中文字幕免费不卡视频 | 91香蕉视频污在线 | 亚州日韩中文字幕 | 亚洲精品乱码久久 | 成人av视屏 | 91片黄在线观 | 久久免费一级片 | 一级片免费在线 | www.综合网.com | 国产精品一区在线 | 日本激情中文字幕 | 久久影视中文字幕 | 精品国产免费看 | av经典在线| 99视频偷窥在线精品国自产拍 | 91精品国产综合久久久久久久 | 中文字幕 国产视频 | 色婷婷视频在线 | 狠狠狠色丁香婷婷综合激情 | 精品一区二区三区久久 | 黄在线免费观看 | 久久综合免费视频影院 | 国产男女免费完整视频 | 国产大片黄色 | 国产+日韩欧美 | 亚洲黄色片在线 | 午夜丁香视频在线观看 | 亚洲欧美在线观看视频 | 国产美女在线观看 | 免费黄色在线网址 | 一级a性色生活片久久毛片波多野 | 超碰免费久久 | a视频免费在线观看 | 免费高清av在线看 | 狠狠躁夜夜躁人人爽视频 | 午夜狠狠干| 在线观看免费中文字幕 | 国内精品免费久久影院 | 日韩国产欧美在线播放 | 精品福利片 | 超碰人人91| 亚洲特级毛片 | 日韩成人免费在线电影 | 国产福利一区在线观看 | 国产一区观看 | 深爱婷婷 | 五月天.com | 久草视频在线免费 | 亚洲精品乱码久久久一二三 | 亚洲精品视频偷拍 | 免费国产黄线在线观看视频 | 亚洲无吗av | 国产精品九九久久99视频 | 天天色天天射综合网 | 国产精品私拍 | 久久国产片 | 日韩在线观看第一页 | 久草免费福利在线观看 | 成年人免费在线播放 | 国产日产精品久久久久快鸭 | 成年人免费电影 | 五月婷婷六月丁香在线观看 | 在线观看网站av | 特黄一级毛片 | 国产伦精品一区二区三区四区视频 | 色婷婷亚洲 | 91传媒免费观看 | 色妞色视频一区二区三区四区 | 精壮的侍卫呻吟h | 久久天 | 五月婷婷,六月丁香 | 最近中文字幕大全中文字幕免费 | 欧美va天堂va视频va在线 | 成年人网站免费观看 | 81精品国产乱码久久久久久 | 色丁香婷婷 | 丰满少妇对白在线偷拍 | 18国产精品福利片久久婷 | 中文字幕一区二区三区四区视频 | 999久久a精品合区久久久 | 99精品在线 | 久久综合五月天 | 久久艹99 | 精品一区二区三区香蕉蜜桃 | 久草在线综合 | 欧美午夜精品久久久久久孕妇 | 偷拍精偷拍精品欧洲亚洲网站 | 久久激情网站 | 五月情婷婷 | 久久国色夜色精品国产 | 免费黄色特级片 | 在线观看亚洲国产 | 91社区国产高清 | 成+人+色综合 | 国产婷婷一区二区 | 99精品一级欧美片免费播放 | 激情综合久久 | 久久99精品久久只有精品 | 国产精品免费麻豆入口 | 日韩sese| 日韩欧美69| 精品无人国产偷自产在线 | 日韩国产精品一区 | 99久久精品免费视频 | 福利视频一区二区 | 国产永久免费高清在线观看视频 | 九九视频精品在线 | 国产精品美女999 | 国产黄色精品在线 | 麻豆久久久久 | 99精品久久只有精品 | 亚洲欧美成人综合 | 国内精品久久久久久久久久久久 | 免费在线成人av电影 | 国产精品久久久久一区二区三区 | 国产xx在线| 欧美精品免费一区二区 | 国产视频一区二区在线 | 日韩一级片网址 | 中文免费 | 麻豆播放 | 亚洲精品国产拍在线 | 日韩在线观看视频网站 | 亚洲日本一区二区在线 | 天天干com | 久久五月婷婷丁香 | 97成人精品视频在线播放 | 日本韩国精品一区二区在线观看 | 欧美亚洲久久 | 成人免费在线观看入口 | 狠狠成人| 国产精品 日韩 欧美 | 99热最新网址 | 最新99热| 99久久精品免费看国产四区 | 久久天天操 | 十八岁以下禁止观看的1000个网站 | 久久久免费精品视频 | 国产黄色大全 | 97在线观看视频国产 | 久草在线视频国产 | 久久精品一级片 | 视频国产 | 999国产精品视频 | 亚洲黑丝少妇 | 午夜美女福利直播 | 欧美天天射 | 在线观看视频三级 | 四虎在线视频免费观看 | 日韩 国产| 国产不卡一 | 日批视频| a在线观看免费视频 | 亚洲精品乱码久久久久久写真 | 久久久久久久久福利 | 欧美一二三区播放 | 国产黄色看片 | 欧美一区视频 | av在线免费网 | 最近av在线 | 久久久精品欧美一区二区免费 | 中文字幕精品三级久久久 | 91视频在线国产 | 国产在线精品观看 | 免费毛片aaaaaa | 99国产视频| 成人午夜电影在线播放 | 国产精品1024 | 亚洲欧洲日韩在线观看 | 美女在线免费观看视频 | 日本精品免费看 | 国产精品一区二区精品视频免费看 | 久久视频99 | 天天躁日日躁狠狠躁av中文 | 日韩免费在线一区 | 欧美激情精品久久久久久 | 国产精品久久久久高潮 | 久久香蕉国产精品麻豆粉嫩av | 久久1电影院 | 日韩精品免费在线播放 | 国产精品久久久久久久久岛 | 一区二区视频在线播放 | 久久综合久久综合九色 | 又紧又大又爽精品一区二区 | 香蕉在线视频观看 | 91福利试看 | 国产视频一区在线 | 在线观看黄色小视频 | 久久综合桃花 | 精品在线亚洲视频 | 五月婷激情 | 亚洲精品久久久久中文字幕二区 | 亚洲国产精品免费 | 久久电影网站中文字幕 | 国产精在线 | 欧美成人高清 | 天天操天天弄 | av电影免费看| 亚洲精品视 | 午夜18视频在线观看 | 久久久久免费 | 欧美成人日韩 | 久久综合久色欧美综合狠狠 | 就要色综合 | 手机在线观看国产精品 | 日韩精品中文字幕在线观看 | 日韩一区二区三区高清免费看看 | 91av免费看 | 网站在线观看你们懂的 | 免费在线观看成人 | 国产一级电影网 | 亚洲精品欧美精品 | 国产精品日韩欧美一区二区 | 97在线观看免费高清 | 亚洲精品ww | 色亚洲激情| 国产剧情av在线播放 | 天天操操 | 免费在线观看av | 91精品国产自产在线观看永久 | 国产精品欧美一区二区 | 又黄又爽又湿又无遮挡的在线视频 | 亚洲电影院| 99久久久成人国产精品 | 欧美日韩国产在线观看 | www狠狠操 | 国产美女视频 | 五月宗合网 | 中文在线字幕观看电影 | 国产大片黄色 | 久久人人爽人人片av | 久久精品久久久久 | 国产精品成人一区二区三区 | 亚洲午夜av电影 | 日韩精品视频在线免费观看 | 久久夜色精品国产欧美乱极品 | 天天色天天爱天天射综合 | 久久国产美女视频 | 91毛片在线观看 | 美女视频黄频 | 欧美福利在线播放 | 亚洲成人午夜在线 | 91九色蝌蚪视频 | 免费看黄的 | 香蕉视频在线看 | 狠狠操综合网 | 精品免费观看视频 | 免费网站色 | 国产白浆在线观看 | 五月婷婷中文字幕 | 三级黄色片在线观看 | 精品uu | 亚洲精品欧美视频 | 成人久久久精品国产乱码一区二区 | 精品国产综合区久久久久久 | 日韩视频在线观看视频 | 免费福利在线播放 | 国产色婷婷在线 | 精品久久久久国产 | 尤物一区二区三区 | 成年人黄色大片在线 | 色偷偷中文字幕 | 91精品国产福利 | 久久亚洲二区 | 超碰在线人人97 | www91在线观看 | 亚洲精品在线免费看 | 国产99久久九九精品免费 | 国产精品久久久久久久久久久不卡 | 中文字幕在线观看视频一区二区三区 | 91成年人视频 | 成人不用播放器 | 九九日九九操 | 国产精品中文字幕在线 | 国产日本在线 | 国产专区在线 | 九九在线国产视频 | 一区二区三区免费在线观看视频 | 一区二区三区观看 | 91手机视频在线 | 欧美一级片在线免费观看 | 欧美精品国产综合久久 | 久久国精品 | 国产香蕉在线 | 色噜噜色噜噜 | 在线成人欧美 | 精品在线观看一区二区三区 | 亚洲乱码在线观看 | 亚洲乱码国产乱码精品天美传媒 | 91精品国产福利在线观看 | 欧美色图东方 | 婷婷激情av | 中文字幕丝袜 | 日韩精品无| 亚洲国产成人精品在线观看 | 丁香免费视频 | 国产精品永久免费在线 | 免费久久久 | 国产乱码精品一区二区蜜臀 | 黄色小网站在线观看 | 成人av在线看 | 久久免费av电影 | 黄色日批网站 | 欧美孕妇视频 | 亚洲jizzjizz日本少妇 | 人人爱人人添 | 亚洲一区二区麻豆 | av成人动漫在线观看 | 国产精品96久久久久久吹潮 | 免费看黄在线网站 | 国产一区二区久久精品 | 欧美日韩在线精品一区二区 | 久久手机免费观看 | 久久成人久久 | 国产一级片网站 | 日韩精品不卡在线 | 日韩久久久| 操操操综合| 午夜精品久久久久久久99无限制 | 国产精品嫩草影院99网站 | 91香蕉视频色版 | 日韩av黄 | 欧美一级免费在线 | 天天综合网~永久入口 | 国产精品一区二区果冻传媒 | 国产午夜三级一区二区三桃花影视 | 精品91视频 | 99久国产| 亚洲欧洲精品久久 | 91在线观看视频网站 | 国色天香在线 | www亚洲精品| 久久久久久久久久久精 | 伊人伊成久久人综合网小说 | 激情五月六月婷婷 | 日韩欧美一区二区三区在线观看 | www.亚洲黄| 菠萝菠萝在线精品视频 | 久久久久久久久久福利 | 制服丝袜一区二区 | 亚洲在线色| 最近中文字幕免费观看 | 色999视频| 中文字幕永久在线 | 热99在线 | 特级免费毛片 | 免费在线观看av | 亚洲国产视频直播 | 亚洲视频免费在线观看 | 超碰在线官网 | 中文字幕高清免费日韩视频在线 | 98福利在线 | 91视频在线观看下载 | 色婷婷欧美 | 久久九九免费 | 日韩精品免费在线播放 | 91探花系列在线播放 | 久久国产精品99久久久久久丝袜 | 国产成人精品999 | 国产精品日韩久久久久 | 久久久在线免费观看 | 国产欧美日韩精品一区二区免费 | 天天干天天拍天天操 | 国产精品久久久久久高潮 | 最近中文字幕完整视频高清1 | 日本中文字幕在线 | 国产3p视频 | 97超碰人人澡人人爱学生 | 日日夜精品 | 国产黄色播放 | 国产黄色在线看 | 久久精品九色 | 国产精品99久久免费观看 | 国产在线欧美日韩 | 久久综合中文字幕 | 免费观看mv大片高清 | 亚洲精品免费看 | 一级片免费观看 | 天天·日日日干 | 国产一线二线三线在线观看 | 久久久久久福利 | 黄色一及电影 | 黄色av电影在线观看 | 黄色亚洲在线 | 看污网站| 天天色天天| 日韩精品一区二区在线观看视频 | 最近2019好看的中文字幕免费 | av电影av在线| 美女网站在线免费观看 | 亚洲综合狠狠干 | 欧美视频在线观看免费网址 | 日本一区二区免费在线观看 | 天天干天天干 | 又色又爽又黄高潮的免费视频 | 亚洲涩涩色 | 久久精品网站免费观看 | 黄色毛片在线观看 | 天天操夜夜操 | 日韩视频a | 国产精品久久一区二区三区, | 天天干天天上 | 婷婷国产一区二区三区 | 亚洲欧洲av | 久久精品韩国 | 欧美一区免费观看 | av中文资源在线 | 一本一本久久a久久精品综合妖精 | 五月激情av | 久草在线91 | 97看片| 久久99精品国产一区二区三区 | 日韩欧美在线观看一区二区三区 | 成人午夜电影网站 | av性在线| 欧美激情综合五月色丁香 | 成年人在线看视频 | 九色福利视频 | 精品一区二区三区香蕉蜜桃 | 精品国内自产拍在线观看视频 | 狠狠狠狠狠狠狠狠 | 国产涩涩在线观看 | 亚洲综合成人av | 一区二区三区免费在线观看视频 | 亚洲欧美日韩一级 | 狠狠搞,com | 国产精品久久久久永久免费 | www.97色.com | 国产视频九色蝌蚪 | av高清在线 | 成人免费视频网站 | 欧美日韩一区二区三区视频 | 九九九九九精品 | 欧美极度另类 | 激情影院在线 | 国产精品一区二区免费在线观看 | 久久久久久久久久久久亚洲 | 91成人精品国产刺激国语对白 | 欧美片一区二区三区 | 91精品久久久久久久久 | 国产91亚洲精品 | 成人av网站在线观看 | 热久久视久久精品18亚洲精品 | av在线色| 91久久精| 美女一级毛片视频 | 国产精品久久久久久久久久久久午夜 | 色综合天天综合 | 999国产精品视频 | 亚洲综合在线五月 | 69精品视频在线观看 | 黄色片亚洲| av片一区 | 大型av综合网站 | 九九久久成人 | 男女视频久久久 | 激情中文在线 | 日韩午夜三级 | 国产精品视频久久 | 韩国av三级 | 久久精品96 | 国产综合在线观看视频 | 久久1区| 日韩三级.com | 免费一级片在线 | 亚洲欧洲精品久久 | 麻豆国产在线播放 | 精品久久久久久综合 | 久久久久国产精品免费免费搜索 | 91精品国产91久久久久福利 | 国产在线观看xxx | 91理论电影 | 久久九九久久精品 | 日韩有码网站 | 黄色成人影院 | 91精品在线视频观看 | 久久久免费观看完整版 | 精品一区欧美 | 色一级片| 97av视频在线观看 | 玖操| 97电影院网| 欧美日韩不卡在线 | 免费观看福利视频 | 国产精品成久久久久 | 色99中文字幕 | 亚洲精品男女 | 国精产品999国精产 久久久久 | 欧美日韩亚洲在线观看 | 黄色精品久久久 | 色综合久久五月天 | 久久久久久久久艹 | 日韩美在线观看 | 日韩激情视频在线观看 | 蜜桃av久久久亚洲精品 | 香蕉视频久久 | 五月婷影院 | 久久伊人八月婷婷综合激情 | 欧美小视频在线 | 一级做a视频 | 久久一区二区三区日韩 | 在线观看岛国av | 日本韩国精品一区二区在线观看 | 中文字幕在线视频免费播放 | 日本久久片 | 亚洲无吗视频在线 | 国产精品九色 | 亚洲欧美婷婷六月色综合 | 大胆欧美gogo免费视频一二区 | 国产亚洲va综合人人澡精品 | 中国一级片在线 | 91在线一区二区 | 免费看的黄色小视频 | 人人草人 | 99re视频在线观看 | 综合在线亚洲 | 国产精品video爽爽爽爽 | 国产色女人 | 黄色成年 | 亚洲精品乱码久久久久久久久久 | 岛国av在线免费 | 视频在线91 | 久草.com| 激情av一区二区 | 国产又粗又猛又黄又爽视频 | 怡红院av久久久久久久 | 国产一二区在线观看 | 欧美日韩中 | 色多多污污在线观看 | 黄色软件在线观看免费 | 九色在线 | av中文天堂| 91色网址 | 免费看三级黄色片 | 色资源网在线观看 | 成人一区二区三区中文字幕 | 免费看的黄网站软件 | 麻豆国产露脸在线观看 | 一区三区在线欧 | 国产精品美女在线 | 国产视频精选在线 | 久草| 国偷自产中文字幕亚洲手机在线 | 国产精品久久一 | 黄网站免费大全入口 | 免费高清无人区完整版 | 婷婷网站天天婷婷网站 | 黄色大片免费网站 | 日韩在线观看精品 | 免费在线观看成人 | 一区二区三区三区在线 | 婷婷六月天丁香 | 美女视频免费精品 | 99热9| 国产99免费 | 精品一区三区 | 97超视频免费观看 | 国产又黄又硬又爽 | 国产在线小视频 | 久久国产电影 | 日本久久精 | 99国产视频| 婷婷国产在线 | 午夜精品久久久久久中宇69 | 99色精品视频 | 在线观看 亚洲 | 伊人视频 | 欧美日韩在线精品 | 中文字幕一区二区三区在线播放 | 久久国产片 | 99久高清在线观看视频99精品热在线观看视频 | 日本最大色倩网站www | 国产二级视频 | 日本久草电影 | 亚洲国产精品999 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 欧美a级片网站 | 久久99久久99精品免观看粉嫩 | 中文字幕乱码在线播放 | 99热官网 | 久久久久久久久久亚洲精品 | 国产精品久久久久久久久久99 | 欧美 激情在线 | 色在线国产 | 中文字幕精品一区久久久久 | 成人国产精品免费 | 婷婷精品视频 | www.国产高清 | 在线观看av中文字幕 | 五月婷婷丁香色 | 亚洲精品2区 | 亚洲国产精品日韩 | 成年人在线免费看片 | 免费国产ww | 中文字幕国产亚洲 | 五月婷婷.com | 日韩免费三区 | 人人玩人人添人人澡超碰 | 最新国产精品亚洲 | 国内精品亚洲 | 国产色婷婷 | 99久久99视频 | 啪嗒啪嗒免费观看完整版 | 色99中文字幕 | www日韩高清| 久久天天躁夜夜躁狠狠躁2022 | 色婷婷国产精品一区在线观看 | 精品美女久久久久 | 国内精品久久久久久中文字幕 | 91午夜精品 | www.天天综合 | 美女在线观看av | 精品爱爱 | 东方av在线免费观看 | 欧美大片mv免费 | 国产精品美女久久久久久2018 | 一区二区三区四区免费视频 | 91福利国产在线观看 | 日日干影院 | 丁香六月婷婷开心 | 91精品久久久久久粉嫩 | 噜噜色官网 | 一级做a爱片性色毛片www | 久久精视频| 中文字幕亚洲不卡 | 中文字幕综合在线 | 欧美另类高清 | 色婷婷成人网 | 99色精品视频 | 天天舔天天搞 | 欧洲精品久久久久毛片完整版 | 一二区电影 | 午夜性色| 国产精品2019 | 国产精品欧美久久久久三级 | 97视频在线观看视频免费视频 | 国产玖玖精品视频 | 在线观看免费国产小视频 | 精品久久久久久久久久岛国gif | 中文字幕中文字幕中文字幕 | 亚洲精品国偷自产在线91正片 | 在线观看av免费 | 精品女同一区二区三区在线观看 | 精品久久久久久电影 | 久久国产精品99久久久久久丝袜 | 一区二区视频播放 | 91精品视频播放 | 亚洲综合激情网 | 欧美激情精品久久久久久变态 | 人成在线免费视频 | 日韩剧| av高清不卡 | 一区二区三区高清 | 日韩欧美一区二区在线观看 | 久久久麻豆| 免费成人av网站 | 91综合在线| 国产精品久久久久久99 | 久久福利国产 | 在线视频久 | 久久香蕉国产精品麻豆粉嫩av | 超级av在线 | a黄色影院| 日本三级在线观看中文字 | 婷婷丁香社区 | 亚洲电影自拍 | 国产亚洲高清视频 | 国产精品久久麻豆 | 日韩av免费一区二区 | 久色 网 | 日韩精品一区二区免费视频 | 成人久久18免费网站图片 | aaaaaa毛片| 久久手机视频 | 亚洲电影久久久 | 日本一区二区免费在线观看 | 国产精品久久久久久久久婷婷 | 99国产一区| 国产一级免费播放 | 久久久久久中文字幕 | 精品福利在线 | av在线专区| 精品国产伦一区二区三区免费 | 亚洲区视频在线 | 天天伊人狠狠 | 国产精品美女在线观看 | 日韩精品在线看 | 国产精品第一页在线观看 | 久久久久国产精品www | 探花视频免费观看高清视频 | 四虎国产精品成人免费影视 | 黄色毛片在线 | 另类五月激情 | 日韩一级电影网站 | 亚洲 欧美 成人 | 亚洲精品在线观看视频 | 国产高清不卡av | 成人永久在线 | 91久久国产综合精品女同国语 | 午夜精品麻豆 | 午夜精品一区二区三区视频免费看 | 在线国产一区 | 玖玖在线资源 | 91看片一区二区三区 | 91在线免费观看网站 | 麻豆精品传媒视频 | 手机av资源 | 国产精品入口传媒 | 中文字幕日韩一区二区三区不卡 | 中文字幕免费高清在线观看 | 欧美福利精品 | 亚洲国产精品久久久久婷婷884 | 日日夜夜人人精品 | 亚洲成年人在线播放 | 国产精品久久久久久久久久免费看 | 久久不色 | 99精品视频在线观看免费 | 国产精品久久久区三区天天噜 | 在线视频 亚洲 | 亚洲经典视频在线观看 | 亚洲视屏在线播放 | 欧美精品小视频 | 成人高清在线观看 | 免费成人在线电影 | 久久爱992xxoo | 国产黄色在线观看 | 三级动图| 日韩欧美一区二区不卡 | 国产一区91 | 最近中文字幕第一页 | 亚洲综合视频在线观看 |