轉(zhuǎn)載請先后臺(tái)留言,,大家一起支持原創(chuàng),,推動(dòng)機(jī)器人使用和發(fā)展 本公眾號(hào)對各類ABB機(jī)器人應(yīng)用,仿真,,畢業(yè)設(shè)計(jì)提供技術(shù)支持,,詳細(xì)后臺(tái)留言 機(jī)器人與相機(jī)視覺通訊,主要包括: 1. socket通訊建立及收發(fā)數(shù)據(jù) 2. 數(shù)據(jù)關(guān)鍵信息的提取 3. 提取信息與機(jī)器人位置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機(jī)器人需要什么選項(xiàng),? 機(jī)器人需要616-1 PC-INTERFACE選項(xiàng) 4)socket通訊網(wǎng)線插哪個(gè)網(wǎng)口? Service口(IP固定:192.168.125.1)或者Wan口都可以,(可以自己設(shè)置) 5)創(chuàng)建client端的實(shí)例 通常機(jī)器人和相機(jī)通訊,,機(jī)器人作為client端,。 1)新建一個(gè)機(jī)器人系統(tǒng),注意建立系統(tǒng)時(shí)加入pc-interface選項(xiàng) 2)為了避免之前的連接沒有關(guān)閉,,先插入socketclose指令,,后面的socket1為自己新建的socketdev類型的變量 3)之后插入創(chuàng)建連接socketCreate 4)插入建立連接SocketConnect,后面需要指定Server的ip和端口,,如果是在電腦和另一臺(tái)虛擬控制器連接,,ip設(shè)為“127.0.0.1”,端口自定義,建議不要用默認(rèn)的1025. 這一步作用為機(jī)器人會(huì)和server建立連接,,如果沒有建立成功會(huì)一直等待,,如果成功則往下執(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)相機(jī)通常發(fā)送字符串給機(jī)器人,,比如”1.23,4.56,7.89\0D”,即x為1.23,,y為4.56,z的角度為7.89,,用\0D作為結(jié)束符,,數(shù)據(jù)之間用“,”隔開,。 2)如果機(jī)器人收到上述字符串,,如何把字符串提取出來并付給變量deltaX,deltaY,,和thetaZ,? 3)建立若干num變量,用以存儲(chǔ)過程數(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,查找第一個(gè)“,,”在第幾位,,得到EndBit1值 7) 8)EndBit1減去StartBit1就是x的數(shù)據(jù)長度 9)同理得到y和theta的信息 10)通過StrPart函數(shù),提取從StartBit1開始到LenBit1結(jié)束的字符串,,即x的值的字符串 11) 12) 同理得到y和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)鍵信息與點(diǎn)位數(shù)據(jù)的轉(zhuǎn)化 1)相機(jī)發(fā)過來的是xy和theta,,我們已經(jīng)從字符串里提取出x,y和theta值了,,但是機(jī)器人點(diǎn)位robtarget里組成的是trans:xyz以及rot:q1-q4。 2)ABB機(jī)器人用四元數(shù)表示角度,,如何轉(zhuǎn)化角度到四元數(shù),? 3)新建一個(gè)routine 4)Target_10_ini為之前在坐標(biāo)系workobjec_1下示教的點(diǎn)位,通常這個(gè)點(diǎn)位都是這個(gè)坐標(biāo)系下的0,0,0,,即在坐標(biāo)系0點(diǎn),。 5)Workobject_1坐標(biāo)系和相機(jī)里的坐標(biāo)系一致(相機(jī)可以通過棋盤格標(biāo)定紙標(biāo)定) 6)程序走的點(diǎn)位Target_10,,注意存儲(chǔ)類型為變量VAR,,否則不能賦值 7)新建num變量or_x,,or_y,or_z,表示原來點(diǎn)Target_10的姿態(tài)ABC數(shù)據(jù),。 8)通過函數(shù)eulerzyx得到角度,,每次只能得到一個(gè)角度 9) 10) 反斜杠\X 如下得到 11) 12) 把相機(jī)發(fā)來的x和y的偏量賦給target_10的x和y 13) 把相機(jī)發(fā)來的theta角度加給原來or_z角度,得到新的z方向角度 14)通過orientzyx函數(shù),,把or_x,,or_y,or_z三個(gè)角度重新轉(zhuǎn)化為Target_10的姿態(tài)四元數(shù) 15) 最后就得到了新的target_10位置和姿態(tài),。 四,、關(guān)鍵信息與坐標(biāo)系的轉(zhuǎn)化 1)以上方法主要針對僅需調(diào)整一個(gè)目標(biāo)點(diǎn),若有很多目標(biāo)或者軌跡,,如何調(diào)整,? 2)由于通常點(diǎn)位相對于坐標(biāo)系關(guān)系不變, 通過相機(jī)尋找物體特征點(diǎn)并調(diào)整工件坐標(biāo)系的oframe為常見做法,,具體方法參考上文 三),。詳解待后續(xù)文章介紹 E為工件坐標(biāo)系的Uframe,通常和相機(jī)坐標(biāo)系的0點(diǎn)對齊 F為工件坐標(biāo)系的Oframe,,即相機(jī)得到目標(biāo)特征點(diǎn)的位置 |
|