摘要:在國內(nèi)首次使用中間件技術(shù),面向機(jī)車維護(hù)工業(yè)機(jī)器人,設(shè)計開發(fā)可擴(kuò)展、升級和移植的軟件應(yīng)用框架。詳細(xì)介紹了軟件框架的設(shè)計和實現(xiàn),包括采用兩層結(jié)構(gòu)實現(xiàn)服務(wù)器、框架的技術(shù)指標(biāo)、系統(tǒng)CORBA IDL的具體設(shè)計和定義。最后規(guī)劃了今后的研究工作。
關(guān)鍵詞:中間件; 公共對象請求代理體系結(jié)構(gòu); 工業(yè)機(jī)器人; 機(jī)車維護(hù)
中圖分類號:TP242文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2008)04-1069-04
0引言
火車機(jī)車車輛的檢測與維護(hù)是鐵路機(jī)務(wù)段和機(jī)車維護(hù)廠的主要任務(wù),檢修車間每天需要檢測與維護(hù)的火車有數(shù)十列,每列火車被分解檢查、更新部件,然后重新裝配后投入運行,工作量巨大。由于車底盤是磨損消耗最集中的部位,火車檢修主要是針對車廂底盤。機(jī)車底盤維護(hù)流程大體如下:
a)在機(jī)車承載兩側(cè)取出四組承載耳并檢查承載耳;
b)在機(jī)車承載兩側(cè)取出彈簧組并檢查彈簧;
c)翻轉(zhuǎn)機(jī)車承載,卸掉交叉桿,檢查交叉桿;
d)卸掉機(jī)車承載兩端的三角梁;
e)在四個八字面上去掉墊片,焊接新的墊片;
f)重新安裝機(jī)車承載兩端的三角梁;
g)重新安裝交叉桿,翻轉(zhuǎn)機(jī)車承載;
h)重新安裝彈簧組;
i)重新安裝承載耳。
以上每一步操作持續(xù)5~10 min。目前國內(nèi)所有工作都是人工操作,輔以簡單的機(jī)械設(shè)備,自動化水平非常低。根據(jù)上述情況,啟動了采用工業(yè)機(jī)器人流水線實現(xiàn)機(jī)車車盤檢修自動化的研究。維修線整體設(shè)計布局如圖1所示。圖中流程按逆時針方向進(jìn)行,右邊工作帶是步驟a)~d);左邊工作帶是步驟f)~i);中間是步驟e)。步驟e)配置了4臺焊接機(jī)器人,其他步驟都各配置1臺機(jī)器人,1臺移動機(jī)器人作為AGV,負(fù)責(zé)將彈簧和承載耳從右邊工作帶運送到左邊工作帶。整個流程包括13臺機(jī)器人,在研發(fā)階段,步驟c)和g)使用自行設(shè)計制造的特種機(jī)器人,使用Pioneer先鋒作為AGV,其他步驟使用2臺6自由度的Motoman UP6機(jī)械手。
在現(xiàn)場應(yīng)用中,機(jī)器人類型以及工位作業(yè)不一樣,控制方式和通信協(xié)議也不一樣,作業(yè)流程是分布異構(gòu)的。各機(jī)器人必須按一定的節(jié)拍工作,以確保整個流程在給定時間內(nèi)完成。
符合現(xiàn)場應(yīng)用的軟件框架要求能夠管理工業(yè)機(jī)器人,調(diào)度指定作業(yè),并為作業(yè)的編輯、仿真和實時監(jiān)控提供有效的視覺手段。根據(jù)現(xiàn)場的特性和要求,軟件框架采用中間件技術(shù)和虛擬現(xiàn)實技術(shù)實現(xiàn)。
目前可用的中間件技術(shù)包括CORBA、Microsoft .NET、IBM SOM、SOAP、RTC、Sun’s Java/RMI等。軟件框架的系統(tǒng)中間件采用C++ CORBA,在客戶端除了C++ CORBA,還使用Java/RMI。
CORBA是由OMG提出并維護(hù)的獨立于供應(yīng)商的標(biāo)準(zhǔn)協(xié)議[1],它為可移植的分布式計算應(yīng)用提供了平臺無關(guān)的編程接口和服務(wù)模型。由于獨立于編程語言、操作系統(tǒng)平臺和網(wǎng)絡(luò)協(xié)議,CORBA高度適合于分布式應(yīng)用系統(tǒng)的集成以及在已有系統(tǒng)內(nèi)開發(fā)新的應(yīng)用軟件[2]。圖2展示了CORBA機(jī)制內(nèi)的部件模型,這些部件一起實現(xiàn)了CORBA的互操作性、可移植性以及其他特性。其中,客戶端和駐留在服務(wù)器的各種CORBA對象通過ORB(object request broker)互連通信。ORB可由不同廠家實現(xiàn),但都遵循一致的CORBA協(xié)議,對于客戶端來說都是透明無區(qū)別的。
實時CORBA(real-time CORBA,RTCORBA)協(xié)議[3]擴(kuò)展了CORBA核心模型以支持實時架構(gòu)需要。當(dāng)前可用的實時CORBA是基于C++和Java的實現(xiàn)。實時CORBA設(shè)計了編程接口,可以在應(yīng)用程序中配置并控制計算機(jī)處理器以及通信和內(nèi)存等資源。由于這些特性,軟件框架采用了實時CORBA提供的若干特性和服務(wù)。
1試驗環(huán)境
如圖3所示,軟件框架的試驗環(huán)境是基于局域網(wǎng)的,實際包括三個機(jī)器人單元,一臺網(wǎng)絡(luò)計算服務(wù)器和若干工控PC。
機(jī)器人單元中有兩個是Motoman UP6機(jī)械手及配套的控制器和本地工控機(jī)。該機(jī)械手有六個自由度,由控制器直接控制,控制器可以通過RS-232或以太網(wǎng)卡與一臺工控PC連接,如圖4所示。
系統(tǒng)服務(wù)器的配置如下:操作系統(tǒng)為RedHat AS3;
CPU為Intel(R) Xeon(TM) CPU 3.00 GHz;RAM為2 GB;
CORBA為ACE/TAO 1.4;數(shù)據(jù)庫為Oracle 9i for Linux。
在客戶端研發(fā)使用三臺工控PC:一臺運行Linux操作系統(tǒng)用于Pioneer的編程和調(diào)試;兩臺運行Windows。其中一臺運行Visual C++和ACE/TAO,用來開發(fā)基于CORBA的C/S方式的客戶端應(yīng)用;另外一臺安裝JDK用來開發(fā)基于RMI的B/S方式的客戶端應(yīng)用。圖5說明了客戶端應(yīng)用結(jié)構(gòu)。
按圖3~5設(shè)計,整個軟件框架的通信都是基于CORBA IIOP(Internet inter-ORB protocol)的。CORBA協(xié)議定義了GIOP(general inter-ORB protocol)作為其互協(xié)作的基本框架, 但GIOP只是抽象概念定義,不能直接應(yīng)用于ORB間的通信。IIOP是基于TCP/IP的GIOP具體實現(xiàn),軟件框架中,客戶端應(yīng)用與系統(tǒng)服務(wù)器的通信,以及機(jī)器人工作單元與系統(tǒng)服務(wù)器的通信都是基于IIOP的。
2系統(tǒng)中間件的設(shè)計
圖3、4中的服務(wù)器的設(shè)計是兩層結(jié)構(gòu),而在文獻(xiàn)[1,4~7,9]中的服務(wù)器的設(shè)計都是單層結(jié)構(gòu)。這樣設(shè)計是因為應(yīng)用對實時性要求高,如文獻(xiàn)[6]中所論述,在中間件系統(tǒng)中有很多因素導(dǎo)致惡劣的實時性能,包括用戶響應(yīng)、網(wǎng)絡(luò)傳輸、CORBA協(xié)議處理、CORBA服務(wù)處理、顯示處理等。如果所有13部機(jī)器人的工作負(fù)載以及多個用戶的請求處理全部集中于系統(tǒng)主服務(wù)器,則系統(tǒng)主服務(wù)器就會成為整個系統(tǒng)性能的瓶頸。
為解決此問題,如圖4所示,由于具體機(jī)器人的行為和控制方式都相對固定,針對每部機(jī)器人都配置了一臺本地工控PC,設(shè)立了CORBA環(huán)境,并開發(fā)了本地服務(wù)程序,專門處理機(jī)器人的具體操作。這樣系統(tǒng)主服務(wù)器可以專注于高級的綜合任務(wù)和事務(wù),如作業(yè)調(diào)度、遠(yuǎn)程實時監(jiān)控、作業(yè)仿真、系統(tǒng)日志、客戶請求處理等。
系統(tǒng)主服務(wù)器通過RM(robot manager)與機(jī)器人單元交互,每個機(jī)器人在系統(tǒng)主服務(wù)器的實時POA(real-time portable object adapter,RTPOA)內(nèi)都駐留著相應(yīng)的RM,如圖6所示。RM是主服務(wù)器和本地機(jī)器人的雙重代理,主服務(wù)器只與代表機(jī)器人的RM交互,不去考慮機(jī)器人的具體實現(xiàn);本地機(jī)器人也只與自己的RM交互,不必考慮其駐留的主服務(wù)器的設(shè)計和實現(xiàn)。
服務(wù)器的兩層結(jié)構(gòu)設(shè)計分離了應(yīng)用中的低級具體操作和概念級的高層次服務(wù)模型,因此提升了系統(tǒng)的升級擴(kuò)展能力和可移植性。當(dāng)在系統(tǒng)中增加或移除機(jī)器人時,只需要配置對應(yīng)的RM模塊而不影響系統(tǒng)整體的概念設(shè)計和實現(xiàn)架構(gòu),不必考慮機(jī)器人具體的操作和相關(guān)編碼實現(xiàn)。當(dāng)主服務(wù)器移植到新的硬件服務(wù)器或運行新的操作系統(tǒng)時,底層的與機(jī)器人相關(guān)的應(yīng)用程序都不必在新環(huán)境下重新編譯或者改動。
在軟件框架中采用了CORBA標(biāo)準(zhǔn)服務(wù)包括:
a)命名服務(wù)(naming service)。它是基本的CORBA標(biāo)準(zhǔn)服務(wù),用于提供透明的中間件服務(wù)定位。服務(wù)器端駐留并維護(hù)著服務(wù)對象,并以字符串名字進(jìn)行廣播;客戶端可以通過解析這些字符串名字獲取所需要的服務(wù)對象引用,進(jìn)而取得所需要的服務(wù),而不必考慮服務(wù)對象和服務(wù)器的位置和具體實現(xiàn)。
b)實時日志服務(wù)(RT event based log service)。因為要應(yīng)用于工業(yè)現(xiàn)場,采用CORBA的實時日志服務(wù)為系統(tǒng)提供日志能力。在本框架中,用戶的所有操作、請求、響應(yīng)以及系統(tǒng)內(nèi)所有的事件、異常、運行狀態(tài)均可以配置到日志記錄中。這些被記錄的信息可用來在研發(fā)階段調(diào)試系統(tǒng)框架,在現(xiàn)場應(yīng)用中幫助評估系統(tǒng)性能,協(xié)助機(jī)器人的示教訓(xùn)練和編碼,跟蹤用戶操作等。
c)實時事件服務(wù)(real-time event service)。它使CORBA系統(tǒng)可以交換命名的事件,沒有傳統(tǒng)的客戶與服務(wù)器的界定,而只是發(fā)出事件的供應(yīng)者和訂制并接收事件的消費者,事件在供應(yīng)者和消費者之間的專有事件頻道內(nèi)傳輸。實時事件服務(wù)給應(yīng)用實現(xiàn)以及數(shù)據(jù)交換帶來了極大的靈活性,如當(dāng)機(jī)器人的空間位姿或作業(yè)狀態(tài)發(fā)生變化,就會產(chǎn)生相應(yīng)的事件,該事件通過事件頻道傳送到訂制事件的消費者,消費者可以是任意的CORBA對象。
從遠(yuǎn)端分布的多個用戶來實時地監(jiān)控多個機(jī)器人要求系統(tǒng)能較好地利用多線程處理并發(fā)。RTCORBA提供了線程池(thread pool)機(jī)制來支持服務(wù)器的多線程編程,實現(xiàn)服務(wù)器資源預(yù)分配。當(dāng)服務(wù)器啟動時,一組線程可以被靜態(tài)地創(chuàng)建,這些線程隨時準(zhǔn)備被綁定到客戶的請求,可以防止系統(tǒng)運行時線程創(chuàng)建/釋放引起的過載,并通過配置服務(wù)器的線程數(shù)量來確保系統(tǒng)的性能[1]。
為避免低優(yōu)先級的請求消耗掉所有線程,線程池可以進(jìn)一步按優(yōu)先級劃分成若干“泳道”。這樣可以分組管理線程,同時保證了高優(yōu)先級的請求不被錯過或延誤。劃分不是絕對的,當(dāng)高優(yōu)先級請求所屬“泳道”無線程可分配時,可以從低優(yōu)先級“泳道”借線程使用。在軟件框架(圖6)中,當(dāng)系統(tǒng)啟動時,對應(yīng)于每一個服務(wù)對象(RM、系統(tǒng)日志等)的RTPOA就被創(chuàng)建,同時相應(yīng)的線程池也被創(chuàng)建,劃分成若干“泳道”并處于工作待命狀態(tài)。
針對RM,線程池按高、中、低三個優(yōu)先級劃分“泳道”。一般的作業(yè)操作屬于低級別請求;狀態(tài)改變相關(guān)的事件屬于中級別請求;碰撞和緊急停機(jī)屬于最高優(yōu)先級。這樣在正常情況下,機(jī)器人可執(zhí)行規(guī)定的作業(yè)并及時將自身狀態(tài)事件發(fā)布出去,并保證在緊急情況下停止工作和動作。
3機(jī)器人IDL文檔的設(shè)計和定義
軟件框架定義了一組機(jī)器人對象和接口作為全部工作的基礎(chǔ),所有對象和接口都以CORBA IDL定義,確保語言和平臺的無關(guān)性[8]。這些接口在服務(wù)器端具體實現(xiàn),以伺服程序(servant)方式體現(xiàn)[4]。
根據(jù)CORBA IDL定義的對象和接口,圖7展示了C++ CORBA服務(wù)器端和不同客戶端的實現(xiàn)。在客戶端,開發(fā)者和用戶不必了解對象和接口是如何實現(xiàn)的,只要能獲得對象引用,針對可用的接口編程實現(xiàn)客戶端的事務(wù)和應(yīng)用就行了。開發(fā)者可以選擇VC++/ACE/TAO、BC++/VisiBroker、Java/RMI等開發(fā)套件;在服務(wù)器端,軟件框架采用Linux/C++/ACE/TAO開發(fā)。
就現(xiàn)場應(yīng)用而言,機(jī)器人應(yīng)用相關(guān)的接口和數(shù)據(jù)結(jié)構(gòu)可歸納到如下范疇:
a)異常。異常處理機(jī)制是任何軟件框架不可或缺的,CORBA自身定義了30個標(biāo)準(zhǔn)系統(tǒng)異常,根據(jù)現(xiàn)場應(yīng)用需要,框架又自定義了若干異常,確保可以詳盡獲取并管理系統(tǒng)狀態(tài)。
b)事件。軟件框架采用CORBA的實時事件服務(wù)作為消息交換的主要方式。在事件定義中主要包含兩項,惟一標(biāo)志事件類型的ID及用來承載數(shù)據(jù)和消息的CORBA Any類數(shù)據(jù)。
c)作業(yè)操作。機(jī)車底盤維護(hù)流程包括十幾項作業(yè),每個作業(yè)由CORBA sequence序列來定義。
d)機(jī)器人運動學(xué)。每個機(jī)器人運行特定的作業(yè),每個作業(yè)實際上是運動學(xué)動作或運動學(xué)矩陣的序列。序列內(nèi)的每個執(zhí)行點都是可編輯的,作業(yè)序列的本質(zhì)就是路徑規(guī)劃的過程。因此在本軟件框架中定義了相應(yīng)的對象和接口,如UP6的DH表述和正解、逆解。
e)輔助接口。每個機(jī)器人的控制器都有若干輔助函數(shù)或接口,如UP6的API可以協(xié)助機(jī)器人重置零位或與本地PC建立通信連接等。這些機(jī)器人本機(jī)API都被定義或映射到對應(yīng)的IDL定義中,這樣確保在系統(tǒng)中有全局統(tǒng)一的機(jī)器人控制接口描述。
系統(tǒng)開發(fā)采用不止一種機(jī)器人,所以按繼承關(guān)系來定義機(jī)器人對象,如圖8所示。除了機(jī)器人相關(guān)對象和接口的定義,還定義了RM、作業(yè)調(diào)度、系統(tǒng)日志等服務(wù)對象。
根據(jù)上述設(shè)計,下面給出軟件框架部分IDL定義:
事件結(jié)構(gòu)
struct sysEvent{
long eventID;
string eventMsg;
};
異常:機(jī)器人內(nèi)部自我碰撞
exception innerCollesion{};
異常:機(jī)器人與外部發(fā)生碰撞,包括機(jī)器人之間、機(jī)器人與工件、機(jī)器人與環(huán)境
exception outerCollesion{};
機(jī)器人類型:機(jī)械手、移動機(jī)器人
enum robotType{manipulator,mobile};
機(jī)器人采用的外部通信協(xié)議:RS-232 802無線Ethernet
enum commProtocol{RS,wireless,Ethernet};
機(jī)器人基本概況:品牌、制造商、供貨服務(wù)商、機(jī)器人型號、機(jī)器人類型、機(jī)器人編號、通信協(xié)議
struct RobotBasic{
stringbrand;
stringproducer;
stringvender;
stringmodel;
robotType robot_type;
shortrobot_num;
commProtocol comm_protocol;
};
速度類型:線速度,角速度
enum speedType{linear,angular};
機(jī)器人(末端)位姿
struct positionNormal{
double px; double py;
double pz; double nx;
double ny; double nz;
double ox; double oy;
double oz; double ax;
double ay; double az;
};
機(jī)器人狀態(tài)
typedef sequence〈positionNormal〉 status;
機(jī)器人運動控制點
struct controlPoint{
speedType speed_type;
double speedrate;
double duration;
positionNormal endPN;
};
機(jī)器人動作
interface robotAction{};
機(jī)器人作業(yè)點
struct jobPoint{
equence〈controlPoint〉 ctl_p;
robotAction act;
};
機(jī)器人作業(yè)序列
typedef sequence〈jobPoint〉 jobSeq;
機(jī)器人作業(yè)
struct robotJob{
jobSeq js;
string jobname;
string job_description;
};
工業(yè)機(jī)器人
interface iRobot{
readonly attribute RobotBasic basic_description;
readonly attribute short degree_freedom;
attribute robotJob job;
attribute Status status;
void setSpeedTypeOf(in short ctrl_idx,
in speedType st,
in short flag);
void setSpeedRateOf(in short ctrl_idx,
in double speedrate,
in short flag);
};
4系統(tǒng)服務(wù)器的實現(xiàn)
在中間件應(yīng)用中,服務(wù)器端的實現(xiàn)主要是指服務(wù)對象的伺服程序?qū)崿F(xiàn)。一個伺服程序就是一組代碼集合,可被POA用來初始化服務(wù)對象,是服務(wù)對象標(biāo)志的服務(wù)的具體實現(xiàn),可由C/C++、Java等多種語言編碼。
在機(jī)器人單元中,其主要工作是具體實現(xiàn)Motoman UP6和Pioneer的伺服程序及相關(guān)的接口;在系統(tǒng)主服務(wù)器中,其主要工作是實現(xiàn)UP6和Pioneer對應(yīng)的RM伺服程序、系統(tǒng)日志伺服程序、作業(yè)調(diào)度伺服程序和系統(tǒng)監(jiān)控伺服程序等。
5結(jié)束語
在國內(nèi)首次闡述了面向機(jī)車維護(hù)的基于中間件和虛擬現(xiàn)實的軟件框架的設(shè)計和實現(xiàn)。雖然軟件框架是為機(jī)車維護(hù)研發(fā)的,但也可以應(yīng)用于其他復(fù)雜分布式異構(gòu)環(huán)境。今后的工作將專注于多機(jī)器人復(fù)雜作業(yè)調(diào)度和移動機(jī)器人的傳感信息處理。
參考文獻(xiàn):
[1]BOTTAZZI S, CASELLI S, REGGIANI M, et al. A software framework based on real-time CORBA for telerobotics system[C]//Proc of IEEE International Conference on Intelligent Robots and Systems. Piscataway: IEEE, 2002:3011-3017.
[2]MICHI H, STEVE V. Advanced CORBA programming with C++[M].[S.l.]: Addison Wesley, 1999.
[3]OMG.Real-time CORBA specification[EB/OL].(2002-08-02).http://www.omg.org/docs/formal.
[4]KUO Y H, MACDONALD B A. A distributed real-time software framework for robotic applications[C]//Proc of IEEE International Conference on Robotics and Automation. Barcelona:[s.n.], 2005:150-155.
[5]PAN Lian-dong, HUANG Xin-h(huán)an. Implementation of a PC-based robot controller with open architecture[C]//Proc of IEEE International Conference on Robotics and Biomimetics. 2004:790-794.
[6]FERNNDEZ-MADRIGAL J A,CRUZ-MARTN E, CRUZ-MARTN A, et al. Adaptable Web interfaces for networked robots[C]//Proc of IEEE International Conference on Intelligent Robots and Systems. Piscataway: IEEE,2005:3441-3446.
[7]CHEN Qi-jun, GENG Hai-xia, WOO P Y. Research on and pure Java realization of a Web-based mobile robot system[C]//Proc of American Control Conference. 2003:615-620.
[8]UTZ H, SABLATNG S, ENDERLE S, et al. Miro-middleware for mobile robot applications [J]. IEEE Trans on Robotics and Automation, 2002,18(4):159-165.
[9]MARIN R, SANZ P J, SANCHEZ J S. A very high level interface to teleoperate a robot via Web including augmented reality[C]//Proc of International Conference on Robotics and Automation. Washington DC: ACM Press, 2002:2725-2730.