婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python實現Nao機器人的單目測距

python實現Nao機器人的單目測距

熱門標簽:鶴壁手機自動外呼系統違法嗎 地圖標注多個 怎么辦理400客服電話 B52系統電梯外呼顯示E7 高德地圖標注收入咋樣 萊蕪電信外呼系統 銀川電話機器人電話 企業微信地圖標注 沈陽防封電銷電話卡

 本文實例為大家分享了python實現Nao機器人單目測距的具體代碼,供大家參考,具體內容如下

此代碼適于用做對Nao機器人做視覺識別和測距實驗,只提供關鍵代碼部分,嘗試利用cv2去優化代碼會更加簡潔喲!

此代碼的主要功能:

1.初始姿態下,通過更換攝像頭和轉頭去尋找目標
2.通過顏色閾值識別目標,計算目標與Nao的距離和角度

可以擴展功能:

1.在運動過程中對方向和距離進行多次測量和校正,提高準確度
2.找到目標后,通過對目標的測量,選擇使用哪個腳去踢目標

#!/usr/bin/python2.7
#-*- encoding: UTF-8 -*-
import vision_definitions
#----------------------單目測距--------------------------------
#***********************************************
#@函數名:   DistAndDirect_cal(cxnum,rynum,colsum,rowsum,Head_angle,cameraID)
#@參數:     (cxnum,rynum)是通過圖像識別得到球心的像素點坐標
#           (colsum,rowsum)是圖片總大?。?40*480
#            cameraID=0,取上攝像頭;cameraID=1,取下攝像頭
#@返回值:   無
#@功能說明: 采用機器人的下攝像頭進行測量球離機器人的相關角度與距離
def DistAndDirect_cal(cxnum,rynum,colsum,rowsum,Head_angle,cameraID):
    distx=-(cxnum-colsum/2)
    disty=rynum-rowsu/2
    print distx,disty
    Picture_angle=disty*47.64/480

    if cameraID ==0:
        h=0.62
        Camera_angle=12
    else:
        h=0.57
        Camera_angle=38
    #Head_angle[0]機器人仰俯角度
    Total_angle=math.pi*(Picture_angle+Camera_angle)/180+Head_angle[0]
    d1=h/math.tan(Total_angle)

    alpha=math.pi*(distx*60.92/640)/180
    d2=d1/math.cos(alpha)
    #Head_angle[1]機器人左右角度
    Forward_Distance=d2*math.cos(alpha+Head_angle[1])
    Sideward_Distance=-d2*math.sin(alpha+Head_angle[1])
#***********************************************

#@函數名:   GetNaoImage(IP,PORT,cameraID)
#@參數:     略
#@返回值:   無
#@功能說明: 采調用機器人內置攝像頭控制模塊,對當前場景進行拍攝并保持。
#           由于球距離機器人約小于0.6m時,機器人額頭攝像頭無法看到,
#           所以需要變換攝像頭,cameraID=0,取上攝像頭;
#           cameraID=1,取下攝像頭
def Get NaoImage(IP,PORT,cameraID):
    camProxy=ALProxy("ALVideoDevice",IP,PORT)
    resolition=2 #VGA格式640*480
    colorSpace=11#RGB

    #選擇并啟用攝像頭
    camProxy.setParam(vision_definitions.kCameraSelectID,cameraID)
    videoClient=camProxy.subscribe("python_client",resolition,colorSpace,5)

    #獲取攝像機圖像。
    #image [6]包含以ASCII字符數組形式傳遞的圖像數據。
    naoImage=camProxy.getImageRemote(videoClient)

    camProxy.unsubscribe(videoClient)
    #獲取圖像大小和像素陣列。
    imageWidth=naoImage[0]
    imageHeight=naoImage[1]
    array=naoImage[6]
    #從我們的像素陣列創建一個PIL圖像。
    im=Image.fromstring("RGB",(imageWidth,imageHeight),array)
    #保存圖像。
    im.save("temp.jpg","JPEG")

