在現(xiàn)代工業(yè)物流自動(dòng)化領(lǐng)域中, 使用機(jī)器人來進(jìn)行碼垛裝箱、拆垛搬運(yùn)已經(jīng)成為一種高效、快捷的方式[1,2,3,4]。機(jī)器人技術(shù)的應(yīng)用[5,6]是企業(yè)間相互競爭和未來發(fā)展的重要因素, 托盤碼垛技術(shù)已成為高效物流的關(guān)鍵技術(shù)之一。
對于托盤碼垛技術(shù), 國內(nèi)外學(xué)者進(jìn)行了大量研究[7,8,9], 但大多集中在單一尺寸物料方面, 而對于多尺寸物料的場景, 雖也有少部分研究[10,11,12], 但模型卻較為簡單, 使用條件有限。筆者結(jié)合實(shí)際物流自動(dòng)化領(lǐng)域碼垛應(yīng)用的需要, 從新的角度對機(jī)器人混箱碼垛問題展開探討。針對多貨品不同尺寸的混箱碼垛場景, 基于各種箱子和托盤的尺寸, 設(shè)計(jì)了一種工業(yè)機(jī)器人碼垛算法, 能分析出最佳的碼垛序列。
混箱碼垛指面對多個(gè)尺寸不同的箱子, 需要計(jì)算出如何選擇最多的箱子碼放在固定的托盤上, 并保證碼垛整齊。碼垛工作將由工業(yè)機(jī)器人來完成。
定義一個(gè)托盤, 其長度為L, 寬度為W, 需要在托盤上盡可能多地?cái)[放各種不同尺寸的箱子。以某電商的托盤為例, 其長度固定為1 200 mm, 寬度為1 000mm, 托盤自身高150mm, 可擺放的最大高度為1 350mm。所有箱子的長寬尺寸在200mm×200mm至600mm×600mm的范圍內(nèi), 高度不確定。
所有可抓取箱子的尺寸通過上位機(jī)傳給機(jī)器人, 機(jī)器人根據(jù)所有箱子的尺寸, 完成垛型的規(guī)劃, 并進(jìn)行碼垛。
為了實(shí)現(xiàn)將盡可能多的箱子搬運(yùn)至托盤內(nèi), 在算法設(shè)計(jì)時(shí), 需滿足以下約束條件:
(1) 擺放至托盤上的箱子不得超出托盤的邊界;
(2) 擺放至托盤上的箱子不得發(fā)生重疊;
(3) 擺放至托盤上的箱子應(yīng)盡可能貼著托盤邊存放;
(4) 擺放至托盤上的箱子, 其長邊與短邊應(yīng)與托盤邊界平行;
(5) 擺放至托盤上的箱子只有兩種姿態(tài), 箱子的長邊與托盤的長邊平行, 或箱子的長邊與托盤的短邊平行, 不得出現(xiàn)傾倒或傾斜擺放的現(xiàn)象;
(6) 底層箱子放滿后, 上層箱子落位在底層箱子上, 依次類推, 最大高度不得超出限制。
定義所有可抓取的n個(gè)箱子的集合S={S1, S2, S3, …, Sn}, 對應(yīng)編號(hào)集合I={1, 2, 3, …, n}。每個(gè)Si (i∈I, Si表示第i個(gè)箱子) 都具備自己的屬性, 如長度Li、寬度Wi、高度Hi及原始位置的旋轉(zhuǎn)角Ri, Ri=0或90°。為方便計(jì)算, 定義所有箱子的長度不小于寬度。計(jì)算完成之后, 每個(gè)Si又會(huì)產(chǎn)生新的屬性, 如順序Oi、坐標(biāo)Pi、層級Qi等。
要建立針對混箱碼垛的工業(yè)機(jī)器人碼垛算法模型, 并尋求最優(yōu)的垛型, 對底層碼垛規(guī)則的定義尤為重要。現(xiàn)對托盤進(jìn)行區(qū)域劃分, 如圖1所示, 劃成若干個(gè)區(qū)域, 并建立坐標(biāo)系。
定義托盤長邊方向?yàn)閄軸, 短邊方向?yàn)閅軸。對于區(qū)域1, 選擇集合{Si}中箱子占地面積最大的那一個(gè), 如Sa (1≤a≤n, 且a∈Z) , 占用整塊區(qū)域1, 且Sa長邊放在X軸方向, 短邊放在Y軸方向。
對于其它區(qū)域, 分別建立最優(yōu)化模型, 并加上約束條件, 來求取最優(yōu)解。例如, 對于區(qū)域2, 其長度為L-La, 其中L為托盤長度, La為落位在區(qū)域1中箱子Sa的長度。為使區(qū)域2的長邊能擺放更多的箱子, 且保證區(qū)域2內(nèi)的箱子盡可能整齊, 將所有箱子{Si}的長和寬合并成一個(gè)集合C={Ci, j}, 其中j=1或2, 且Ci, 1=Li, Ci, 2=Wi。此外, 定義已經(jīng)完成落位的箱子的編號(hào)集合為D, 并定義尚未落位的箱子的編號(hào)集合為E, 且E=I-D。例如, 當(dāng)5號(hào)箱子落位在區(qū)域1之后, D={5}, E={1, 2, 3, 4, 6, 7, …, n};再當(dāng)3、7、10號(hào)箱子落位在區(qū)域2之后, D={3, 5, 7, 10}, E={1, 2, 4, 6, 8, 9, 11, 12, …, n};依次類推。隨著箱子在各區(qū)域上的落位, 集合D會(huì)發(fā)生變化, 同時(shí)E也會(huì)發(fā)生變化, 因此集合D和集合E不是固定元素的集合。
根據(jù)托盤和所有箱子的尺寸, 可以判斷沿區(qū)域2的X方向擺放的箱子數(shù)量范圍為1~4個(gè)。區(qū)域2箱子的擺放可橫放, 旋轉(zhuǎn)角為0°, 也可豎放, 旋轉(zhuǎn)角為90°, 所以計(jì)算能擺放在區(qū)域2內(nèi)的箱子的總長時(shí), 需同時(shí)考慮使用每個(gè)箱子的Li或Wi來計(jì)算, 并記錄旋轉(zhuǎn)角。
建立區(qū)域2最優(yōu)化模型如下為:
式中:p=1, 2, 3, 4;j=1, 2;ik∈E;Ap為區(qū)域2的X方向擺放了p個(gè)箱子以后剩余的長度;Bp為區(qū)域2擺放了p個(gè)箱子之后, Y方向各箱子的最大尺寸差, 其值越小, 說明箱子擺放得越整齊;g為各箱子之間需要留出的間隙;Cik, j為從尚未落位的箱子集合E中取出一個(gè)箱子, 編號(hào)為ik, 且1≤k≤p, 當(dāng)j=1時(shí), Cik, j=Lik, Cik, 3-j=Wik, 當(dāng)j=2時(shí), Cik, j=Wik, Cik, 3-j=Lik。
按照如圖2所示計(jì)算流程, 最終可輸出一組最優(yōu)化結(jié)果。值得注意的是, 每個(gè)箱子間需留有一定的間隙, 即參數(shù)g, g需要提前設(shè)定, 作為已知的參數(shù)。即使g發(fā)生1mm的變化, 計(jì)算出來的最優(yōu)化結(jié)果也會(huì)發(fā)生改變。
當(dāng)區(qū)域2內(nèi)的箱子落位之后, 其區(qū)域尺寸就確定了, 記錄各ik和j的值, 并更新集合D和E。下面進(jìn)行區(qū)域3的規(guī)劃, 在進(jìn)行區(qū)域3規(guī)劃之前, 需要先考慮區(qū)域6的情況。由于區(qū)域1~區(qū)域5內(nèi)箱子擺放的不確定性, 在進(jìn)行區(qū)域6規(guī)劃的時(shí)候需考慮如圖3所示的幾種情形。
為避免箱子之間可能存在的干涉, 在進(jìn)行區(qū)域3計(jì)算時(shí)需加上一個(gè)額外的限制條件, 即max{Cik, 3-j}≤La。如此, 可避免情形B和情形D的出現(xiàn), 進(jìn)行區(qū)域6規(guī)劃的時(shí)候只需考慮情形A和情形C。
考慮邊界條件, 區(qū)域3在Y方向的尺寸應(yīng)小于W-Wa, 且根據(jù)箱子及托盤的尺寸, 可以判斷區(qū)域3 Y方向擺放的箱子數(shù)量范圍為1~3個(gè)。
建立區(qū)域3最優(yōu)化模型為:
式中:p=1, 2, 3;j=1, 2;ik∈E。
計(jì)算出最優(yōu)的ik和j之后, 區(qū)域3的箱子就可以落位了, 同時(shí)記錄j的值以判斷落位時(shí)是否需要旋轉(zhuǎn)90°, 并更新集合D和E。
區(qū)域4、區(qū)域5的箱子也可采用相同的方法, 最后剩下托盤中心的區(qū)域6。
對于區(qū)域6, 首先計(jì)算其X方向和Y方向的尺寸, 然后選擇兩者中較大的那一個(gè)作為長邊, 采用類似區(qū)域2的最優(yōu)化算法, 最后針對剩下的空間, 如仍有大于150mm×150mm的空間, 則可以再次在沒有落位的箱子中選取合適的箱子。
整個(gè)過程需要五六次最優(yōu)化建模及求解。為縮短求解時(shí)間, 如有m個(gè)尺寸相同的箱子, 則在計(jì)算時(shí)只有4個(gè)箱子參與, 其它箱子不進(jìn)入計(jì)算搜索范圍。
通過求解, 將會(huì)使托盤區(qū)域內(nèi)存放的箱子數(shù)量最多, 從而使托盤平面上箱子的占有率最大。在求解結(jié)果時(shí), 當(dāng)一個(gè)箱子落位后, 應(yīng)在集合Si中刪除。所得最優(yōu)解不僅確定了托盤上箱子的數(shù)量, 而且確定了每個(gè)箱子在托盤上的存放位置。
以上是底層碼垛的方法, 對于高層碼垛, 由于底層箱子高度可能參差不齊, 因此無法將高層的箱子同時(shí)落位在底層多于1個(gè)箱子之上。對于高層碼垛, 將底層箱子的上表面作為一個(gè)區(qū)域, 再使用最優(yōu)化算法對高層箱子進(jìn)行落位, 例如, 將區(qū)域1的箱子Sa作為底層箱子, 其上表面的尺寸將作為高層碼垛優(yōu)化算法的邊界條件。
建立高層最優(yōu)化模型為:
式中:p=1, 2;j=1, 2;ik∈E。
上述設(shè)計(jì)的算法, 不僅適用于混裝的不同尺寸箱子, 而且適用于同尺寸箱子。對于全都是400mm×300mm×350 mm的箱子, 設(shè)置間隙為3 mm。使用所設(shè)計(jì)的算法, 可得到最優(yōu)化結(jié)果如圖4~圖7所示。
按照區(qū)域1~區(qū)域6的算法, 數(shù)字1~8為箱子的落位順序。三層箱子高度為1 050mm, 未超過總高1 200mm的限制條件。
在混箱碼垛例子中, 共有50種可被碼垛的不同尺寸的箱子, 見表1。
按照所述算法, 表1中碼垛了27個(gè)箱子, 沒有落位順序的另外23個(gè)箱子沒有辦法存放在同一個(gè)托盤上。計(jì)算結(jié)果如圖8~圖11所示。所生成的混箱碼垛序列和每個(gè)箱子的位置可以發(fā)送給機(jī)器人, 由機(jī)器人來完成碼垛作業(yè)。
由于間隙的不同, 所產(chǎn)生的的結(jié)果也會(huì)不同, 間隙分別設(shè)置為2mm、3mm、4mm時(shí)所產(chǎn)生的計(jì)算結(jié)果依次如圖12、圖13、圖14所示。
表1 混箱尺寸 下載原表
比較間隙為2mm、3mm、4mm時(shí)的優(yōu)化計(jì)算結(jié)果, 可以發(fā)現(xiàn)雖然順序的前幾個(gè)箱子編號(hào)相同, 但放第六個(gè)箱子時(shí), 編號(hào)已經(jīng)不同了, 這說明間隙對優(yōu)化的順序影響是很大的。另外, 間隙2 mm的條件下, 只能放25個(gè)箱子, 但這并不能說明2mm間隙時(shí)箱子放得少這種結(jié)果不是最佳的。這是因?yàn)殚g隙小時(shí), 需填充的各區(qū)域面積會(huì)變大, 所選擇的箱子尺寸也就會(huì)大, 這樣可能會(huì)減少能夠選擇的箱子數(shù)量。因此, 需要根據(jù)實(shí)際情況來決定間隙值, 而不是根據(jù)能擺放的總數(shù)來決定。
針對在倉儲(chǔ)物流行業(yè)中出現(xiàn)的混箱碼垛問題, 設(shè)計(jì)了一種工業(yè)機(jī)器人碼垛算法。通過算法, 對托盤進(jìn)行區(qū)域劃分, 在每個(gè)區(qū)域中分別建立最優(yōu)化模型, 計(jì)算出最優(yōu)解, 最終生成整個(gè)托盤的碼垛序列及碼垛位置, 為工業(yè)機(jī)器人的實(shí)際碼垛提供了指令, 實(shí)現(xiàn)了工業(yè)機(jī)器人碼垛的智能化。
權(quán)所有©:上海陽合儲(chǔ)運(yùn)
專業(yè)承接上海倉庫租賃、上海倉儲(chǔ)配送物流、上海電商倉儲(chǔ)企業(yè)服務(wù)與微笑同在"的先進(jìn)理念不斷發(fā)展壯大。