葉增健,李 玲,鄭敬發(fā)(中國外運華南有限公司,廣東 廣州 510799)
相比于全自動化集裝箱碼頭,傳統(tǒng)的集裝箱碼頭受制于堆場面積、投入產(chǎn)出比等問題,無法利用AGV(Automated Guided Vehicle)等自動化技術對堆場內(nèi)的交通流進行科學精準的管控與調(diào)度,集卡的作業(yè)路徑通常由司機決定,具有較強的隨機性,導致交通流偏離設計的理想狀態(tài),難以感知與控制,增加了管理成本,降低了作業(yè)效率。因此,引導集卡司機按照規(guī)劃路徑進行作業(yè),能夠提升交通流的可預測性,根據(jù)道路的最大通行量對集卡推薦作業(yè)路線進行調(diào)整,能夠有效避免碼頭內(nèi)部擁堵情況,縮短集卡等待時間,提升碼頭的作業(yè)效率。
國內(nèi)外相關文獻以自動化碼頭AGV路徑規(guī)劃問題的求解居多,且多聚焦于內(nèi)集卡裝卸船作業(yè),楊靜蕾[1]以集卡運行距離最短為目標,提出了單集卡多箱區(qū)裝卸作業(yè)的路徑最優(yōu)模型;趙金樓等[2]以最小化集卡空載距離和空載率為目標,分兩階段設計模型并利用粒子群算法進行求解;于洋[3]分析了影響集裝箱港口內(nèi)交通流的因素,并提出優(yōu)化意見和建議;湯海亮等[4]引入集卡作業(yè)指令打分模型對集裝箱碼頭裝卸船任務指令進行動態(tài)計算,實現(xiàn)了集卡全場作業(yè)調(diào)度;曹瑩等[5]通過引入碰撞因子對A*算法進行改進,實現(xiàn)了對AGV運行路徑的規(guī)劃,提升了作業(yè)效率。
目前國內(nèi)外學者對集卡裝卸作業(yè)路徑規(guī)劃研究存在以下幾點不足:一是研究大多聚焦于內(nèi)集卡的裝卸作業(yè),對于外集卡場內(nèi)作業(yè)路徑的研究較少,而外集卡在數(shù)量上比內(nèi)集卡還要多,且多數(shù)司機并非碼頭員工,對堆場作業(yè)狀態(tài)了解不全面,管理難度大,更易造成場內(nèi)車流堵塞;二是多數(shù)研究仍處于理論分析階段,輸出的結果不夠精細化,如輸出的規(guī)劃路徑為A車到B泊位到C箱區(qū),但無法提供具體的作業(yè)路線,對非自動化的傳統(tǒng)碼頭缺乏參考意義;三是多數(shù)研究的路徑規(guī)劃方案都是非動態(tài)的,而碼頭的作業(yè)是非標準節(jié)拍式的作業(yè),尤其是二類港口碼頭,現(xiàn)場作業(yè)隨時可能發(fā)生改變,規(guī)劃路線的有效性有待考證。因此,本文將針對傳統(tǒng)集裝箱碼頭集卡場內(nèi)作業(yè)路徑規(guī)劃問題,提出一套可行的堆位級別路徑導航解決方案。
本文依托廣州市某二類碼頭(下稱H倉碼)對集卡場內(nèi)作業(yè)規(guī)劃方案進行闡述,H倉碼場內(nèi)堆場面積占地共13.92萬平方米,分為主堆場和子堆場兩個場區(qū),共計11個箱區(qū);有5個閘口,其中3個進閘口,2個出閘口。該碼頭具備以下場內(nèi)作業(yè)路線規(guī)劃的基本條件。
堆場具備清晰的場地布局,包括明確劃分的箱區(qū)、道路和堆位,不存在場內(nèi)集裝箱隨意堆放的情況,由堆位編碼可以準確定位目的地;
堆場內(nèi)有明確的交通流規(guī)劃,標識道路是否為雙向道路、是否支持掉頭等,每個箱區(qū)有固定的裝卸車道;
具備場內(nèi)路線規(guī)劃功能的相關操作系統(tǒng)(如TOS)載體,拖車司機可以通過手機實時將定位信息反饋給操作系統(tǒng)。
本文采用有向圖作為抽象工具,對集裝箱堆場的道路信息進行了抽象。首先,從實際堆場中獲取到道路網(wǎng)絡的地理信息和道路連接關系數(shù)據(jù)。然后根據(jù)道路連接關系構建了一個有向圖,圖的節(jié)點表示道路的交叉口或閘口,邊表示道路之間的連接關系。接下來需要對有向圖的節(jié)點進行編號,并確定節(jié)點屬性,例如是否是閘口、是否允許通行等,并根據(jù)實際車流設置邊的單雙向?qū)傩?。通過這樣的抽象,本研究將復雜的道路網(wǎng)絡簡化為圖結構,便于后續(xù)的數(shù)據(jù)處理和分析工作。
這種抽象方法具有顯著優(yōu)勢。首先,有向圖能夠更好地展現(xiàn)道路網(wǎng)絡的拓撲結構,包括交叉口、道路的流向和連接關系等信息,有助于深入理解道路網(wǎng)絡的結構和性能。其次,有向圖能夠方便地應用圖論和網(wǎng)絡分析的方法,例如最短路徑算法、網(wǎng)絡中心性度量等,為后續(xù)的道路導航算法和性能評估奠定了基礎。最后,抽象后的圖結構還能夠減少數(shù)據(jù)的復雜性和冗余性,簡化了計算和存儲需求。
因此,將集裝箱堆場的道路信息進行有向圖抽象是關鍵步驟,為后續(xù)的研究設計和實驗分析提供了重要基礎。我們將H倉碼的場內(nèi)道路抽象為有向圖(如圖1所示),并對節(jié)點進行編碼,確定一個節(jié)點集合P∈(01,02,03,...,32),其中09、10、11、12、33等為閘口節(jié)點,其他節(jié)點為道路連接節(jié)點;與此同時,確定一個道路集合,如05-01,01-02,02-03等,如果有雙向?qū)傩缘牡缆?,?3-07、07-03段道路,需一起納入集合。
圖1 H 倉碼堆場有向圖
確定有向圖之后,需要獲取集合P和集合R中元素的經(jīng)緯度信息,對于節(jié)點,只需要獲取單個節(jié)點的經(jīng)緯度即可,對于道路,則需要獲取起點-終點中間道路的軌跡序列。此處可借助高德地圖提供給開發(fā)者的API實現(xiàn)。
2.2.1 節(jié)點經(jīng)緯度獲取
調(diào)用高德地圖提供的API,可以獲取選定節(jié)點的經(jīng)緯度,通過遍歷集合P記錄下每個節(jié)點的經(jīng)緯度及其特殊屬性,如節(jié)點32是進閘口,經(jīng)緯度坐標是(113.464 68,23.089 366);獲取節(jié)點經(jīng)緯度后,可將節(jié)點添加至高德地圖,以便更加直觀地查看節(jié)點和道路的分布情況。
2.2.2 道路經(jīng)緯度及距離長度獲取
調(diào)用高德地圖獲取行車路徑規(guī)劃的API,可以獲取兩個節(jié)點中間道路軌跡的經(jīng)緯度集合及距離長度等基本信息。通過遍歷集合R中的所有道路,獲取所有道路的經(jīng)緯度及其實際距離長度。需要注意的是,高德地圖對堆場場內(nèi)道路屬性的定位可能與實際情況不一致,可能會導致行車路徑規(guī)劃不準確,如道路方向不一致,需要人工對道路軌跡的經(jīng)緯度進行校準;又如對于高德地圖中不存在的道路,可以由人工進行點位經(jīng)緯度采集,自定義場內(nèi)道路。
由于集裝箱堆場的面積太大,如果采用現(xiàn)場測量每個集裝箱堆放位置的方式,會耗費大量的人力資源和時間成本,同時測量設備本身也存在誤差,無法得到一個較為準確的堆位經(jīng)緯度信息。因此,本文結合集裝箱堆放特性及地理衛(wèi)星圖(如圖2所示),通過三維映射的方式推導出每個集裝箱堆位的理論經(jīng)緯度數(shù)值。
圖2 集裝箱建模渲染圖
首先,我們要根據(jù)碼頭操作系統(tǒng)中的堆場圖設置數(shù)據(jù),利用三維技術在高德地圖上將其呈現(xiàn)出來,對于單裝卸車道的箱區(qū),同個貝內(nèi)集裝箱的裝卸位置都是相同的,因此在建模時僅需渲染第一層的集裝箱數(shù)據(jù),同時,我們可以開啟高德地圖的衛(wèi)星圖圖層進行堆位校準。
完成上述建模步驟后,就得到了一個集裝箱堆位的三維圖層,并且可以結合three.js的方法獲取每一個集裝箱三維對象的坐標,然后結合高德地圖的方法進行轉(zhuǎn)換,獲取集裝箱堆位經(jīng)緯度信息。
上述操作只能獲取堆位在堆場內(nèi)的具體經(jīng)緯度,而不是集卡實際裝卸目標位置的經(jīng)緯度,因此,還需要以堆位為圓心畫圓與裝卸道路相切,切點即為集卡實際裝卸的目標位置,獲取堆位對應裝卸位置的經(jīng)緯度進行存儲,就可以得到一個堆位與裝卸位置經(jīng)緯度的映射關系。如圖3所示,a點為箱區(qū)裝卸道路,b點為堆位對應的經(jīng)緯度點位,c點為以堆位為中心的圓與道路的切點,實施過程中可以使用高德地圖的工具函數(shù)GeometryUtil.closestOnSegment和GeometryUtil.distance輔助獲取切點(注:若裝卸道路軌跡由多個點構成,可以遍歷線段獲取最短距離)。
圖3 裝卸點位示意圖
上述環(huán)節(jié)處理完成后,已經(jīng)可以得到整個堆場所有道路的經(jīng)緯度信息以及所有集裝箱堆位的經(jīng)緯度信息。之后,我們還需獲取集卡的位置信息,集卡的位置信息由三部分組成,分別是歸屬哪段道路,在道路的哪個位置,車頭朝向哪個方向。
首先,需要確定集卡歸屬哪段道路。雖然可以通過手機收集集卡的位置信息,但由于經(jīng)緯度精確度與地圖展示存在匹配問題,將車輛定位在場地中間時,無法直觀地知道集卡在哪段道路,因此,我們需要重新將集卡的位置定位在道路上??梢酝ㄟ^遍歷車輛獲取當前位置到集合R的距離,哪段道路距離最短,集卡就在該段道路上。
其次,需要確定集卡在道路上的具體位置,參考裝卸點位的確定方式,以集卡當前所在位置為圓心作圓,其與集卡所在道路的切點即為集卡當前所在道路的具體位置。獲取上述數(shù)據(jù)之后,即可確定車輛在道路上的具體位置。
最后,需要確定當前集卡在道路上的行駛方向,由于單個經(jīng)緯度無法確定車輛的行駛方向,因此,我們需要通過判斷兩個連續(xù)的位置變化信息來確定集卡在道路上的行駛方向。例如,當集卡在路段24-19時,設置當前時刻為t,當前時刻集卡距離路段終點(節(jié)點19)的距離為dt,上一時刻為t-1,上一時刻集卡距離路段終點(節(jié)點19)的距離為dt-1,如果dt<dt-1,則證明車輛是沿著道路方向行駛的,否則就是在逆著道路方向行駛。
經(jīng)過上述步驟,我們已經(jīng)得到了集裝箱堆場場內(nèi)道路有向圖,場內(nèi)道路的基礎數(shù)據(jù)以及路徑規(guī)劃的起點(集卡的當前位置)及終點(堆位位置),可以通過求解有向圖來確定集卡作業(yè)的路徑。
首先,我們需要根據(jù)作業(yè)內(nèi)容以及集卡當前位置來修改基礎的有向圖,插入起點、終點,例如,集卡當前在28-27路段,即將在17-20路段卸載一個集裝箱,那么我們可以調(diào)整有向圖,如圖4所示,圖中“車”代表當前集卡位置,“卸”代表要裝卸的作業(yè)點位,那么集卡場內(nèi)作業(yè)路徑規(guī)劃問題就可以簡化抽象為求解圖4所示的有向圖中從“車”到“卸”的所有路徑中的最優(yōu)路徑。
圖4 調(diào)整后的有向圖
在有向圖的求解方面,常見的方法是使用python中的NetworkX,以距離為權重結合A*算法進行求解,調(diào)用NetworkX的astar_path方法使用A*算法求解從集卡當前位置到裝卸點位的最優(yōu)路徑為:集卡—節(jié)點27—節(jié)點26—節(jié)點23—節(jié)點19—節(jié)點17—裝卸點(見圖5)。
圖5 NetworkX 繪制有向圖
此外,針對一些特殊場景,還可以動態(tài)調(diào)整有向圖,例如,根據(jù)現(xiàn)場車流情況,若路段26-23出現(xiàn)擁堵,那么可以過濾掉有向圖中的26-23路段,這樣求解出來的最優(yōu)路徑即:集卡—節(jié)點27—節(jié)點21—節(jié)點20—節(jié)點24—節(jié)點19—節(jié)點17—裝卸點。本文論述中心不在于討論有向圖求解算法,因此該部分不做詳述。
求解得到最優(yōu)路徑后,還需要基于道路的基礎數(shù)據(jù)還原規(guī)劃路徑的經(jīng)緯度數(shù)據(jù)集合,結合高德地圖對規(guī)劃路徑進行展示,為集卡司機提供路徑規(guī)劃的結果,甚至可以結合高德地圖moveAlong的方法實現(xiàn)模擬導航。此外,還可以結合現(xiàn)場集裝箱的堆放,進行3D圖層的堆疊渲染,讓司機對堆場現(xiàn)場有更加直觀的判斷(見圖6)。
圖6 3D 堆場展示
本文基于傳統(tǒng)集裝箱碼頭集卡場內(nèi)作業(yè)路徑規(guī)劃的場景,提出了一種成本較低、可以快速實現(xiàn)堆位級別路徑導航的方案,與高德地圖現(xiàn)有的API和3D建模相結合,對集裝箱碼頭場內(nèi)的道路和堆位經(jīng)緯度進行轉(zhuǎn)換提取,并將路徑導航問題抽象為有向圖求解問題,將復雜問題簡單化,通過常用的路徑規(guī)劃算法(如A*等)即可得到導航路徑,且可以根據(jù)車輛的實時位置進行路徑規(guī)劃,真正做到整個堆場內(nèi)任意位置的路徑規(guī)劃,最大程度地方便了集卡司機查看作業(yè)流程,減少繞路兜路的情況,提升了碼頭作業(yè)效率,緩解了堆場擁堵。在案例中,H倉碼還通過引入路段繁忙情況、遠控龍門吊欄頭控制等方式,動態(tài)更新有向圖以獲取最優(yōu)的路徑規(guī)劃,同時還加入了車輛逆行檢測系統(tǒng),規(guī)范司機安全行駛。未來我們可以通過引入更高精度的電子地圖和無人駕駛技術,進一步優(yōu)化路徑規(guī)劃算法,考慮更多實際因素的影響,并在實際場景中進行更多的驗證與實踐,以期為傳統(tǒng)碼頭的現(xiàn)代化管理和作業(yè)效率提升貢獻更多的智能化解決方案。