#***********************************************
#@函數名:   findColorPattern(img,pattern)
#@參數:     略
#@返回值:   無
#@功能說明:  將RGB圖像轉化為二值圖:此方法用的是cv,可以嘗試用cv2代碼會更加簡潔
def  findColorPattern(img,pattern):
    channels=[None,None,None]
    channels[0]=cv.CreateImage(cv.GetSize(img),8,1)
    channels[1]=cv.CreateImage(cv.GetSize(img),8,1)
    channels[2]=cv.CreateImage(cv.GetSize(img),8,1)
    ch0=cv.CreateImage(cv.GetSize(img),8,1)
    ch1=cv.CreateImage(cv.GetSize(img),8,1)
    ch2=cv.CreateImage(cv.GetSize(img),8,1)
    cv.Split(img,ch0,ch1,ch2,None)
    dest=[None,None,None,None]
    dest[0]=cv.CreateImage(cv.GetSize(img),8,1)
    dest[1]=cv.CreateImage(cv.GetSize(img),8,1)
    dest[2]=cv.CreateImage(cv.GetSize(img),8,1)
    dest[3]=cv.CreateImage(cv.GetSize(img),8,1)
    cv.Smooth(ch0,channels[0],cv.CV_GAUSSIAN,3,3,0)
    cv.Smooth(ch1,channels[1],cv.CV_GAUSSIAN,3,3,0)
    cv.Smooth(ch2,channels[2],cv.CV_GAUSSIAN,3,3,0)
    for i in range(3):
        k=2-i
        lower=pattern[k]-75#設置閾值
        upper=pattern[k]+75
        cv.InRangeS(channels[i],lower,upper,dest[i])

    cv.And(dest[0],dest[1],dest[3])
    temp=cv.CreateImage(cv.GetSize(img),8,1)
    cv.And(dest[2],dest[3],temp)
    '''
    cv.NameWindow("result",cv.CV_WINDOW_AUTOSIZE)
    cv.ShowImage("result",temp)
    cv.WaitKey(0)
    '''
    return temp

#***********************************************
#@函數名:   xyProject(matrix,imgaesize)
#@參數:     matrix
#           imgaesize
#@返回值:   無
#@功能說明: 利用二值圖,計算球的像素坐標。其原理是:遍歷各行各列
#           像素的數值的和,最大的組合即為球心坐標
def xyProject(matrix,imagesize):
    #聲明一個數據類型為8位型單通道的imagessize[1]*1/1*imagessize[0]矩陣(初始值為 0)。
    colmask=cv.CreateMat(imagessize[1],1,cv.CV_8UC1)
    rowmask=cv.CreateMat(1,imagessize[0],cv.CV_8UC1)
    cv.Set(colmask,1)
    cv.Set(rowmask,1)

    colsum=[]
    for i in range(imagesize[0]):
        col=cv.GetCol(matrix,i)
        #計算向量點積
        a=cv.DotProduct(colmask,col)
        colsum.append(a)

    rowsum=[]
    for i in range(imagesize[1]):
        row=cv.GetRow(matrix,i)
        a=cv.DotProduct(rowmask,row)
        rowsum.append(a)

    return(colsum,rowsum)#得到各行各列“1”值的和

def crMax(colsum,rowsum):
    cx=max(colsum)
    ry=max(rowsum)
    for i in range(len(colsum)):
        if colsum[i]==cx:
            cxnum=i
    for i in range(len(rowsum)):
        if rowsum[i]==ry:
            rynum=i
    return(cxnum,rynum)
#***********************************************
#@函數名:  GetHeadAngles(robotIP,PORT)
#@參數:    略
#@返回值:   無
#@功能說明:
def GetHeadAngles(robotIP,PORT):
    motionProxy=ALProxy("ALMotion",robotIP,PORT)
    names=["HeadPitch","HeadYaw"]
    useSensors=1
    sensorAngles=motionProxy.getAngles(names,useSensors)
    return sensorAngles
