工業(yè)現(xiàn)場(chǎng)使用視覺(jué)時(shí)一般需要相機(jī)坐標(biāo)系和機(jī)械手臂坐標(biāo)系的轉(zhuǎn)化,這里介紹一種比較簡(jiǎn)單的標(biāo)定方案。沒(méi)有使用到標(biāo)定板。經(jīng)過(guò)幾個(gè)項(xiàng)目的測(cè)試,精度還算可以,如果要求高精度的場(chǎng)合,就用標(biāo)定板標(biāo)定吧!【可以購(gòu)買(mǎi)專(zhuān)用的標(biāo)定板,或者自己制作(像我這種窮逼),哈哈
如上圖所示:OXY為機(jī)械手坐標(biāo)系,O'X'Y'為相機(jī)坐標(biāo)系。theta為兩個(gè)坐標(biāo)系之間的夾角。假設(shè)P點(diǎn)在圖像上的位置如圖,則P在機(jī)械手坐標(biāo)系有一個(gè)坐標(biāo),在圖像坐標(biāo)系也有一個(gè)坐標(biāo)。我們要做的工作就是圖像上的任意一點(diǎn)都可以轉(zhuǎn)化為機(jī)械手坐標(biāo)系上的坐標(biāo)點(diǎn):P(Machine) = f(P(Image))。接下來(lái)介紹如何找到這個(gè)關(guān)系。
OXY為機(jī)械手坐標(biāo)系 O'X'Y'為相機(jī)坐標(biāo)系從上圖可以看出坐標(biāo)轉(zhuǎn)化關(guān)系:
x= x' * r * cos(theta) - y' * r * sin(theta) + x0;
y = x' * r * sin(theta) + y' * r * cos(theta) + y0;
其中r是毫米像素比、(mm/pixel)就是一個(gè)毫米有幾個(gè)像素,theta為兩個(gè)坐標(biāo)系之間的夾角,(x0,y0)為圖像坐標(biāo)原點(diǎn)到機(jī)械坐標(biāo)原點(diǎn)的距離。
簡(jiǎn)化抽象公式,假設(shè):
a = r * cos(theta);
b = r * sin(theta);
c = x0;
d = y0;
得到:
x= x' * a - y' * b + c;
y = x' * b + y' * a + d;
很顯然,要解出這個(gè)方程,需要兩組對(duì)應(yīng)關(guān)系,就是兩組對(duì)應(yīng)的坐標(biāo)點(diǎn)。設(shè)兩組坐標(biāo)點(diǎn),如下:
第一組:圖像坐標(biāo)點(diǎn):(xImage1,yImage1) 對(duì)應(yīng)的機(jī)械坐標(biāo)點(diǎn):(xMachine1,yMachine1)
第二組:圖像坐標(biāo)點(diǎn):(xImage2,yImage2) 對(duì)應(yīng)的機(jī)械坐標(biāo)點(diǎn):(xMachine2,yMachine2)
則可以解出a ,b, c, d。如下:
所以,就得出了圖像上任意一點(diǎn)的像素坐標(biāo)轉(zhuǎn)成機(jī)械手坐標(biāo)的關(guān)系。
以下是我寫(xiě)的一個(gè)求解a ,b, c, d軟件:
下面舉個(gè)栗子說(shuō)明一下操作吧!這是我實(shí)際項(xiàng)目中的機(jī)械手和相機(jī)布局情況,畫(huà)圖真T``M`累!,如下圖:
首先將產(chǎn)品上的目標(biāo)點(diǎn)搞到機(jī)械手的Z軸的中心,然后移動(dòng)到相機(jī)視野范圍內(nèi),讓識(shí)別產(chǎn)品上的目標(biāo)點(diǎn),這時(shí),你會(huì)讀到一組機(jī)械手坐標(biāo)(也就是上面所說(shuō)的(xMachine1,yMachine1)),和一組相機(jī)坐標(biāo)(也就是上面所說(shuō)的(xImage1,yImage1)),再在相機(jī)視野范圍內(nèi)移動(dòng)機(jī)械手,就可以得到第二組數(shù)據(jù)(xMachine2,yMachine2)和(xImage2,yImage2),寫(xiě)入標(biāo)定軟件就可以求出a, b, c, d。就求出了圖像上任意一點(diǎn)對(duì)應(yīng)的機(jī)械坐標(biāo),然后你下次移動(dòng)第二個(gè)產(chǎn)品到相機(jī)視野時(shí),首先識(shí)別目標(biāo)點(diǎn)的像素坐標(biāo),經(jīng)過(guò)對(duì)應(yīng)的轉(zhuǎn)換就可以得出機(jī)械坐標(biāo),然后進(jìn)行相應(yīng)的偏移即可實(shí)現(xiàn)你想要的操作!
當(dāng)然,有些時(shí)候,實(shí)際現(xiàn)場(chǎng)并沒(méi)有如你所愿,現(xiàn)在出現(xiàn)一種情況就是以機(jī)械手自帶的Z軸無(wú)法移動(dòng)到視野中去,這樣就無(wú)法進(jìn)行上面的操作了,系不系!這也是我遇到的情況,SO,我的解決方案如下:先上示意圖:
如圖,就是在機(jī)械手Z軸的橫桿上加上一個(gè)橫條,使得產(chǎn)品可以移動(dòng)到視野范圍內(nèi)。然后進(jìn)行上面的操作,雖然現(xiàn)在可以將產(chǎn)品移動(dòng)到視野范圍內(nèi)了,但是你會(huì)發(fā)現(xiàn)此時(shí)機(jī)械手的坐標(biāo)并不是產(chǎn)品的坐標(biāo),因?yàn)樗麄冎g隔著一個(gè)橫條,那我們要怎么換算過(guò)來(lái)呢!
首先,我們可以這么假定的認(rèn)為,他們是機(jī)械手的坐標(biāo)就是產(chǎn)品的坐標(biāo),然后就可以用上面取兩組對(duì)應(yīng)點(diǎn)的方法求出圖像上每個(gè)點(diǎn)的機(jī)械坐標(biāo)了,但是,此時(shí)的機(jī)械坐標(biāo)并不是真正的機(jī)械坐標(biāo),但是,我們可以利用這些坐標(biāo)找出機(jī)械手U軸的旋轉(zhuǎn)中心就是Z軸(就是實(shí)際機(jī)械坐標(biāo)所在的位置)在我們所建立的不是真正的機(jī)械坐標(biāo)系中的坐標(biāo)。是不是有點(diǎn)不好理解,我也不大清楚怎么描述!求U軸的旋轉(zhuǎn)中心的過(guò)程如下:上圖:
如圖:將產(chǎn)品的目標(biāo)點(diǎn)繞機(jī)械手的U軸的旋轉(zhuǎn)中心旋轉(zhuǎn)得到3的目標(biāo)點(diǎn)的不是真正的機(jī)械坐標(biāo)系的坐標(biāo)P1,P2,P3,必須讓每次旋轉(zhuǎn)的目標(biāo)點(diǎn)在視野范圍內(nèi),然后通過(guò)圓弧上的3點(diǎn)就可以求得圓心。此時(shí)的圓心坐標(biāo)為不是真正的機(jī)械坐標(biāo)系的坐標(biāo)。然后我們就可以求出產(chǎn)品中心和機(jī)械手U軸旋轉(zhuǎn)中心的deltaX,deltaY,然后就可以結(jié)合真正的機(jī)械坐標(biāo)系建立工件坐標(biāo)系,要對(duì)機(jī)械手有些了解才比較好理解這些拗口的話(huà)!然后對(duì)于每一個(gè)新的產(chǎn)品都可以建立合適的工件坐標(biāo)系,然后進(jìn)行補(bǔ)正和一些操作!
相機(jī)跟隨著機(jī)械手運(yùn)動(dòng)(它們綁定在一起了),如果還將標(biāo)定靶標(biāo)也固定在機(jī)械手上的話(huà),三個(gè)對(duì)象都相對(duì)運(yùn)動(dòng),就無(wú)法標(biāo)定了!那要怎么利用標(biāo)定助手完成標(biāo)定呢?經(jīng)過(guò)思考,我給出了以下標(biāo)定思路:
整個(gè)標(biāo)定系統(tǒng)的初始狀態(tài)
相機(jī)和機(jī)械手綁定在一起并且機(jī)械手旋轉(zhuǎn)中心處于機(jī)械原點(diǎn),這時(shí)候相機(jī)中心和機(jī)械手中心有一個(gè)相對(duì)的偏移并且是固定的(相機(jī)中心和機(jī)械手旋轉(zhuǎn)中心的相對(duì)距離設(shè)為(detX,detY)),將標(biāo)定靶標(biāo)放置在工作區(qū)域(實(shí)際機(jī)械手的工作區(qū)域)中的合適位置。
第一步:求取第一組圖像點(diǎn)坐標(biāo)C1
移動(dòng)機(jī)械手(相機(jī)會(huì)跟著移動(dòng))到相機(jī)能夠清晰拍攝到標(biāo)定靶標(biāo)的位置(設(shè)該位置的機(jī)械坐標(biāo)為(x0,y0))。然后調(diào)整標(biāo)定靶標(biāo)的識(shí)別參數(shù),使得能夠?qū)崟r(shí)的識(shí)別標(biāo)定靶標(biāo)的中心位置,手動(dòng)移動(dòng)靶標(biāo)最好讓它遠(yuǎn)離圖像中心,越遠(yuǎn)越好(精度越高)但是不能超出相機(jī)的視野范圍,我就把靶標(biāo)放在相機(jī)視野的左上角的區(qū)域吧,然后我們識(shí)別當(dāng)前靶標(biāo)的圖像位置C1,就是第一組數(shù)據(jù)的圖像點(diǎn)。
第二步:求取第一組機(jī)械點(diǎn)坐標(biāo)M1
進(jìn)入“標(biāo)定”選項(xiàng)卡,勾選“顯示十字標(biāo)”,這時(shí)候會(huì)在實(shí)時(shí)圖像中間顯示一個(gè)藍(lán)色的十字光標(biāo),然后,慢速移動(dòng)機(jī)械手,直到C1點(diǎn)和十字光標(biāo)的交點(diǎn)重合(也就是說(shuō)移動(dòng)機(jī)械手讓實(shí)時(shí)識(shí)別到的靶標(biāo)中心坐標(biāo)處于圖像的中心,比如采集的圖像為2048*1536大小的,你需要緩慢移動(dòng)機(jī)械手(靶標(biāo)保持不動(dòng))直到靶標(biāo)的中心處于(1024,768)的這個(gè)位置),然后記下當(dāng)前的機(jī)械手坐標(biāo)也就是第一組數(shù)據(jù)的機(jī)械點(diǎn)M1(注意:此時(shí)實(shí)際是讓相機(jī)中心和靶標(biāo)中心重合,并非機(jī)械手旋轉(zhuǎn)中心和靶標(biāo)中心重合,它們之間差了一個(gè)detX,detY的距離,具體怎么換算,等下再說(shuō))。
第三步:求取第二組圖像點(diǎn)坐標(biāo)C2
將機(jī)械手移動(dòng)回到初始的工作坐標(biāo)點(diǎn)(x0,y0),將靶標(biāo)放在相機(jī)視野的右下角的區(qū)域,識(shí)別當(dāng)前的靶標(biāo)圖像坐標(biāo)C2,就是第二組數(shù)據(jù)的圖像點(diǎn)。
第四步:求取第二組機(jī)械點(diǎn)坐標(biāo)M2
同理,慢速移動(dòng)機(jī)械手,直到C2點(diǎn)和十字光標(biāo)的交點(diǎn)重合(就是移動(dòng)機(jī)械手讓實(shí)時(shí)識(shí)別到的靶標(biāo)中心坐標(biāo)處于圖像的中心),然后記下當(dāng)前的機(jī)械手坐標(biāo)也就是第二組數(shù)據(jù)的機(jī)械點(diǎn)M2。
第五步:求取整個(gè)機(jī)械手工作區(qū)域坐標(biāo)系和相機(jī)坐標(biāo)系的對(duì)應(yīng)關(guān)系
不知道你有沒(méi)有發(fā)現(xiàn),上面求得工作區(qū)域只對(duì)工作區(qū)域(x0,y0)開(kāi)始到相機(jī)視野結(jié)束的位置有效(比如你在機(jī)械手移動(dòng)到工作區(qū)域(x0,y0)為起點(diǎn)的位置識(shí)別靶標(biāo)的圖像位置坐標(biāo)為(100,100),但是你將機(jī)械手移動(dòng)到工作區(qū)域(x1,y1)為起點(diǎn)的位置識(shí)別靶標(biāo)的圖像位置坐標(biāo)也可能為(100,100))。這樣換算過(guò)來(lái)的機(jī)械坐標(biāo)就是錯(cuò)誤的,其實(shí)我們上面求得是小區(qū)域的轉(zhuǎn)換關(guān)系,那我們要怎么擴(kuò)展到整個(gè)機(jī)械手的工作區(qū)域呢?我們只需要這樣做:在機(jī)械手工作的時(shí)候是可以知道自己在哪里的,比如:現(xiàn)在機(jī)械手移動(dòng)到工作區(qū)域(x1,y1)為起點(diǎn)的位置識(shí)別靶標(biāo)的圖像位置坐標(biāo)為(100,100),我們將(100,100)代入轉(zhuǎn)換關(guān)系trans得出來(lái)的機(jī)械坐標(biāo)是對(duì)應(yīng)(x0,y0)的,要轉(zhuǎn)換到對(duì)應(yīng)(x1,y1)的只需要將換算處理的坐標(biāo)加上(x1 - x0,y1 - y0)即可!抽象的公式如下:
其中trans函數(shù)就是將圖像坐標(biāo)轉(zhuǎn)換為相對(duì)于(x0,y0)工作區(qū)域的機(jī)械坐標(biāo),再加上坐標(biāo)(x1 - x0,y1 - y0)就是當(dāng)前正確的機(jī)械坐標(biāo)。到此,我們得到了圖像坐標(biāo)和整個(gè)機(jī)械手工作區(qū)域的坐標(biāo)的關(guān)系,但是此時(shí)的機(jī)械坐標(biāo)指的是相機(jī)的中心,并不是機(jī)械手的旋轉(zhuǎn)中心。
第六步:將相機(jī)中心轉(zhuǎn)換為機(jī)械手的旋轉(zhuǎn)中心
首先,你可以利用目測(cè)法,游標(biāo)卡尺法等等粗略的算出detX,detY的值,然后,進(jìn)行實(shí)時(shí)識(shí)別和移動(dòng)測(cè)試進(jìn)行細(xì)調(diào),因?yàn)榇致缘墓浪阌姓`差,你可以經(jīng)過(guò)多次微調(diào)直到精確到機(jī)械手的旋轉(zhuǎn)中心移動(dòng)到產(chǎn)品的上方就成功了。記下此時(shí)的detX,detY,代入以下公式就可以算出了最終的機(jī)械手應(yīng)該去的地方了。最終的換算公式如下:
整個(gè)過(guò)程的偽代碼運(yùn)算過(guò)程如下:
利用標(biāo)定助手求取[a,b,c,d]外參矩陣的輸入?yún)?shù)[C1,M1]和[C2,M2]的操作方法如下圖所示:
-
圖像
+關(guān)注
關(guān)注
2文章
1083瀏覽量
40449 -
像素
+關(guān)注
關(guān)注
1文章
203瀏覽量
18581 -
坐標(biāo)
+關(guān)注
關(guān)注
1文章
17瀏覽量
21386 -
機(jī)械手
+關(guān)注
關(guān)注
7文章
335瀏覽量
29634
原文標(biāo)題:工業(yè)現(xiàn)場(chǎng)相機(jī)坐標(biāo)系和機(jī)械手坐標(biāo)系的標(biāo)定
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論