國家標准 對AGV 的定義是:
AGV(Automated Guided Vehicle 自動導引車):裝備有電磁或光學等自動導引裝置,由計算機控制,以輪式移動為特征,自帶動力或動力轉換裝置,並且能夠沿規定的導引路徑自動行駛的運輸工具,一般具有安全防護、移載等多種功能。
通俗的講,AGV 就是一個用來運輸的移動機器人,它是一個搬運工,把貨物從A處運到B處,因此AGV的大部分研究也是包含在移動機器人領域內的。
AGV調度系統是什么?
國家標准 對AGV調度系統的定義是:
調度系統(Dispatching system):上位控制系統中用於任務調度、車輛管理及交通管理的控制軟件。
在深入之前,為了便於理解,先闡明基本概念的含義。 ● Dispatch(派遣):指派一個AGV去執行一個運輸任務。 Dispatching is the process of assigning a transportation job to an AGV . ● Schedule(狹義上的“調度”):分配一批運輸任務給一組AGV去執行。 Scheduling is the process of dispatching a set of AGVs to a batch of transportation jobs . The aim of AGV scheduling is to dispatch a set of AGVs to achieve the goals for a batch of pickup/ drop-off (or P/D for short) jobs . ● Route(路徑規划):生成所有被指定 AGV 的路徑使其能完成各自被指派的任務。在機器人領域,路徑翻譯為 path ;而在 AGV 領域通常使用 route 表示相似的概念,翻譯為“路線、軌道”,它一般表示固定的不經常變動的路徑。path 只能用作名詞,route 還可以作為動詞,表示“為…指派路徑”。本文我們不糾結這些微妙的細節,統一稱其為路徑。 Routing is the process of determining routes for a set of AGVs to fulfill their respective transportation jobs . Once the scheduling decision is made, the mission of routing is to find a suitable route for every AGV from its origin to destination based on the current traffic situation . 單獨看一個AGV的工作並不復雜。例如機床要加工零件時通過更上層的MES控制系統給AGV的調度系統發出請求命令,后者派遣(dispatch)一台 AGV 負責把原料從倉庫運送到機床。這個過程可以被稱為一個任務(job),一個任務就是在一對工作地點之間移動。在這個例子中,機床只提出需求(我要在什么時間加工什么零件),至於選擇哪個 AGV 運送零件原料,AGV 該沿哪條路線運動,這些都是調度系統的工作。調度系統一旦為AGV指定好路徑后,AGV上的車載控制器會根據指令完成具體的運動控制任務,例如速度保持在多少,遇到路口轉向時輪子怎么轉動等等。所以在一個完整的大系統中,AGV調度系統位於上層控制系統和底層控制系統的中間,其到管家的作用。 但是對於多個AGV,調度問題就會變得非常困難,而且AGV數量越多,難度越大。因此,調度系統成為AGV行業的一個關鍵技術 。而能夠調度的AGV數量也成為評判一個調度系統強大與否的重要指標。根據筆者的判斷,雖然目前從事AGV行業的企業很多,但是具有自主調度系統的企業並不多,而能夠真正把調度系統優化的很好、能夠最高效率地利用AGV系統的企業更是屈指可數。當然,如果站在AGV廠家的立場,他們並沒有太大的動力把調度系統做的很高效。因為提高調度效率會減少AGV的投入量,這意味着賣出的AGV就少了。 對實際應用的AGV調度系統軟件,它的功能通常是非常豐富的,一般包括:任務管理、車輛狀態監控、路徑規划、地圖編輯、數據庫查詢等。
AGV調度問題
大多數人雖然未必了解調度的方法和細節,但對它或多或少都有一些直覺上的感性認識。如果你在火車站或者飛機場用電腦看本文,那么你同時正在經歷兩種調度過程:大量的火車和飛機需要調度,與此同時你電腦里的操作系統也在對大量的任務進行調度。當很多事件同時發生,而且存在競爭時就需要調度了。如果只有一個事件發生,那么所有資源都由這個事件支配(火車可以在任何一條鐵軌上跑),我們不需要調度;如果多個事件同時發生,但是沒有競爭關系(美國的一列火車和中國的一列火車),我們也不需要調度,因為它們不會發生沖突。 首先,我們應該能分辨一個問題是不是調度問題。假設工廠中只有一台AGV在工作,此時調度問題就退化成簡單的路徑規划問題了。因為不需要考慮該將任務分配給哪台AGV的問題,也不需要考慮在一個路口誰先走誰后走的問題。所以調度問題的前提是多個AGV共享路徑網絡,換句話說AGV之間存在資源爭奪。就像馬路上的車輛一樣,誰都想怎么快怎么開車,如果每個司機都只考慮自己而不考慮對方,那么后果很可能是誰都別想走(擁堵在一起)。於是,個人追求自己局部的最優解卻變成了全局的最差解,所以調度是有存在的必要的,而且有時很重要(紅綠燈、交警都起到某種“調度”的作用)。 多數情況下,調度系統需要統籌所有AGV的行為(上帝視角),它追求的不是某幾個AGV的最優解(當然它有能力這么做),而是整體的最優。我們可以設想一下,能不能做一款調度軟件來調度一個城市里所有的車輛,讓整體解是最優的(例如所有人耗費的汽油加起來最少)。這個最優解一定存在,但是實際上卻幾乎不可能解出來,因為有兩個難點。首先,調度系統要掌握海量的信息,比如張三八點從家里開車到單位,趙四九點開車送孩子,王五的車油量不夠,需要中途加油等等。更困難的是這些信息是變動的,例如張三的車開着開着拋錨了把路堵死了。第二個問題是,調度問題的復雜度隨着參與者的數量呈指數增加。如果只有幾十輛車,現在的算法和計算機硬件還能勉強解決,如果要處理成千上萬輛車,那恐怕只有上帝才能做到了。信息缺乏和維度詛咒是調度問題面臨的主要困難。扯遠一點,其實計划經濟也面臨同樣的問題,要對經濟進行計划需要決策者掌握海量的信息,並擁有超級大腦,在那個多數人連電腦是什么都不知道的落后年代搞計划經濟必然不會太好。 正因為調度問題是極其復雜的,所以大多數時候我們只能退而求其次找一個說的過去的近似最優解,這也是實際生活中每個路口的交通信號燈閃爍背后的邏輯。
路徑規划問題
多個AGV的調度需要規划不同AGV的路徑,所以我們先了解下現有的路徑規划方法。AGV是個聽話的笨蛋,如果調度系統想讓一個AGV從A走到B,它不能簡單地將A和B站點的信息給AGV,而是要將A到B之間的完整路徑告訴AGV 。目前普遍用“圖”(graph 數學概念)對AGV的行駛空間進行建模,“圖”由節點和邊組成。所以AGV的行駛路徑可以表示為一系列相鄰的節點。
AGV調度方法
因為AGV調度問題很有理論深度,所以吸引了大批的學者,他們不同的角度討論這個問題,提出了各種花哨的方法。不過很多理論難以轉化成實際可行的方法,所以實際和理論有很大的差異。
多機器人協調問題
AGV調度問題可以看成多機器人協調問題(Multi-Robot Coordination)的特例。多機器人共享一個環境,如何協調它們的運動使所有機器人都能能達到目標。討論多機器人協調問題是為了對調度問題有更好的理解。最早的方法也是最簡單的方法之一,就是為不同的機器人設置不同的優先級(Priority)。優先級高的機器人先規划自己的路徑,優先級低的機器人將比它高的機器人的路徑視為障礙物,進而再進行規划。當然這種方法有個明顯的缺點:優先級高的機器人過於霸道,它把所有的路都堵死了,以至於優先級低的機器人怎么也找不到路。這時我們就要調整優先級了。
基於時間窗的AGV調度算法優化
目前已實現了一種創新優化的時間窗調度方法,創新表現如下:
①不需要鋪設二維碼、磁釘、磁帶等固定導軌,屬於無軌調度。
②不需要提前指定路網,路網不固定,路網隨作業環境以及任務數量靈活變動,路網保證整個調度系統效率最優。
下面是傳統的基於時間窗的調度算法:
靜態調度算法和動態調度算法的區別:
靜態調度算法:
靜態調度算法是一種離線算法,是AGV執行任務前的路徑規划算法。“靜態”體現在忽略外界干擾以及AGV性能波動等不可預測的因素對整個系統的不良影響。
動態調度算法:
動態調度算法建立在靜態調度算法之上,是一種在線算法,會對系統時間窗按一定的時間間隔進行更新和檢測。由於外界干擾以及AGV性能波動等不可預測的因素會產生沖突,動態調度算法主要解決路口沖突和相向沖突。由於假定AGV速度相同,所以趕超沖突幾乎不存在。
基於以上理解,可設定基於時間窗的靜態調度算法和基於時間窗的動態調度算法的實現目標:
基於時間窗的靜態調度算法實現目標:
②同一路段可同時通過多輛同向AGV,多輛AGV之間保持車距。
基於時間窗的動態調度算法實現目標:
①解決由於不確定因素導致的相向沖突