#***********************************************
#@函數名:  SetHeadAngles(robotIP,PORT,angles)
#@參數:    略
#@返回值:   無
#@功能說明:
def SetHeadAngles(robotIP,PORT,angles):
    motionProxy=ALProxy("ALMotion",robotIP,PORT)
    motionProxy.setStiffnesses("Head",1.0)

    names=["HeadPitch","HeadYaw"]
    fractionMaxSpeed=0.2
    motionProxy.setAngles(names,angles,fractionMaxSpeed)

    time.sleep(2.0)
    motionProxy.setStiffnesses("Head",0.0)

#***********************************************
#@函數名:   Capture_Picture(IP,PORT,cameraID,angles,pattern_colors)
#@參數:     angles
#           pattern_colors
#@返回值:   無
#@功能說明: 將上面的一系列函數整合起來

def Capture_Picture(IP,PORT,cameraID,angles,pattern_colors):
    SetHeadAngles(IP,PORT,angles)
    GetNaoImage(IP,PORT,cameraID)
    image=cv.LoadImage("temp.jpg")
    imagesize=cv.GetSize(image) #返回數值,兩個元素分別為列數和行數
    matrix=findColorPattern(image,pattern_colors)
    (colsum,rowsum)=xyProject(matrix,imagesize)
    (cxnum,rynum)=crMax(colsum,rowsum)
    cv.SaveImage("result.jpg",matrix)

    return (cxnum,rynum,colsum,rowsum)

 

#***********************************************
#@函數名:   Target_Detect_and_Distance(IP,PORT)
#@參數:
#@返回值:   無
#@功能說明: 當上攝像頭無法找到球時,切換到下攝像頭,然后在左轉右轉。
#       在這個過程中,如果發現目標,則計算距離并輸出距離
#       若始終未找到目標,則輸出距離為0。

def Target_Detect_and_Distance(IP,PORT):
    pattern_colors=(255,150,50)
    cameraID=0# 默認上攝像頭
    angles=[0,0]
    (cxnum,rynum,colsum,rowsum)=Capture_Picture(IP,PORT,cameraID,angles)

    if(cxnum,rynum)==(639,479):
        cameraID=1
        (cxnum,rynum,colsum,rowsum)=Capture_Picture(IP,PORT,cameraID,angles)
    if(cxnum,rynum)==(639,479):
        cameraID=0
        angles=[0.0.7]
        (cxnum,rynum,colsum,rowsum)=Capture_Picture(IP,PORT,cameraID,angles)
    if(cxnum,rynum)==(639,479):
        cameraID=0
        angles=[0,-0.7]
        (cxnum,rynum,colsum,rowsum)=Capture_Picture(IP,PORT,cameraID,angles)
    HeadAngles-GetHeadAngles(IP,PORT)
    ###############
    (Forward_Distance,Sideward_Distance)=DistAndDirect_cal(cxnum,rynum,colsum,rowsum,Head_angle,cameraID)
    if(cxnum,rynum)==(639,479):
        (Forward_Distance,Sideward_Distance)=(0,0)
    print "Forward_Distance=",Forward_Distance,"meters"
    print "Sideward_Distance="+Sideward_Distance+"meters"

#***********************************************
#@函數名:   Target_Detect_and_Distance(IP,PORT)
#@參數:
#@返回值:   無
#@功能說明: 當找到球后,可能會存在一定的誤差。
#           因此需要判斷球位于機器人前方的哪一側,再來確定用哪只腳踢球

