亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種基于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)的標準獲取或者扣掉一定分數(shù)。

        按照上述比賽要求,上位機需要在和AGV完成通信的基礎(chǔ)上,依靠調(diào)度系統(tǒng)對AGV進行監(jiān)控。操控人員通過調(diào)度系統(tǒng)的界面與下位機建立連接,如果連接成功,界面將自動開始顯示AGV的一些運動參數(shù),操控人員隨后向AGV 發(fā)送位置坐標等指令,AGV 在接收到指令后開始自主導(dǎ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的啟動和停止進行控制,還可以下發(fā)位置坐標,控制AGV的??课恢谩?/p>

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

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

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

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

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

        3.2.3 執(zhí)行層設(shè)計。機器人系統(tǒng)作為一種多模塊集成的復(fù)雜系統(tǒng),需要不同功能模塊和進程之間相互聯(lián)系、相互配合才能發(fā)揮系統(tǒng)的正常功能。Ros是用于機器人領(lǐng)域的一套通用軟件框架,機器人的不同進程和模塊在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é)點收到請求后進行處理,再將響應(yīng)結(jié)果發(fā)送回原節(jié)點[8]。在比賽中,為實現(xiàn)AGV的自主導(dǎo)航而使用的Navigation功能包,其中的move_base包會通過actionlib機制獲取目標點坐標后進行路徑規(guī)劃。而actionlib通信機制實際上就是一種特殊的服務(wù)通信機制。與一般的服務(wù)通信機制相比,增加了中斷和反饋的機制。在復(fù)雜的基于Ros的系統(tǒng)中,如果某個響應(yīng)的過程相對比較復(fù)雜,服務(wù)端處理時間較長,使用actionlib通信機制,可以使得客戶端實時獲取到服務(wù)端的任務(wù)處理進度狀態(tài),或者選擇中斷處理進程[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建立連接后,負責(zé)向AGV發(fā)送指令,包括位置坐標和停車方向,隨后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é)點和界面進行數(shù)據(jù)交互,因此兩個層次可以一起實現(xiàn)。

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

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

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

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

        4.2.2 服務(wù)端的開發(fā)。使用Python 進行服務(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ù),獲得訂閱的坐標后的處理動作由該回調(diào)函數(shù)進行定義[12]。按照功能分析,回調(diào)函數(shù)的功能應(yīng)該定義為使用Socket通信的Send方法將信息發(fā)送至上位機。

        (2)接收線程在接收到上位機發(fā)送的坐標信息后,將坐標信息設(shè)置為導(dǎ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ù)比賽要求進行一系列的改進,比如增加訂閱的話題,獲取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ù)研究
        “鴿子”玩升級 黑你沒商量
        人妖av手机在线观看| 国模少妇无码一区二区三区| 一区二区三区四区在线观看视频| 少妇下面好紧好多水真爽| 久久99国产精品久久99| 欧美日韩亚洲国产精品| 伊人亚洲综合网色AV另类| 手机在线中文字幕av| 欧美性猛交xxx嘿人猛交| 亚洲熟女乱色综合亚洲图片| 久久久久中文字幕精品无码免费| 久久国产精品av在线观看| 日韩精品一区二区在线天天狠天| 国产麻传媒精品国产av| 亚洲精品国产字幕久久vr| 永久免费在线观看蜜桃视频 | 国产亚洲精品一区在线| 久久久噜噜噜久久| 这里有精品可以观看| 国产熟女自拍视频网站| 国产一区白浆在线观看| 久久精品国产成人| 国产精品精品| 亚洲大片一区二区三区四区 | 久久久国产精品首页免费| 亚洲色一区二区三区四区| 欲色天天网综合久久| 成人无码a级毛片免费| av免费观看网站大全| 人妻体内射精一区二区三四| 在线天堂中文字幕| 国产精品一级黄色大片| 久久综合99re88久久爱| a级国产乱理论片在线观看| 午夜在线观看有码无码| 人妻少妇猛烈井进入中文字幕 | 国产女同一区二区在线| 不卡一区二区三区国产| 狠狠综合久久av一区二区| 国产极品美女高潮抽搐免费网站| 日产精品毛片av一区二区三区|