簡介:機器人與相機視覺通訊,主要包括: 1. socket通訊建立及收發(fā)數(shù)據(jù) 2. 數(shù)據(jù)關(guān)鍵信息的提取 3. 提取信息與機器人位置robtarget(或者工件坐標(biāo)系下的oframe)的轉(zhuǎn)化 一、socket的創(chuàng)建 1)什么是socket通訊? 就是TCP/IP通訊,無協(xié)議,在微軟環(huán)境下稱為socket 2)……
機器人與相機視覺通訊,主要包括:
1. socket通訊建立及收發(fā)數(shù)據(jù)
2. 數(shù)據(jù)關(guān)鍵信息的提取
3. 提取信息與機器人位置robtarget(或者工件坐標(biāo)系下的oframe)的轉(zhuǎn)化
一、socket的創(chuàng)建
1)什么是socket通訊?
就是TCP/IP通訊,無協(xié)議,在微軟環(huán)境下稱為socket
2)socket通訊能干什么?
可以收發(fā)制定的數(shù)據(jù),包括sting字符串,byte數(shù)組等
3)創(chuàng)建socket機器人需要什么選項?
機器人需要616-1 PC-INTERFACE選項

4)socket通訊網(wǎng)線插哪個網(wǎng)口?
Service口(IP固定:192.168.125.1)或者Wan口都可以,(可以自己設(shè)置)
5)創(chuàng)建client端的實例
通常機器人和相機通訊,機器人作為client端。
1)新建一個機器人系統(tǒng),注意建立系統(tǒng)時加入pc-interface選項

2)為了避免之前的連接沒有關(guān)閉,先插入socketclose指令,后面的socket1為自己新建的socketdev類型的變量

3)之后插入創(chuàng)建連接socketCreate
4)插入建立連接SocketConnect,后面需要指定Server的ip和端口,如果是在電腦和另一臺虛擬控制器連接,ip設(shè)為“127.0.0.1”,端口自定義,建議不要用默認(rèn)的1025.
這一步作用為機器人會和server建立連接,如果沒有建立成功會一直等待,如果成功則往下執(zhí)行

5)此處做測試,在建立成功后,插入TPWrite指令,可以在示教器看到socketclinent connect successful
6)接下去可以收發(fā)數(shù)據(jù),此處示例為client先發(fā)送數(shù)據(jù)給server,再接受server發(fā)送回來的數(shù)據(jù)
7)SocketSend后面可以發(fā)送string或者byte數(shù)組,具體可以選擇不同可選變量
8)發(fā)送完畢后,client接受到server發(fā)回的數(shù)據(jù)并寫屏
二、數(shù)據(jù)關(guān)鍵信息的提取
1)相機通常發(fā)送字符串給機器人,比如”1.23,4.56,7.89\0D”,即x為1.23,y為4.56,z的角度為7.89,用\0D作為結(jié)束符,數(shù)據(jù)之間用“,”隔開。
2)如果機器人收到上述字符串,如何把字符串提取出來并付給變量deltaX,deltaY,和thetaZ?
3)建立若干num變量,用以存儲過程數(shù)據(jù),比如StartBit1,表示x的數(shù)據(jù)從第幾位開始,Endbit1表示x的數(shù)據(jù)結(jié)束是第幾位,Lenbit1表示x數(shù)據(jù)的長度,s1表示提取的x的值的字符串
4)

5)先假設(shè)x的第一位是1,給Startbit1賦值為1
6)插入函數(shù)strfind,查找第一個“,”在第幾位,得到EndBit1值
7)

8)EndBit1減去StartBit1就是x的數(shù)據(jù)長度
9)同理得到y(tǒng)和theta的信息

10)通過StrPart函數(shù),提取從StartBit1開始到LenBit1結(jié)束的字符串,即x的值的字符串
11)

12) 同理得到y(tǒng)和z的字符串
13)通過StrToVal函數(shù),把s1轉(zhuǎn)為num型,付給delta_x, StrToVal函數(shù)的反饋值為bool量,即轉(zhuǎn)換成功為true不成功為false
14)同理得到delta_y和delta_theta
15) 成功后可以寫屏測試,如下圖

三、關(guān)鍵信息與點位數(shù)據(jù)的轉(zhuǎn)化
1)相機發(fā)過來的是xy和theta,我們已經(jīng)從字符串里提取出x,y和theta值了,但是機器人點位robtarget里組成的是trans:xyz以及rot:q1-q4。
2)
ABB機器人用四元數(shù)表示角度,如何轉(zhuǎn)化角度到四元數(shù)?
3)新建一個routine

4)Target_10_ini為之前在坐標(biāo)系workobjec_1下示教的點位,通常這個點位都是這個坐標(biāo)系下的0,0,0,即在坐標(biāo)系0點。
5)Workobject_1坐標(biāo)系和相機里的坐標(biāo)系一致(相機可以通過棋盤格標(biāo)定紙標(biāo)定)
6)程序走的點位Target_10,注意存儲類型為變量VAR,否則不能賦值
7)新建num變量or_x,or_y,or_z,表示原來點Target_10的姿態(tài)ABC數(shù)據(jù)。
8)通過函數(shù)eulerzyx得到角度,每次只能得到一個角度
9)

10) 反斜杠\X 如下得到
11)

12) 把相機發(fā)來的x和y的偏量賦給target_10的x和y
13) 把相機發(fā)來的theta角度加給原來or_z角度,得到新的z方向角度
14)通過orientzyx函數(shù),把or_x,or_y,or_z三個角度重新轉(zhuǎn)化為Target_10的姿態(tài)四元數(shù)
15) 最后就得到了新的target_10位置和姿態(tài)。
文章來源,
工業(yè)機器人維修官網(wǎng):etongyue.com