利用單目視覺做NAO機械人攝像頭座標轉換

2021-09-29 03:11:03 字數 1299 閱讀 4435

趁著比賽將近,總結一下對於nao機械人攝像頭座標轉換問題的理解。

為了讓nao機械人識別某個物體,然後走到物體面前一段距離的位置停止,需要知道nao和物體的距離和角度。通過查詢aldebaran documentation可知用函式gettargetpositon()可以得到某些特定的物體的座標。

但是對於一般的物體而言這個並沒有什麼卵用。。

二.解決辦法

用簡單的單目測距原理和相似三角形原理作乙個座標變換:

設以攝像頭為座標原點的座標係為a(原點:攝像頭鏡頭,x軸正前方,y軸左前方)

以攝像頭焦平面為座標原點的座標係為b(原點:2d影象中心(640x480的圖就是(320,240)啦),注意這個x軸和y軸方向如圖所示:

圖中的角60.97°和47.64°分別是nao機械人的水平張角和垂直張角。

由三角函式變換:alpha=((320-x)/640)60.97pi/180

beta=((y-240)/480)47.64pi/180

由nao提供的api,getangles()引數設定成headyaw和headpitch獲得頭部姿態,假設是rotation1和rotation2,則可以得到校正後的alpha』和beta』:

alpha』=alpha+rotation1

beta』=beta+rotation2

然後通過angleinterpolation()將頭部轉到目標物中間,理想狀態下應該物體重心點正好在影象的中心(320,240)

通過以上變換是為了讓機械人的攝像頭正好對準物體中心,這樣構造出來的計算距離的模型會是乙個平面三角形,簡化了計算。

v5的nao身高h總共是459.59mm,假設物體長度l,則有:

其中theta是下攝像頭和水平方向夾角,為39.7°

phi可以由函式getangle()帶入引數"headpitch"得到

將已知條件代入即可得到距離s

以上是一種簡單的獲得物體座標的方式,其優點是寫**簡單快捷,缺點是沒有攝像頭標定精度較低,且應用範圍較小。可作為替代的還有雙目視覺和採用深度攝像頭獲得三維座標的方案,等有空再更新。

機械人視覺專案 視覺檢測識別 機械人跟隨(3)

嵌入式裝置,計算資源有限,對演算法的執行時間敏感。yolov3在tx2上能跑到5fps,但存在偶爾漏檢的情況。yolov3使用darknet。kcf雖然非常快,但很容易跟丟,對於目標形變 人的姿態變化 目標移動較快 目標離開場景等情況,效果較差。kcf使用opencv contrib的實現。dete...

機械人視覺專案 視覺檢測識別 機械人跟隨(16)

跟蹤丟失後再檢測時加上目標特徵匹配,是將第一幀檢測到的目標框中的特徵提取出來,具體可以採用尺度不變特徵sift,surf特徵提取,提取出來的特徵,能否以向量的形式儲存在變數中,再檢測時搜尋影象幀中的待確定目標區域 可能有數個這樣的roi 可以通過計算歐式距離的方式與第一幀影象中的特徵進行匹配,快速排...

機械人視覺專案 視覺檢測識別 機械人跟隨(20)

1.嘗試用tx2外接kinectv1深度相機獲取rgbd影象資訊,傳入到我們的行人檢測 框架中,除錯基於深度相機的行人檢測與跟蹤演算法的效果。首先安裝kinect對應arm處理器的ubuntu驅動程式,libfreenect v2.0 openni v2.2.0.33 nite v2.0.0 安裝l...