往期瀏覽

您的位置:首頁 往期瀏覽 權威論壇內容頁面

P157 自動導引車系統運行路徑規劃軟件的開發

來源:2017年第10期(總第210期) 作者:新松機器人自動化股份有限公司 瀏覽:

摘要:自動導引車系統(AGVS)是現今工業自動化系統內一種比較典型的應用,與其相關的研究與開發方向很多。本文闡述了在Visual C++可視化編程環境下如何規劃AGV運行路徑,并探討了地圖的開發步驟和方法。本文介紹的地圖生成軟件按照AGVS的客觀要求,實現了自動導引車運行環境中路徑、建筑物及地面設備的可視化繪制、編輯、保存,并最終形成特定格式的地圖數據文件用以控制AGV的現場運行。
 
關鍵詞:自動導引車系統、地圖、路徑規劃、軟件開發
 
        自動導引車系統(Automated Guided Vehicle System)通常被稱為AGVS,是廣泛應用于柔性生產線、自動化倉庫、無人車間等領域的一種無人駕駛輸送系統。一個AGVS由多臺AGV及中央監控系統、通信系統、導引系統、充電系統、地面輔助系統等組成。目前的AGV大多是以固定路線運行的。固定路線在AGVS中通常被稱為地圖,其作用是導引AGV小車進行往復循環運行。
 
       本文詳細描述了在Visual C++(微軟公司的C++開發工具,具有集成開發環境,可提供C++等編程語言)可視化編程環境下如何規劃AGV運行路徑,研究地圖的開發步驟和方法。本文介紹的地圖生成軟件按照AGVS的客觀要求,實現了自動導引車運行環境中路徑、建筑物及地面設備的可視化繪制、編輯、保存,并最終形成特定格式的地圖數據文件用以控制AGV的現場運行;軟件實現了各種路徑連接點的相關特性,實現了路徑自動編號、查找,可以隨時更改地圖坐標原點,進行無極縮放和滾動,能根據實際需要對地圖進行編輯修改。能進行地圖有效性驗證,保證AGV運行的安全可靠;在地圖繪制過程中,軟件還具有自動跟蹤、智能判斷以及提示功能,保證用戶十分輕松地完成各種復雜的操作。
 
一、路徑規劃軟件的圖形基礎
         由于本軟件基于圖形界面,所以首先需要確立必要的圖形基礎。
 
1.定義圖形對象
         根據Visual C++面向對象的特性,把地圖中各種構成要素抽象為不同的類別,如建筑物類、地面設備類及路徑類。建筑物基類又可分為圓形建筑物、方形建筑物等不同類型的建筑物;設備基類可分為方形設備、多邊形設備等不同類型的設備;路徑基類可分為直線路徑、圓弧路徑、側移路徑等不同類型的路徑。對地圖中各圖形元素的操作,實際上就是對以上定義的各個類型對象的操作。
 
2.確定屏幕的映射方式
        一般情況下,屏幕繪圖都以像素作為繪圖單位,稱之為設備坐標。在進行繪圖操作的時候,不可避免要用到設備坐標系。WINDOWS提供了幾種映射方式(或稱坐標系),可以通過它們來和設備上下文相聯系。一般來說,最常用的就是WM_TEXT方式,在此軟件設計中也采用WM_TEXT方式。在WM_TEXT坐標方式下,坐標被映射到像素,X值向右方遞增,Y值向下方遞增。當確定了設備上下文的映射方式之后,就可以利用CDC類的LptoDP函數及DPtoLP函數,在邏輯坐標和設備坐標之間進行轉換,為圖形在屏幕上的顯示做好準備。
 
3. 系統坐標的變換
         由于本軟件是有關地圖操作的,所以其呈現在用戶面前的坐標系應該是符合人們日常習慣的以米為單位的笛卡爾坐標系,即X值向右方遞增,Y值向上方遞增,這與上面采用的WM_TEXT屏幕映射方式有概念上的差異,因此需要推導一套坐標變換公式實現兩套坐標系之間的轉換。
 
        程序中最終存儲的各圖形元素的坐標為實際坐標,使用DPtoVP函數把實際坐標轉換為邏輯坐標,即可實現屏幕顯示。相反,使用VPtoDP函數把屏幕圖形的邏輯坐標轉換為實際坐標,即可實現坐標的存儲。
 
