簡介:1)什么是碼垛? 有規(guī)律的移動機器人進行抓取及放置 2)ABB機器人維修-如何簡便碼垛程序 設置好工件坐標系,工具,對第一個碼垛放置點進行示教,xyz方向的間距和個數(shù)可設 3)如何創(chuàng)建 創(chuàng)建m_pallet模塊 建立兩個 在init 程序里,設置xyz方向個數(shù)和各方向間距……
1)什么是碼垛?
有規(guī)律的移動機器人進行抓取及放置
設置好工件坐標系,工具,對第一個碼垛放置點進行示教,xyz方向的間距和個數(shù)可設
3)如何創(chuàng)建
創(chuàng)建m_pallet模塊

建立兩個

在init 程序里,設置xyz方向個數(shù)和各方向間距

在p_main程序里,創(chuàng)建機器人移動到pHome點,pPick位置(抓取位置),以及第一個放置點
通過三層for循環(huán),進行碼垛。實例程序為先x方向,再y方向,再z方向
其中偏移如下:
創(chuàng)建有規(guī)律的機器人旋轉(zhuǎn)

1)如果有上圖所示6個產(chǎn)品位置要吸取,如何最快速的創(chuàng)建點位?(純示教?Naive,太體力活了。)
2)如下圖,我們可以發(fā)現(xiàn)1號位置和0號位置姿態(tài)一樣,1號相對于0號就是一個半徑的偏移,2-6號位置相對于0號也都是一個半徑的偏移,2-6號姿態(tài)均朝向圓心。由于圖中為6個,即從2號開始,每個點姿態(tài)相對于1號旋轉(zhuǎn)了60°

3)是不是可以只要示教0號點位置,同時已知半徑(未知的話,自己量一下),就能自動算出其他6個點位置而不用示教了呢?答案當然是可以的!。
4)由于涉及到坐標系偏移和旋轉(zhuǎn),所以要做好Tool和工件坐標系
5)創(chuàng)建工具gripper_dual,假設z方向100,工具的Z方向為工具延伸方向

6)如下圖創(chuàng)建坐標系,圓心在中間,0號到1號方向為X,y如圖。下圖中的工件坐標系Z朝下(滿足右手法則)。這樣創(chuàng)建主要是為了計算方便。

7)在workwobject2坐標系,gripper_dual工具下,示教中間產(chǎn)品位置Target_center,此時工具的Z必須垂直于產(chǎn)品平面,即工具的Z朝下。(其實只是要用這個點的姿態(tài)和z,這個點的xy都是0,因為這個點在workobject2坐標系處于原點,即xy都是0)
8)設置圓心到第一個產(chǎn)品的距離(即半徑radius),這里舉例
9)我們假設第一個位置叫Target1,則在workobject2坐標系下
Target1:=Target_center;!先讓Target1位置和姿態(tài)都等于
Target1.trans.x:=radius*cos(60*0);!重新計算位置的
Target1.trans.y:=radius*sin(60*0);!重新計算位置的
Target1:=RelTool(Target1,0,0,0Rz:=0*60);!得到計算后的位置x和y后,tcp繞著工具的Z旋轉(zhuǎn)60°。
10)通過上述例子,就得到了Target1位置,注意是在workobject2坐標系下。
11)再配合test等流程,就可以比較簡單的完成6個位置的計算和移動,如下
PROC main()
radius:=21.45;
count1:=1;
WHILEcount1<7 DO
rHome;
cal;
routine1;
count1:=count1+1;
ENDWHILE
ENDPROC
PROC routine1()
MoveJoffs(Target_temp,0,0,-30),v500,z1,gripper_dualWObj:=Workobject_2;
MoveLTarget_temp,v500,z1,gripper_dualWObj:=Workobject_2;
WaitTime 1;
MoveLoffs(Target_temp,0,0,-30),v500,z1,gripper_dualWObj:=Workobject_2;
ENDPROC
PROC cal()
Target_temp:=Target_center;
TEST count1
CASE 1:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=(count1-1)*60);
CASE 2:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=60);
CASE 3:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=120);
CASE 4:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=180);
CASE 5:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=-120);
CASE 6:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=-60);
ENDTEST
ENDPROC
PROC rHome()
MoveJpHome,v500,z1,gripper_dualWObj:=wobj0;
ENDPROC
文章來源,
工業(yè)機器人維修官網(wǎng):etongyue.com