從機器視覺的角度,由簡入繁從相機標(biāo)定,平面物體檢測、有紋理物體、無紋理物體、深度學(xué)習(xí)、與任務(wù)/運動規(guī)劃結(jié)合等6個方面深度解析文章的標(biāo)題。
首先,我們要了解,機器人領(lǐng)域的視覺(Machine Vision)跟計算機領(lǐng)域(Computer Vision)的視覺有一些不同:機器視覺的目的是給機器人提供操作物體的信息。所以,機器視覺的研究大概有這幾塊:
1.?物體識別(Object Recognition):在圖像中檢測到物體類型等,這跟 CV 的研究有很大一部分交叉;
2.?位姿估計(Pose Estimation):計算出物體在攝像機坐標(biāo)系下的位置和姿態(tài),對于機器人而言,需要抓取東西,不僅要知道這是什么,也需要知道它具體在哪里;
3.?相機標(biāo)定(Camera Calibration):因為上面做的只是計算了物體在相機坐標(biāo)系下的坐標(biāo),我們還需要確定相機跟機器人的相對位置和姿態(tài),這樣才可以將物體位姿轉(zhuǎn)換到機器人位姿。
當(dāng)然,我這里主要是在物體抓取領(lǐng)域的機器視覺;SLAM 等其他領(lǐng)域的就先不講了。
由于視覺是機器人感知的一塊很重要內(nèi)容,所以研究也非常多了,我就我了解的一些,按照由簡入繁的順序介紹吧。
一. 相機標(biāo)定
這其實屬于比較成熟的領(lǐng)域。由于我們所有物體識別都只是計算物體在相機坐標(biāo)系下的位姿,但是,機器人操作物體需要知道物體在機器人坐標(biāo)系下的位姿。所以,我們先需要對相機的位姿進行標(biāo)定。
內(nèi)參標(biāo)定就不說了,參照張正友的論文,或者各種標(biāo)定工具箱;
外參標(biāo)定的話,根據(jù)相機安裝位置,有兩種方式:
Eye to Hand:相機與機器人極坐標(biāo)系固連,不隨機械臂運動而運動
Eye in Hand:相機固連在機械臂上,隨機械臂運動而運動
兩種方式的求解思路都類似,首先是眼在手外(Eye to Hand)
?
?
只需在機械臂末端固定一個棋盤格,在相機視野內(nèi)運動幾個姿態(tài)。由于相機可以計算出棋盤格相對于相機坐標(biāo)系的位姿A_i 、機器人運動學(xué)正解可以計算出機器人底座到末端抓手之間的位姿變化E_i 、而末端爪手與棋盤格的位姿相對固定不變。
這樣,我們就可以得到一個坐標(biāo)系環(huán) CX=XD 這種結(jié)構(gòu)的求解有很多方法,我這邊給出一個參考文獻:
Shiu, Yiu Cheung, and Shaheen Ahmad. "Calibration of wrist-mounted robotic sensors by solving homogeneous transform equations of the form AX= XB."ieee Transactions on Robotics and Automation 5.1 (1989): 16-29.
而對于眼在手上(Eye in Hand)的情況,也類似,在地上隨便放一個棋盤格(與機器人基座固連),然后讓機械臂帶著相機走幾個位姿,然后也可以形成一個AX=XB 的坐標(biāo)環(huán)。
?
二. 平面物體檢測
這是目前工業(yè)流水線上最常見的場景。目前來看,這一領(lǐng)域?qū)σ曈X的要求是:快速、精確、穩(wěn)定。所以,一般是采用最簡單的邊緣提取+邊緣匹配/形狀匹配的方法;而且,為了提高穩(wěn)定性、一般會通過主要打光源、采用反差大的背景等手段,減少系統(tǒng)變量。
目前,很多智能相機(如 cognex)都直接內(nèi)嵌了這些功能;而且,物體一般都是放置在一個平面上,相機只需計算物體的(x,y,θ)T 三自由度位姿即可。
另外,這種應(yīng)用場景一般都是用于處理一種特定工件,相當(dāng)于只有位姿估計,而沒有物體識別。
當(dāng)然,工業(yè)上追求穩(wěn)定性無可厚非,但是隨著生產(chǎn)自動化的要求越來越高,以及服務(wù)類機器人的興起。對更復(fù)雜物體的完整位姿(x,y,z,rx,ry,rz)T 估計也就成了機器視覺的研究熱點。
三.有紋理的物體
機器人視覺領(lǐng)域是最早開始研究有紋理的物體的,如飲料瓶、零食盒等表面帶有豐富紋理的都屬于這一類。
當(dāng)然,這些物體也還是可以用類似邊緣提取+模板匹配的方法。但是,實際機器人操作過程中,環(huán)境會更加復(fù)雜:光照條件不確定(光照)、物體距離相機距離不確定(尺度)、相機看物體的角度不確定(旋轉(zhuǎn)、仿射)、甚至是被其他物體遮擋(遮擋)。 ? ? 幸好有一位叫做 Lowe 的大神,提出了一個叫做 SIFT (Scale-invariant feature transform)的超強局部特征點:
Lowe, David G. "Distinctive image features from scale-invariant keypoints."International journal of computer vision 60.2 (2004): 91-110.
具體原理可以看上面這篇被引用 4萬+ 的論文或各種博客,簡單地說,這個方法提取的特征點只跟物體表面的某部分紋理有關(guān),與光照變化、尺度變化、仿射變換、整個物體無關(guān)。
因此,利用 SIFT 特征點,可以直接在相機圖像中尋找到與數(shù)據(jù)庫中相同的特征點,這樣,就可以確定相機中的物體是什么東西(物體識別)。
?
?
對于不會變形的物體,特征點在物體坐標(biāo)系下的位置是固定的。所以,我們在獲取若干點對之后,就可以直接求解出相機中物體與數(shù)據(jù)庫中物體之間的單應(yīng)性矩陣。
如果我們用深度相機(如Kinect)或者雙目視覺方法,確定出每個特征點的 3D 位置。那么,直接求解這個 PnP 問題,就可以計算出物體在當(dāng)前相機坐標(biāo)系下的位姿。
?
?
↑ 這里就放一個實驗室之前畢業(yè)師兄的成果
當(dāng)然,實際操作過程中還是有很多細節(jié)工作才可以讓它真正可用的,如:先利用點云分割和歐氏距離去除背景的影響、選用特征比較穩(wěn)定的物體(有時候 SIFT 也會變化)、利用貝葉斯方法加速匹配等。
而且,除了 SIFT 之外,后來又出了一大堆類似的特征點,如 SURF、ORB 等。
四. 無紋理的物體
好了,有問題的物體容易解決,那么生活中或者工業(yè)里還有很多物體是沒有紋理的:
我們最容易想到的就是:是否有一種特征點,可以描述物體形狀,同時具有跟 SIFT 相似的不變性?
不幸的是,據(jù)我了解,目前沒有這種特征點。
所以,之前一大類方法還是采用基于模板匹配的辦法,但是,對匹配的特征進行了專門選擇(不只是邊緣等簡單特征)。
這里,我介紹一個我們實驗室之前使用和重現(xiàn)過的算法 LineMod:
Hinterstoisser, Stefan, et al. "Multimodal templates for real-time detection of texture-less objects in heavily cluttered scenes." Computer Vision (ICCV), 2011 IEEE International Conference on. IEEE, 2011.
?
?
簡單而言,這篇論文同時利用了彩色圖像的圖像梯度和深度圖像的表面法向作為特征,與數(shù)據(jù)庫中的模板進行匹配。
由于數(shù)據(jù)庫中的模板是從一個物體的多個視角拍攝后生成的,所以這樣匹配得到的物體位姿只能算是初步估計,并不精確。
但是,只要有了這個初步估計的物體位姿,我們就可以直接采用 ICP 算法(Iterative closest point)匹配物體模型與 3D 點云,從而得到物體在相機坐標(biāo)系下的精確位姿。 ?
當(dāng)然,這個算法在具體實施過程中還是有很多細節(jié)的:如何建立模板、顏色梯度的表示等。另外,這種方法無法應(yīng)對物體被遮擋的情況。(當(dāng)然,通過降低匹配閾值,可以應(yīng)對部分遮擋,但是會造成誤識別)。
針對部分遮擋的情況,我們實驗室的張博士去年對 LineMod 進行了改進,但由于論文尚未發(fā)表,所以就先不過多涉及了。
五.深度學(xué)習(xí)
由于深度學(xué)習(xí)在計算機視覺領(lǐng)域得到了非常好的效果,我們做機器人的自然也會嘗試把 DL 用到機器人的物體識別中。
首先,對于物體識別,這個就可以照搬 DL 的研究成果了,各種 CNN 拿過來用就好了。在 2016 年的『亞馬遜抓取大賽』中,很多隊伍都采用了 DL 作為物體識別算法。
然而, 在這個比賽中,雖然很多人采用 DL 進行物體識別,但在物體位姿估計方面都還是使用比較簡單、或者傳統(tǒng)的算法。似乎并未廣泛采用 DL。如?周博磊?所說,一般是采用 semantic segmentation network 在彩色圖像上進行物體分割,之后,將分割出的部分點云與物體 3D 模型進行 ICP 匹配。
當(dāng)然,直接用神經(jīng)網(wǎng)絡(luò)做位姿估計的工作也是有的,如這篇:
Doumanoglou, Andreas, et al. "Recovering 6d object pose and predicting next-best-view in the crowd." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.
?
?
它的方法大概是這樣:對于一個物體,取很多小塊 RGB-D 數(shù)據(jù)(只關(guān)心一個patch,用局部特征可以應(yīng)對遮擋);每小塊有一個坐標(biāo)(相對于物體坐標(biāo)系);然后,首先用一個自編碼器對數(shù)據(jù)進行降維;之后,用將降維后的特征用于訓(xùn)練Hough Forest。
?
?
六. 與任務(wù)/運動規(guī)劃結(jié)合
這部分也是比較有意思的研究內(nèi)容,由于機器視覺的目的是給機器人操作物體提供信息,所以,并不限于相機中的物體識別與定位,往往需要跟機器人的其他模塊相結(jié)合。 我們讓機器人從冰箱中拿一瓶『雪碧』,但是這個 『雪碧』 被『美年達』擋住了。
我們?nèi)祟惖淖龇ㄊ沁@樣的:先把 『美年達』 移開,再去取 『雪碧』 。
所以,對于機器人來說,它需要先通過視覺確定雪碧在『美年達』后面,同時,還需要確定『美年達』這個東西是可以移開的,而不是冰箱門之類固定不可拿開的物體。 當(dāng)然,將視覺跟機器人結(jié)合后,會引出其他很多好玩的新東西。由于不是我自己的研究方向,所以也就不再班門弄斧了。
編輯:黃飛
評論
查看更多