• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種基于Ros的AGV調(diào)度系統(tǒng)設(shè)計與實現(xiàn)

      2022-06-30 12:07:18魏慶棟
      物流技術(shù) 2022年6期
      關(guān)鍵詞:服務(wù)端線程上位

      魏慶棟,王 忠

      (火箭軍工程大學(xué) 基礎(chǔ)系,陜西 西安 710038)

      1 問題描述

      典型的競賽類AGV需要在規(guī)定場地內(nèi)完成一系列規(guī)定工作。以大學(xué)生智能汽車競賽航天智慧物流組為例[1],場地如圖1所示。該比賽為模擬工業(yè)轉(zhuǎn)運無人車在實際生產(chǎn)中的應(yīng)用,AGV要完成啟動、指定位置的??颗c重啟、識別紅綠燈、裝載和卸載貨物等一些規(guī)定動作,并按照相應(yīng)的標(biāo)準(zhǔn)獲取或者扣掉一定分?jǐn)?shù)。

      按照上述比賽要求,上位機需要在和AGV完成通信的基礎(chǔ)上,依靠調(diào)度系統(tǒng)對AGV進(jìn)行監(jiān)控。操控人員通過調(diào)度系統(tǒng)的界面與下位機建立連接,如果連接成功,界面將自動開始顯示AGV的一些運動參數(shù),操控人員隨后向AGV 發(fā)送位置坐標(biāo)等指令,AGV 在接收到指令后開始自主導(dǎo)航,之后的動作除接收下一個坐標(biāo)外均由AGV自主完成。如果長時間連接不成功,系統(tǒng)將自動彈出連接失敗,并顯示原因。任務(wù)流程圖如圖2所示。

      圖1 比賽場地圖

      2 功能分析

      按照上述的比賽流程和任務(wù)要求,本文所要設(shè)計實現(xiàn)的AGV調(diào)度系統(tǒng)需要實現(xiàn)以下幾個功能:

      (1)通信管理功能:通過調(diào)度系統(tǒng),上位機能與AGV 建立通信連接,從而實現(xiàn)上位機和AGV 的實時數(shù)據(jù)交換。

      圖2 調(diào)度系統(tǒng)任務(wù)流程圖

      (2)車輛控制功能:調(diào)度系統(tǒng)可以對AGV的啟動和停止進(jìn)行控制,還可以下發(fā)位置坐標(biāo),控制AGV的??课恢?。

      (3)比賽進(jìn)程監(jiān)控功能:調(diào)度系統(tǒng)可以實時監(jiān)視AGV的運行狀態(tài),以便及時發(fā)現(xiàn)AGV行進(jìn)中的問題。

      (4)人機交互界面:為操控人員提供操作窗口,能夠顯示通信連接狀況、車輛運行狀況等信息,并提供對AGV的控制功能。

      通過對上述功能的分析可以得出,調(diào)度系統(tǒng)在比賽中發(fā)揮著重要作用,比賽的最終結(jié)果除了取決于AGV本身的性能,更要依靠一個操作流暢、運行穩(wěn)定的調(diào)度系統(tǒng)軟件。調(diào)度系統(tǒng)的功能結(jié)構(gòu)圖如圖3 所示。

      圖3 功能結(jié)構(gòu)示意圖

      3 系統(tǒng)設(shè)計

      3.1 總體框架與設(shè)計思路

      整個調(diào)度系統(tǒng)的運行環(huán)節(jié)如圖4所示,分為以下幾個層次:人機交互層是為用戶提供的操作界面,主要用來為操控人員提供使用窗口;通信層用來實現(xiàn)上位機和AGV的連接與通信。為了便于開發(fā),客戶端可以結(jié)合在用C#編寫的界面中,服務(wù)端則使用Python編寫,結(jié)合在Ros節(jié)點中;執(zhí)行層是借助Ros自定義的控制節(jié)點,通過Ros的通信機制實現(xiàn)系統(tǒng)對AGV的控制和監(jiān)視。

      3.2 設(shè)計方案

      圖4 總體框架

      3.2.1 交互層設(shè)計。為了方便界面設(shè)計開發(fā),本文采用了Microsoft Visual Studio 2019開發(fā)平臺框架的C#語言進(jìn)行軟件開發(fā),設(shè)計實現(xiàn)一個能滿足比賽要求的人機交互界面。使用C#進(jìn)行編程時,會自動產(chǎn)生代碼框架,這使得編程大大減少了工作量。同時作為面向?qū)ο缶幊痰恼Z言,C#具有繼承性、封裝性和多態(tài)性等特點,使得代碼結(jié)構(gòu)清晰,可讀性強,利于擴(kuò)展和調(diào)用[2]。

      根據(jù)上一節(jié)可知,界面由三個模塊組成,分別是AGV的控制模塊、監(jiān)控模塊以及通信管理模塊。通信管理模塊負(fù)責(zé)管理與AGV的通信連接,控制模塊負(fù)責(zé)向AGV發(fā)送指令,而監(jiān)控模塊負(fù)責(zé)實時顯示AGV的運動參數(shù)。

      3.2.2 通信層設(shè)計。根據(jù)比賽需求,上位機和下位機之間的距離不會太遠(yuǎn),但在比賽過程中AGV會經(jīng)常處于運動狀態(tài),因此為了方便通信,可以選擇無線組網(wǎng)的方式,將二者連接在同一路由器上,組建成簡易局域網(wǎng)。

      在編程開發(fā)上,選擇使用Socket 通信,它是一種網(wǎng)絡(luò)中不同主機上的應(yīng)用進(jìn)程之間進(jìn)行雙向通信的協(xié)議機制,作為支持TCP/IP 協(xié)議的API,可以避免考慮具體的三次握手連接過程[3],只需要調(diào)用Socket 抽象類的connect接口函數(shù),即可完成通信連接。在使用Socket通信時,需要將通信的一端作為服務(wù)端,綁定自身IP地址和一個端口號,另一端則作為客戶端,通過服務(wù)端的IP地址和端口號與服務(wù)端進(jìn)行連接。在連接成功后,兩端開始傳輸數(shù)據(jù)。在通信結(jié)束后,調(diào)用Close函數(shù),關(guān)閉套接字連接,釋放資源[4]。

      3.2.3 執(zhí)行層設(shè)計。機器人系統(tǒng)作為一種多模塊集成的復(fù)雜系統(tǒng),需要不同功能模塊和進(jìn)程之間相互聯(lián)系、相互配合才能發(fā)揮系統(tǒng)的正常功能。Ros是用于機器人領(lǐng)域的一套通用軟件框架,機器人的不同進(jìn)程和模塊在Ros中通常以節(jié)點的形式存在,通過Ros的通信機制實現(xiàn)它們的協(xié)作和配合[5]。

      Ros節(jié)點間的基本通信機制主要有三種方式,話題通信(發(fā)布訂閱模式)、服務(wù)通信(請求響應(yīng)模式)和參數(shù)服務(wù)器(參數(shù)共享模式)[6]。為實現(xiàn)對AGV的監(jiān)控,主要采用的是話題通信機制和服務(wù)通信機制。

      話題通信的過程主要是訂閱和發(fā)布。通信的兩方分別作為發(fā)布者和訂閱者,雙方在節(jié)點管理器中完成注冊后,發(fā)布者聲明發(fā)布(Publish)話題(Topic),而訂閱者聲明訂閱該話題,話題中的數(shù)據(jù)即為需要通信的內(nèi)容[7]。在比賽中,為獲取到AGV的運行數(shù)據(jù),可以自定義訂閱節(jié)點,訂閱比賽所需運動參數(shù)的話題。具體如圖5所示。

      圖5 話題通信機制

      服務(wù)通信機制是Ros通信中基于請求響應(yīng)模式的一種常見通信機制,一個節(jié)點向另一個節(jié)點發(fā)送請求,另一個節(jié)點收到請求后進(jìn)行處理,再將響應(yīng)結(jié)果發(fā)送回原節(jié)點[8]。在比賽中,為實現(xiàn)AGV的自主導(dǎo)航而使用的Navigation功能包,其中的move_base包會通過actionlib機制獲取目標(biāo)點坐標(biāo)后進(jìn)行路徑規(guī)劃。而actionlib通信機制實際上就是一種特殊的服務(wù)通信機制。與一般的服務(wù)通信機制相比,增加了中斷和反饋的機制。在復(fù)雜的基于Ros的系統(tǒng)中,如果某個響應(yīng)的過程相對比較復(fù)雜,服務(wù)端處理時間較長,使用actionlib通信機制,可以使得客戶端實時獲取到服務(wù)端的任務(wù)處理進(jìn)度狀態(tài),或者選擇中斷處理進(jìn)程[9]。具體如圖6所示。

      圖6 actionlib通信機制

      4 調(diào)度系統(tǒng)軟件實現(xiàn)

      以本文第一節(jié)給出的智能車競賽為例,結(jié)合前面的設(shè)計方案,給出具體的軟件實現(xiàn)過程。

      4.1 交互層的實現(xiàn)

      根據(jù)比賽需要,本文設(shè)計的人機交互界面如圖7所示,界面中包含了對AGV的控制模塊、監(jiān)控模塊以及通信管理模塊。

      圖7 人機交互界面

      (1)通信管理模塊。通信管理模塊通過輸入AGV的IP 地址和端口號嘗試與AGV 建立連接,并在消息列表中顯示連接狀況。運行效果如圖8所示。

      (2)AGV 控制模塊??刂颇K在上位機與AGV建立連接后,負(fù)責(zé)向AGV發(fā)送指令,包括位置坐標(biāo)和停車方向,隨后AGV開始運動,并在規(guī)定位置完成???。運行效果如圖9所示。

      圖8 通信管理模塊交互界面

      圖9 AGV控制模塊界面

      (3)AGV監(jiān)視模塊。監(jiān)視模塊在比賽開始后,會實時顯示AGV的運行狀態(tài)和位置信息,為操控人員提供參考。運行效果如圖10所示。

      圖10 AGV監(jiān)視模塊界面

      4.2 通信層和執(zhí)行層的實現(xiàn)

      按照系統(tǒng)層次分析,Socket通信的兩端需要分別與Ros節(jié)點和界面進(jìn)行數(shù)據(jù)交互,因此兩個層次可以一起實現(xiàn)。

      4.2.1 客戶端的開發(fā)。使用C#進(jìn)行客戶端的開發(fā)時,在界面中找到相應(yīng)的按鈕,添加點擊事件,調(diào)用Socket類的Connect()、Send()和Receive()等方法進(jìn)行通信的連接、發(fā)送和接收。在使用Receive()方法時,為保證在連接完成后,Socket的接收狀態(tài)隨即開啟并且能一直保持,同時接收到的信息能在控件中顯示出來,需要做如下處理:

      (1)將接收程序作為子線程進(jìn)行抽象,并設(shè)置為后臺程序[10],保證在點擊動作完成后,可以一直保持接收狀態(tài)。

      (2)由于在抽象出的子線程中無法直接調(diào)用窗口中的控件,因此需要將工作線程中涉及更新界面的代碼封裝為一個方法,通過Invoke 方法進(jìn)行調(diào)用,這樣可以大大減少UI線程更新界面的負(fù)擔(dān)[11]。

      (3)完成上述動作后,點擊“連接”按鈕,窗口程序會隨之陷入死循環(huán),無法正常連接,所以需要設(shè)置全局變量flag,初始設(shè)置為0,在完成連接后,flag設(shè)為1,此時接收線程中的循環(huán)才開啟。

      4.2.2 服務(wù)端的開發(fā)。使用Python 進(jìn)行服務(wù)端的開發(fā)時,同樣是調(diào)用Socket類創(chuàng)建Socket服務(wù)端,綁定相應(yīng)的IP地址和端口號,設(shè)置監(jiān)聽;與客戶端類似,服務(wù)端需要將“接收”和“發(fā)送”兩個過程抽象為兩個線程,在主程序中同時并發(fā)運行。

      兩個線程的設(shè)計思路為:

      (1)發(fā)送線程中,定義Ros節(jié)點,根據(jù)3.2.3節(jié)中介紹的Ros話題通信機制,訂閱需要發(fā)送的AGV參數(shù)。sub=rospy.Subscriber("/amcl_pose",PoseWithCovariance Stamped,doPose,queue_size=1000)

      其中doPose為回調(diào)函數(shù),獲得訂閱的坐標(biāo)后的處理動作由該回調(diào)函數(shù)進(jìn)行定義[12]。按照功能分析,回調(diào)函數(shù)的功能應(yīng)該定義為使用Socket通信的Send方法將信息發(fā)送至上位機。

      (2)接收線程在接收到上位機發(fā)送的坐標(biāo)信息后,將坐標(biāo)信息設(shè)置為導(dǎo)航目標(biāo)點,然后通過actionlib通信機制發(fā)送至導(dǎo)航的服務(wù)端,AGV隨即開始自主導(dǎo)航。為了簡化代碼結(jié)構(gòu),可以將發(fā)布導(dǎo)航點的代碼抽象為類,在接收線程中使用該類即可。

      5 結(jié)語

      根據(jù)本文設(shè)計實現(xiàn)的調(diào)度系統(tǒng)在智能車比賽中運行穩(wěn)定,操作簡單,可以滿足比賽要求。同時在現(xiàn)行技術(shù)的基礎(chǔ)上,還可以根據(jù)比賽要求進(jìn)行一系列的改進(jìn),比如增加訂閱的話題,獲取AGV攝像頭的視頻數(shù)據(jù),以及對AGV發(fā)送更多的控制指令等。本文所介紹的AGV調(diào)度系統(tǒng),應(yīng)用到的技術(shù)相對簡單,操作方便,對之后類似比賽中的調(diào)度系統(tǒng)具有一定的參考和借鑒意義。

      猜你喜歡
      服務(wù)端線程上位
      特斯拉 風(fēng)云之老阿姨上位
      車迷(2018年12期)2018-07-26 00:42:22
      云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
      新時期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
      在Windows Server 2008上創(chuàng)建應(yīng)用
      淺談linux多線程協(xié)作
      “三扶”齊上位 決戰(zhàn)必打贏
      基于ZigBee和VC上位機的教室智能監(jiān)測管理系統(tǒng)
      以新思路促推現(xiàn)代農(nóng)業(yè)上位
      Linux線程實現(xiàn)技術(shù)研究
      “鴿子”玩升級 黑你沒商量
      沾化县| 永清县| 贵南县| 丰宁| 鲁甸县| 镇江市| 颍上县| 鄂尔多斯市| 汝州市| 威远县| 乐东| 当雄县| 广昌县| 西乌珠穆沁旗| 会宁县| 弋阳县| 景谷| 阜阳市| 民乐县| 枣庄市| 湖口县| 鄱阳县| 奉节县| 泾源县| 崇信县| 乌拉特后旗| 凤山县| 图木舒克市| 汶上县| 海门市| 潜山县| 大田县| 山阳县| 乌鲁木齐市| 海原县| 永宁县| 施秉县| 大方县| 观塘区| 缙云县| 金平|