二、軟件設計的指導思想和實現方法
以下詳細描述該軟件的設計思想及實現方法,具體劃分為幾個不同方面:
1. 圖形的畫法實現
         地圖中包括路徑類、建筑物類、設備類等三大類圖形,每一類中又包括十幾種不同的圖形元素,面對如此種類繁多的圖形對象,軟件應該提供十分豐富的畫法,如直線路徑的畫法有給定起點畫法、給定起點及終點畫法、給定傾角及長度畫法、鼠標任意拖拽畫法等;圓弧也可以根據其旋轉方向的不同而選擇不同的畫法。由于圖形元素太多,畫法也各異,不便一一介紹,在此選擇比較有代表性的圓弧畫法進行介紹。
 
         假設通過工具欄選擇順時針鼠標拖拽畫弧,首先在程序中構建一個圓弧類對象,在視圖類的鼠標移動事件響應函數OnMouseMove中將光標的形狀設置為十字形,等待按下鼠標選取圓弧起點。一旦按下鼠標左鍵,在視圖類的鼠標單擊事件響應函數OnLButtonDown中便可得到圓弧對象的起點m_pntStart,此后移動鼠標進入選取圓心階段,同樣在OnMouseMove函數中進行處理,在屏幕上畫出以鼠標當前點為圓心且經過m_pntStart點的一個圓,并畫出圓的半徑。隨著鼠標的移動,圓和半徑也不斷更新,提示操作者將要得到的圓弧便在此圓周上。當再次按下鼠標左鍵,便選中了鼠標的按下點作為圓弧的圓心。此后便進入圓弧選取階段,當再次按下鼠標左鍵并拖動時,屏幕上出現一段以m_pntStart為起點并隨鼠標移動不斷改變弧長的圓弧,此時抬起鼠標左鍵,便可得到圓弧的終點。其值為經過兩點(鼠標按下點及圓心點)的直線與圓周的交點。至此一段圓弧繪制完畢,同時在程序中保存此圓弧類對象到程序的圖形對象數組中。同理,可以完成各種圖形元素的繪制及保存工作。圖1可簡要說明圓弧動態畫法。
 
 2.圖形的選中
         對于地圖軟件視圖窗口中的所有圖形元素,都可以用鼠標來進行選中操作,被選中的圖形以不同于平時的方式進行顯示,并且可以進行屬性的修改操作。由于操作鼠標準確度的差異,對于封閉圖形還好辦,只要鼠標落點在封閉的面積范圍內就可以將其認為是要選中的圖形,而對于像直線圓弧之類的線條形的圖形元素來說,鼠標按下點往往很難恰好落在圖形上。解決這個問題當然不能強求操作者,而要在軟件上實現一定程度的模糊控制。
 
        具體做法在此舉兩個例子:第一個例子是直線路徑。從數學上來講,直線路徑實質上就是一條直線段,軟件在這條直線段的兩側及兩端點附近開放一定范圍,具體的范圍值依據操作的靈活程度來確定。本軟件的開放范圍定為4個像素,只要在此范圍內按下鼠標鍵,便選中圖形。第二個例子是圓弧路徑。對于圓周上的一段圓弧,要判斷一點是否在其上,首先要判斷此點到圓心的距離是否等于圓的半徑,然后要判斷此點相對于圓心的角度是否在圓弧兩個端點相對于圓心的角度范圍內,如果鼠標按下點滿足以上兩個條件,便選中圖形。然而如果按照上面的做法要用鼠標選中一個圓弧是相當困難的,解決的方法是放寬點到圓心距離的判斷條件,實現了在一定的區域范圍內進行選中操作。對于其它圖形,軟件也都做了不同的處理。上頁代碼舉例說明圓弧路徑的選中操作,如圖3:
 
3.軟件中某些智能畫法的實現
        在進行路段繪制時,大多數情況要求與某條已存在的路段相連。要實現路段相連,可以用給定起點的方法畫路段。但這種方法的不足之處是需要手工輸入起點坐標,為此軟件提供了兩種比較智能的方法實現路段的相連畫法:第一種方法稱為自動跟蹤法,即當移動鼠標到路段的端點(設為PointA點)附近時(幾個像素范圍內),按下鼠標左鍵,程序將自動取PointA點作為將要繪制的路段的起點。第二種方法稱為參考路段法。當操作者需要在路段端點比較集中的區域內選擇一條路段端點作為繪圖起點時,利用自動跟蹤法往往很難選中預期的起點,此時便可以利用參考路段法。首先選中一條路段,該路段將以選中狀態顯示;一旦選中了參考路段并指定了參考點,接下來的路段繪制將無條件地以參考路段的參考點作為繪制的起點。    
 
        一般來說,AGV系統的運行路線至少有一段是閉合曲線。繪制由首尾相連的路段組成的封閉圖形,最大的難點往往不是路段繪制的本身,而是如何最后實現地圖的閉合;因為最后一條路段的終點往往不能恰好與將要相連路段的起點重合,即使對其中某一點的坐標進行修正,也很難滿足連接點的相切特性。基于以上原因,軟件提供了一種非常智能的方法,一步即可實現地圖的閉合,且滿足相切性的要求,這就是圓弧連接法。此項功能的實現主要是根據兩條直線的直線方程、端點坐標及兩直線夾角平分線的直線方程,計算出滿足相切條件的圓方程,進而得到所需的圓弧。
 
三、結論
        本文所介紹的AGV系統運行路徑的規劃與開發方法,是以Visual C++6.0為編譯環境所開發的WINDOWS圖形應用程序,并且已經在實際工程中得到廣泛應用,特別是在美國通用全球多個汽車制造廠的應用,AGV系統的穩定性及易用性得到了一致好評。由于C++語言本身面向對象的特性及代碼的可重用性,使得本軟件的后期完善和維護工作變得相對簡單,即使進行功能上大的改動也不會浪費太多的人力、財力。
 
作者單位為新松機器人自動化股份有限公司



版權聲明:

未經特別書面授權禁止所有媒體及網站轉載本站所有文章內容。如有違反者構成犯罪的,依法追究刑事責任。 所有媒體及網站要轉載本站的任何內容請來信申請,請E-Mail:[email protected] 或者致電:(010)82387518 聯系。

下载易彩网推荐