def Final_See(robotIP,PORT):
    pattern_colors=(255,150,50)
    angles=[0.5,0]
    SetHeadAngles(robotIP,PORT,angles)

    cameraID=1

    GetNaoImage(robotIP,PORT,cameraID)
    image=cv.LoadImage("temp.jpg")
    imagesize=cv.GetNaoImage(image)

    matrix=findColorPattern(image,pattern_colors)

    (colsum,rowsum)=xyProject(matrix,imgaesize)
    (cxnum,rynum)=crMax(colsum,rowsum)
    cv.SaveImage("result.jpg",matrix)

    HeadAngles=GetHeadAngles(robotIP,PORT)
    #########################
    (Forward_Distance,Sideward_Distance)=DistAndDirect_cal(cxnum,rynum,colsum,rowsum,Head_angle,cameraID)

    if cxnumlen(colsum)/2:
        side=0#左腳
    else:
        side=1#右腳
    print "side=",side
    print "last distance=",Forward_Distance
    return (side,Forward_Distance)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python距離測量的方法
  • python控制nao機器人身體動作實例詳解
  • python實現nao機器人身體軀干和腿部動作操作
  • python實現nao機器人手臂動作控制
  • python程序控制NAO機器人行走

標簽:葫蘆島 三亞 烏魯木齊 呼倫貝爾 安慶 銀川 呼倫貝爾 湘西

