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