本人2年發(fā)那科機(jī)器人搬送應(yīng)用經(jīng)驗(yàn),+安川motoman+espon+配天機(jī)器人+雜七雜八的國產(chǎn)機(jī)器人應(yīng)用經(jīng)驗(yàn)。
總的來說機(jī)器人應(yīng)用方面用的最多應(yīng)該還是搬運(yùn),像其他細(xì)分領(lǐng)域里,焊接,噴涂還有視覺應(yīng)用,接觸比較少,所以可能給不了大家太多的分享。
首先,機(jī)器人應(yīng)用里面就躲不過一個東西,叫坐標(biāo)系。
何為坐標(biāo)系,讀過書都應(yīng)該知道,平面里建立一個x方向與y方向垂直,便能形成一個二維的直角坐標(biāo)系。在二維平面的坐標(biāo)系上面垂直一個Z方向就得到了一個三維的坐標(biāo)系。
之前在常州機(jī)電做培訓(xùn)的時候,老師們都問過一個問題就是,機(jī)器人是靠什么去準(zhǔn)確再現(xiàn)位置的。我簡單解釋說就是靠電機(jī)編碼器的數(shù)值去記錄,然后就得到一個新的問題,就是怎么知道它的位置就是原點(diǎn)。機(jī)器人本體下面有一個電池盒,電池是可以保存編碼器信息的,編碼器是絕對式,當(dāng)電池快沒電到時候,需要帶電更換電池,以防止掉電失掉數(shù)據(jù)。編碼器數(shù)據(jù)相當(dāng)于機(jī)器人再現(xiàn)動作的基礎(chǔ)。然后就是煩人的坐標(biāo)系。
回到我們的坐標(biāo)系,基本有以下幾種坐標(biāo)系:
1.世界坐標(biāo)/基坐標(biāo)/底坐標(biāo)/全局坐標(biāo)(反正就一個,以第一軸基座中心為原點(diǎn)就是了,有些把世界坐標(biāo)系分開說是世界坐標(biāo)規(guī)定用戶坐標(biāo)的初始方向,倆坐標(biāo)是同一個點(diǎn)同一個方向,但有些廠家出廠標(biāo)定不一樣,沒辦法總有人要特立獨(dú)行)
2.法蘭坐標(biāo)系(以第六軸法蘭中心為原點(diǎn))
3.工具坐標(biāo)系/尖端坐標(biāo)系(以工具/夾持器/焊槍/噴槍/打磨頭等最終的中心位置為原點(diǎn))
4.用戶坐標(biāo)系/方向坐標(biāo)系/工件坐標(biāo)系(定義運(yùn)動方向,有一些把用戶跟工件坐標(biāo)系分開,因?yàn)楣ぜ鴺?biāo)系Z軸方向以右手定則確定,用戶坐標(biāo)系可自定義)
然后我們需要知道:
1.世界/基座標(biāo)一般不需要我們自己標(biāo)定,因?yàn)槭窍到y(tǒng)內(nèi)設(shè)置好的
2.法蘭坐標(biāo)系一般只有一個(雙臂的就不知道了,沒用過),也不用我們操心
3.工具坐標(biāo)系(tool)一般需要進(jìn)行尖端TCP標(biāo)定也就是需要至少三個不同面的姿態(tài)去確定工具中心,通常采用三點(diǎn)/六點(diǎn)/九點(diǎn)法進(jìn)行。而我比較喜歡在規(guī)矩的夾具上面直接通過設(shè)計(jì)參數(shù)去設(shè)定tcp(遇到60°安裝的或者是特殊角度的工具就老老實(shí)實(shí)還是三點(diǎn)法吧)
4.用戶/工件坐標(biāo)系,一般也是比較簡單的三點(diǎn)法即是原點(diǎn),X方向點(diǎn)Y方向點(diǎn),(方向距離越大,XY夾角越接近90度,坐標(biāo)系越準(zhǔn))
坐標(biāo)系是機(jī)器人應(yīng)用的基礎(chǔ),接觸過這么多的設(shè)備,有簡單也有復(fù)雜的,最開始不會的時候基本都是使用初始化狀態(tài)的坐標(biāo)系,即是法蘭坐標(biāo)+世界坐標(biāo)去做,因?yàn)榛径际谴怪辈季郑?dāng)你遇到45度布局的設(shè)備的時候就gg了,每次都是X+1Y+1,一點(diǎn)點(diǎn)的加,后面學(xué)會了坐標(biāo)系,上來就是先把坐標(biāo)系設(shè)定好了,對點(diǎn)編程的時候就相對輕松很多。
坐標(biāo)系制定是機(jī)器人應(yīng)用一個基礎(chǔ),也是比較多新手會不太喜歡去使用的一個東西,因?yàn)橛袝r候定好點(diǎn)運(yùn)行的時候發(fā)現(xiàn)坐標(biāo)系調(diào)用錯了,整個程序就得重來或者重新使用那個坐標(biāo)系。一般我發(fā)現(xiàn)坐標(biāo)系錯了我會試一下是不是某個坐標(biāo)系,然后偷懶的把坐標(biāo)系給改成那個坐標(biāo)系,但這個做法日后別人去讀程序的時候就會一臉懵不知道你為什么那樣干。所以該有的規(guī)矩還是得有,編程就是得邏輯清晰然后多做點(diǎn)備注吧。
坐標(biāo)系標(biāo)定好了之后,先別急著去編程,如果說新接觸一家機(jī)器人廠家,最好先把相應(yīng)的動作指令熟悉一下。
初次使用發(fā)那科機(jī)器人的時候我覺得跟三菱的機(jī)器人是差不多的,就是直線跟關(guān)節(jié),然后后帶個速度+截至類型,編程的時候溜得飛起,編完程序你還能一鍵把相應(yīng)點(diǎn)位重新按順序編號,要改哪個點(diǎn)位就點(diǎn)哪里然后選擇修改數(shù)據(jù)就萬事大吉。后來遇到了安川機(jī)器人就懵了,直接來個movj*****或者movl*****,點(diǎn)位呢沒有編號,尷尬的我都不得不吐槽這東西不科學(xué),用久了呢,也就摸出規(guī)律了,大概也就是各家人不一樣的做法而已。
說到底目前的機(jī)器人運(yùn)動指令無非就是:
MOVL直線運(yùn)動+點(diǎn)位標(biāo)簽+運(yùn)動速度+截止類型(+加減速)
MOVJ關(guān)節(jié)運(yùn)動+點(diǎn)位標(biāo)簽+運(yùn)動速度+截止類型(+加減速)
MOVC圓弧運(yùn)動+點(diǎn)位信息+運(yùn)動速度+截止類型(+加減速)
每一家人的指令方式都不一樣,編程之前最好了解一下指令的構(gòu)成是怎樣的。用習(xí)慣了發(fā)那科的fine/cnt100,突然來個F100/C50的截止類型,會有個一臉懵的感覺;蛘呤墙y(tǒng)一速度的speed=80,變成了speedset/vset,這些都得先提前了解。
經(jīng)驗(yàn)告訴我,角度變換選關(guān)節(jié),因?yàn)榭,如你需要本體轉(zhuǎn)移90度或者末端工具轉(zhuǎn)180度的時候,關(guān)節(jié)運(yùn)動是最快最安全的,因?yàn)閯幼骺深A(yù)見。或者運(yùn)行到安全點(diǎn)這類外部安全位置的一般都是走關(guān)節(jié)。迫近與末端執(zhí)行一般就是使用直線,這樣確保準(zhǔn)確程度,且這個時候坐標(biāo)系 的作用就體現(xiàn)出來了,一個合適的坐標(biāo)系能讓你動作調(diào)試過程輕松很多倍。當(dāng)然,焊接工藝比較多還是走復(fù)雜曲線,我接觸的比較少,焊接是個工藝,為了子孫后代,沒想接觸。
然后有些特殊應(yīng)用場景可能會用到碼垛拆垛指令,這些指令需要各自去看指令代碼說明。初學(xué)機(jī)器人可能都會在機(jī)器人怎么保存數(shù)據(jù)跟怎么執(zhí)行動作上面比較難理解,搞兩個就知道了。實(shí)干才能深刻體會。
然后第三步就是機(jī)器人的io操作,首先了解io的手動觸發(fā),手動操作下io是如何觸發(fā)io監(jiān)控io,這是編程之前需要了解的。例如發(fā)那科可以設(shè)置快捷鍵shitf+數(shù)字鍵,安川也可以使用快捷方式觸發(fā),配天可以配置FN鍵,了解之后,對于你的操作會有很多幫助。進(jìn)入編程io觸發(fā),要了解編程指令中io是如何操作的。有些機(jī)器人io指令就是O1=ON/O1 ON/ON O1...復(fù)雜一點(diǎn)的可能就會pluse脈沖輸出或者是在指令后面有其他附加指令。也有些是在機(jī)器人動作后面加上動作結(jié)束后輸出或動作輸出前關(guān)閉。像發(fā)那科是DO1=on,wait DI1=OFF,配天的是SETDO(1,TRUE),WAITUNTIL getdi().IO操作基本會貫徹你應(yīng)用過程。
到這個過程,基本上一個動作就可以走完了。簡單的動作執(zhí)行,然后觸發(fā)IO,等待io到位,繼續(xù)下一步,一個簡單的邏輯就完成了。
主菜上完了,該上小菜了。
進(jìn)入實(shí)際編程,我們來說程序執(zhí)行結(jié)構(gòu)。到上面那一步,我們基本把機(jī)器人動作的基礎(chǔ)講完了,點(diǎn)位運(yùn)動+IO動作,簡單演示一個動作流程是沒問題了。
最近在看python,python把程序結(jié)構(gòu)分為順序結(jié)構(gòu),分支(選擇)結(jié)構(gòu),循環(huán)結(jié)構(gòu),在這里,我覺得可以套用。
順序結(jié)構(gòu)用于執(zhí)行動作,流程,工藝。上面說到的簡單的點(diǎn)位運(yùn)行然后執(zhí)行io操作,可以歸類為順序結(jié)構(gòu)。
分支結(jié)構(gòu)用的比較多還是在工藝選擇,流程選擇,子程序調(diào)用上面,具體體現(xiàn)為,滿足條件即跳轉(zhuǎn)。舉個例子,機(jī)器人一對多設(shè)備,運(yùn)行等待時如果期中一臺設(shè)備發(fā)送了上下料或空閑指令,機(jī)器人收到信息后,需要進(jìn)行設(shè)備選擇以及動作程序,其他設(shè)備后發(fā)送信息就得等相關(guān)流程處理完才會繼續(xù)執(zhí)行該動作。再舉個例子,一個動作里面如果有不同的工藝,工藝完成情況會決定相應(yīng)后續(xù)工藝,分支選擇便是決定工藝執(zhí)行的前提。有些機(jī)器人分支結(jié)構(gòu)命令為if(條件)then(執(zhí)行動作),然后動作內(nèi)部再嵌套一級if判斷,最多一般不超過7級。有些機(jī)器人則是if(條件成立)(執(zhí)行動作)else(執(zhí)行動作)endif,或者是if(條件成立)執(zhí)行動作elseif(條件成立)(執(zhí)行動作)elseif(條件成立)(執(zhí)行動作)endif。有些會直接把elseif簡寫elif或者其他,這時候廠家手冊就很有去看啦。不過我用的比較多還是使用
switch (條件)
case(條件1)執(zhí)行動作
case(條件2)執(zhí)行動作
case(條件3)執(zhí)行動作
def 執(zhí)行動作
每一家的指令都不一樣,但是思想可以歸為一類。條件滿足執(zhí)行相應(yīng)的動作。這就是分支結(jié)構(gòu)的核心。不過使用分支結(jié)構(gòu)的話需要注意一點(diǎn)就是執(zhí)行結(jié)束后需要返回的位置,如果是循序工藝,那可以直接跳轉(zhuǎn)回下一行,如果是動作工藝,那需要返回的有時候會是條件判斷的選擇行,這個地方需要注意。就像上下料,你判斷是上下料了,取完下一步就是上料,如果你跳轉(zhuǎn)回判斷機(jī)臺動作,那鐵定出故障,如果你動作做完了,下一步是去放成品,那跳轉(zhuǎn)回去判斷下一步工藝應(yīng)該是符合邏輯的。
循環(huán)結(jié)構(gòu),循環(huán)結(jié)構(gòu)和選擇結(jié)構(gòu)有些類似,不同點(diǎn)在于循環(huán)結(jié)構(gòu)的條件判斷和循環(huán)體之間形成了一條回路,當(dāng)進(jìn)入循環(huán)體的條件成立時,程序會一直在這個回路中循環(huán),直到進(jìn)入循環(huán)體的條件不成立為止。
最近在搞PLC,F(xiàn)OR...NEXT..指令。剛開始我覺得獨(dú)立的程序也可以達(dá)到我想要的效果。寫了一個累加的程序,從1-50,普通程序花了5秒完成,24行程序,后來用FOR k50然后程序也是差不多的程序邏輯,100ms就出結(jié)果,1-1000累加也是100ms,普通程序花了要30秒。后面查查資料,意思就是在一個周期里面它這個程序會根據(jù)設(shè)定的次數(shù)運(yùn)行相應(yīng)的次數(shù),所以會快一點(diǎn)。
不過這里用在機(jī)器人上面,較多應(yīng)該還是用在對工藝內(nèi)動作的選擇上面。可能需要多次執(zhí)行一個動作的時候,或者是判斷料號,料量的選擇。
循環(huán)結(jié)構(gòu)用得最多應(yīng)該還是在主程序進(jìn)入后的while(1)以及最后的endwhile結(jié)束。
循環(huán)結(jié)構(gòu)我用得比較少,因?yàn)槲乙话阒鞒绦蜓h(huán)我是使用條件分支進(jìn)行跳轉(zhuǎn),終止條件不達(dá)到就能一直按照我們設(shè)定的流程走下去。
=======================
基礎(chǔ)應(yīng)用到上面這里就差不多完結(jié)了。畢竟機(jī)器人入門是比較簡單的,坐標(biāo),動作,邏輯,三劍客熟悉之后,新手跟老鳥的差別就要開始慢慢拉開距離了。
前菜:
之前在做機(jī)床上下料的時候,最開始只有幾十個料位,對點(diǎn)位還是比較簡單,到了后來512個料位,加上64個刀位,一個料位有取料動作跟放料動作,對應(yīng)取料治具跟放料治具,也就是總的要1024+128個位置要對,然后加上每個位置需要有迫近位,取料位,離開位,也就是(1024+128)*3,這工作量就嘿嘿嘿了,單純基礎(chǔ)的1024個點(diǎn)位就要對兩天,對完手都是抖動的,更別說還不知這個數(shù)量。所以后來上來先搞坐標(biāo)系,然后對點(diǎn)的時候使用同一的坐標(biāo)方向,上下左右前后都統(tǒng)一規(guī)定,使用統(tǒng)一的方向進(jìn)行,后面對點(diǎn)就方便一點(diǎn)。此外摸索規(guī)律也很重要,基本動作可以分迫近位,取料位,離開位,那便是取放都可以通用同一種距離,只不過動作反過來進(jìn)行而已。后面其實(shí)就都是只對一個取料點(diǎn)跟放料點(diǎn),其他都是使用偏移指令進(jìn)行點(diǎn)位數(shù)據(jù)的偏移,這樣又簡單又快捷,只不過前期的坐標(biāo)系一定要對好還有就是方向要規(guī)定好,精度必須保證好。做好這個其實(shí)后面工作就解決了大概1/2.調(diào)試時間也能減少很多。
偏移指令在大量點(diǎn)位重復(fù)動作 的情況下是非常節(jié)省人工效率的一個操作方法,但是前提的條件是你對坐標(biāo)系需要做到比較靈活的應(yīng)用。不會因?yàn)檎{(diào)用出錯導(dǎo)致撞機(jī)。
小菜:
說到大規(guī)模重復(fù)動作就不得不說碼垛這個指令了,偏移指令還需要進(jìn)行基礎(chǔ)點(diǎn)位的示教。但是機(jī)器人就是為了節(jié)約時間降低調(diào)試難度而升的。所以,當(dāng)你的動作基本都是重復(fù)且距離都是一致的情況,碼垛作為一個解決方法,不得不說它真的很省事。僅需要示教三到四個位置,輸入碼垛行數(shù)與列數(shù),運(yùn)行時候?qū)懭爰拇嫫鲾?shù)值,機(jī)器人會自動運(yùn)算進(jìn)行位置尋找。一個料架128個位置,你只需要進(jìn)行三到四個位置的對點(diǎn)工作。原先一天的工作量,半小時不到你就做完并驗(yàn)證好了。剩下時間就是放松身心了。不過碼垛要求精度的話你就祈禱加工商把精度做到位了,不然可能某個時候你撞機(jī)都不知道怎么撞得。
[ 此帖被陳惠鑫在2021-09-25 09:01重新編輯 ]