巨人網絡通訊聲明:本文標題《python實現Nao機器人的單目測距》,本文關鍵詞  python,實現,Nao,機器,人的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python實現Nao機器人的單目測距》相關的同類信息!
  • 本頁收集關于python實現Nao機器人的單目測距的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品美女久久久久久久网站| 一区二区三区四区在线播放| 欧美日韩精品二区第二页| 91麻豆精东视频| 成人免费av在线| 成人久久久精品乱码一区二区三区| 国产一区二区导航在线播放| 国产在线精品一区二区夜色| 精品中文字幕一区二区| 国产一区二区三区免费观看| 成人国产精品免费网站| 99riav久久精品riav| 在线观看免费视频综合| 777午夜精品免费视频| 欧美va亚洲va香蕉在线| 久久久久久久久久久久久夜| 国产精品久久久久久亚洲伦| 一区二区成人在线| 久久爱www久久做| 成人在线视频一区二区| 91久久精品日日躁夜夜躁欧美| 欧美乱熟臀69xxxxxx| 日韩免费电影一区| 中文字幕在线不卡国产视频| 午夜一区二区三区在线观看| 免费观看30秒视频久久| 成人晚上爱看视频| 欧美日产国产精品| 精品捆绑美女sm三区| 亚洲欧美偷拍三级| 另类小说欧美激情| 成人黄色在线视频| 亚洲天堂a在线| 国产精品全国免费观看高清| 亚洲二区在线视频| 国产综合色产在线精品| 在线观看国产一区二区| 日韩精品一区二区三区在线| 中文字幕五月欧美| 久久99久久99| 欧美丝袜丝nylons| 欧美国产一区在线| 蜜桃av一区二区三区| 91麻豆自制传媒国产之光| 精品国产凹凸成av人网站| 一区二区三区中文免费| 国产一区不卡视频| 91精品麻豆日日躁夜夜躁| 国产精品三级av| 国产一区二区在线观看视频| 337p亚洲精品色噜噜噜| 一区二区三区在线视频观看| 国产成人综合精品三级| 欧美一二区视频| 亚洲福利电影网| 日本黄色一区二区| 中文字幕在线一区| 丁香婷婷深情五月亚洲| 久久综合久久综合亚洲| 久久精品99国产精品日本| 884aa四虎影成人精品一区| 亚洲乱码国产乱码精品精小说| 国产福利一区二区三区| 久久无码av三级| 久久av资源站| 欧美精品一区二区高清在线观看| 亚洲3atv精品一区二区三区| 欧美性视频一区二区三区| 一区二区三区欧美亚洲| 色域天天综合网| 洋洋av久久久久久久一区| 99久久99久久精品免费看蜜桃| 欧美激情一区二区三区全黄| 国产精品夜夜嗨| 国产日韩av一区| 大陆成人av片| 国产精品美女久久久久久久久 | 日韩美女一区二区三区四区| 日韩精品五月天| 欧美成人伊人久久综合网| 欧美aaa在线| 日韩欧美123| 国产精品自拍一区| 亚洲国产精品传媒在线观看| av在线不卡网| 亚洲国产美国国产综合一区二区| 欧美精品在线视频| 久久国产夜色精品鲁鲁99| 久久久国产精品午夜一区ai换脸| 国产精品自拍一区| 亚洲男同性恋视频| 777xxx欧美| 国产suv精品一区二区6| 亚洲免费视频成人| 91精品国产综合久久福利| 激情都市一区二区| 亚洲精品乱码久久久久久黑人| 欧美精品自拍偷拍动漫精品| 国产伦精品一区二区三区免费迷| 国产精品私人影院| 欧美日韩1234| 丁香婷婷深情五月亚洲| 亚洲成av人在线观看| 欧美大片一区二区| 99视频一区二区| 免费欧美日韩国产三级电影| 国产精品欧美一区二区三区| 欧美精品九九99久久| 成人avav在线| 免费观看一级欧美片| ...xxx性欧美| www欧美成人18+| 欧美另类z0zxhd电影| 国产麻豆一精品一av一免费| 亚洲国产成人porn| 欧美韩国日本不卡| 欧美mv和日韩mv国产网站| 色婷婷久久久亚洲一区二区三区 | 岛国av在线一区| 午夜伦欧美伦电影理论片| 国产色产综合产在线视频| 7777精品伊人久久久大香线蕉最新版| 国产大陆亚洲精品国产| 麻豆视频一区二区| 一级做a爱片久久| 国产精品传媒入口麻豆| 26uuu欧美日本| 欧美变态tickling挠脚心| 欧美日韩国产免费一区二区| 91麻豆精品在线观看| 成人免费电影视频| 国产成人午夜视频| 精品一区二区久久久| 免费人成网站在线观看欧美高清| 亚洲综合免费观看高清完整版 | 欧美日韩一区二区三区在线看| 国产高清亚洲一区| 久久国产尿小便嘘嘘尿| 日本女优在线视频一区二区| 日韩专区中文字幕一区二区| 亚洲国产你懂的| 婷婷丁香久久五月婷婷| 一区二区三区.www| 一区二区高清免费观看影视大全| 国产精品另类一区| 国产精品每日更新在线播放网址| 国产日韩欧美在线一区| 国产人成亚洲第一网站在线播放| 久久女同精品一区二区| 国产亚洲人成网站| 欧美经典一区二区| 国产精品久久国产精麻豆99网站| 欧美国产日本视频| 国产精品区一区二区三| 一区在线播放视频| 伊人开心综合网| 天天av天天翘天天综合网| 麻豆精品一二三| 国内成人自拍视频| 不卡高清视频专区| 欧美在线综合视频| 欧美日韩成人一区二区| 精品国产一区二区三区忘忧草 | 午夜精品aaa| 精品一区二区免费| 国产凹凸在线观看一区二区| 91丨porny丨国产| 欧美日本一区二区在线观看| 欧美成人bangbros| 国产人妖乱国产精品人妖| 亚洲女厕所小便bbb| 日韩av中文字幕一区二区三区| 国产精品99久久久| 在线亚洲欧美专区二区| 欧美一区二区三区小说| 中文字幕第一页久久| 天天爽夜夜爽夜夜爽精品视频| 久久99久久99| 欧美丝袜丝交足nylons图片| 欧美精品一区二区三区视频| 亚洲男同1069视频| 久久www免费人成看片高清| 91丝袜美腿高跟国产极品老师 | 欧美午夜不卡在线观看免费| 日韩精品一区二区三区老鸭窝| 国产精品天美传媒| 美女爽到高潮91| 在线一区二区视频| 久久精品在线免费观看| 香蕉成人啪国产精品视频综合网| 国产成人午夜视频| 欧美一级一区二区| 亚洲欧美一区二区在线观看| 精品亚洲欧美一区| 欧美日韩国产一区| 亚洲免费视频中文字幕| 国内精品久久久久影院色| 欧美日韩你懂的| 亚洲欧美日韩电影| 国产69精品久久777的优势|