1. 程式人生 > >讓機械臂自動進行手眼標定---以Dobot Magician和Realsense為例(附示例程式碼)

讓機械臂自動進行手眼標定---以Dobot Magician和Realsense為例(附示例程式碼)

你需要看這篇文章嗎?

  這篇文章描述的是如何自動化手眼標定(眼在手外,eye-to-hand)過程,以建立機械臂座標系攝像頭座標系之間的轉換關係。示例的硬體環境是Dobot Magician 機械手、Intel RealSense D415 深度攝像頭。如果您是想了解相機內外引數標定,請移步文章末尾參考文獻 ,那裡有一些博主認為不錯的教程。

前言

  博主最近想用機械臂做一些視覺相關的東西,由於之前沒有接觸過相關的知識,加上網上很多相關的部落格和知乎回答都說的不夠直白,所以想現學現賣,寫一篇Tutorial,供需要進行相關工作的同學參考。如果文中有錯誤或者概念混淆,希望大家留言指出。相關的程式碼在

Github上供大家參考。

  首先,我們用一張圖來描述具體的場景:

Alt text

  我們的任務是讓機械臂能根據攝像頭捕捉到的影象,精準地夾起桌面上的小木塊。首先,我們可以通過機械臂API(或者運動學方程)獲得當前機械臂末端在機械臂座標系下的位置。同時,我們也可以獲得機械臂末端、小木塊在深度攝像頭捕獲影象中的座標以及深度資訊。為了讓機械手知道小木塊的位置,並執行到小木塊的上方進行夾取,我們需要建立起攝像頭影象座標系到機械臂座標系的轉換關係。

什麼是標定?

相機標定

  照例說一下什麼是標定,簡單的說,標定就是獲得不同座標系之間的轉換關係。相機的標定分為內參和外參標定。相機內參,顧名思義描述相機的內部屬性,如相機的焦距、畫素點大小、相機畸變屬性,這裡就不詳細敘述了。外參描述相機的空間位置,也就是相機座標相對於(人為規定的)世界座標系的旋轉和平移。通過內參和外參,我們可以準確地從相機捕獲的影象的座標轉換到外部世界的座標。當然,因為RGB影象是二維的,世界座標是三維的,我們需要再加入影象的深度資訊,深度資訊可以通過深度攝像頭或者一些三維重建方法獲得,筆者對這個不是很瞭解,OpenCV似乎有相關方法,熟悉的朋友可以發信或留言告訴我。另外,需要指出的是,對於需要轉換的點均在世界中的一個二維平面,這個問題就退化為二維到二維的轉換,不需要深度資訊。

手眼標定

  手眼標定可以理解為相機標定+機械臂標定。機械臂標定就是把機械臂座標系轉換為世界座標系,相機標定已經把影象座標系轉換到了攝像頭座標系,再轉換到了世界座標系,因此機械臂座標系影象座標系之間的轉換關係我們也可以確定了。在實際的標定過程中,我們可以忽略到世界座標系轉換這個步驟,直接將攝像頭座標系轉換到機械臂座標系。如果不清楚各個座標系,可以參考這篇博文。另外,這篇博文將機器人手眼標定這一過程比作智障兒童抓玩具,講解的比較清晰。

方法

  由於筆者使用的是RealSense D415深度攝像頭,能直接利用Intel的Realsense SDK 2.0來將影象中的點還原到攝像頭座標系下的三維座標,標定的過程一下就簡化了下來。因為SDK直接能利用相機的內參和深度資訊,將影象座標系下的點還原到相機座標系下。因此,只需要將機械臂座標系和相機座標系之間的轉換關係求得即可。如果使用的是其他攝像頭,需要自己根據相機的內參將影象座標系轉換到相機座標系,具體的轉換方法可參考可以參考

這篇博文

  關於機械臂控制,不同型號的機械臂應該有不同的座標系設定。以Dobot Magician為例,這款機械臂提供笛卡爾座標系,該座標系規定機械臂的地盤中心為座標的原點,並且末端的位置直接可以通過機械臂提供的API讀出,如圖所示:

Alt text

  下一步,我們需要的是獲取機械臂末端在影象座標系下的座標。為了能讓標定過程自動化,我們需要機器人能在影象中自動找到機械手的末端座標。在這裡,我們使用了ArUco標籤,ArUco是科爾多瓦大學人工視覺應用小組(A.V.A)設計開發的一個開源增強現實庫,OpenCV裡也內建有關於ArUco標籤的識別方法,我們通過對機械臂末端貼上ArUco標籤,並在捕獲的影象中識別出標籤,並計算標籤的中心點,來獲得機械臂末端的座標,具體實現步驟會在下一小節中詳解。

  到目前,我們已經可以獲得機械臂末端在影象座標系中的座標和在機械臂座標系中的座標,只需通過一個旋轉矩陣R和平移矩陣T,即可獲得兩個座標系之間的轉換關係。如下式:

Parm=RPimage+T [xarm1xarm2...xarmnyarm1yarm2...yarmnzarm1zarm2...zarmn]=R[ximage1ximage2...ximagenyimage1yimage2...yimagenzimage1zimage2...zimagen]+T
將R和T矩陣合併,得到下式: