EDUROBOT-680-II型教學(xué)機器人是上海交通大學(xué)機器人研究所采用世界銀行貸款研制的一種五自由度多關(guān)節(jié)的機器人。它具備工業(yè)機器的基本功能、良好的開放性以及舒適的使用界面,主要大專院校和科研機構(gòu)提供教學(xué)和科研工具。學(xué)生可以通過親手操作了解和學(xué)習(xí)工業(yè)機器人,它具備工業(yè)機器人的基本功能、良好的開放性以及舒適的使用界面,主要為大專院校和科研機構(gòu)提供教學(xué)和科研工具。學(xué)生可以通過親手操作了解和學(xué)習(xí)工業(yè)機器人,科研人員還可對它進行二次開發(fā)。
教學(xué)機器人的上位機(主控計算機)和下位機(運動控制器)原先采用并行口(LPT1)的SPP方式進行通信。利用LPT1的狀態(tài)寄存器(Status Port)具有的讀能力和每次傳送半字節(jié)(Nibble)來實現(xiàn)數(shù)據(jù)的雙向傳送功能。每次傳送的時序(次序)由軟件建立,在控制字的協(xié)調(diào)下按照教學(xué)機器人的通信協(xié)議接收和發(fā)送數(shù)據(jù)。
目前USB越來越普及,正逐漸取代串口和并口在計算機接口中的地位。為了研究USB在實時通信時的性能,已將教學(xué)機器人上下位機通信改用USB端口實現(xiàn)。
1、 USB特點及其應(yīng)用
通用串行總線USB(Universal Serial Bus)是1994年底由Compaq、IBM、Microsoft等多家公司聯(lián)合提出的一種計算機接噪覆亡,目前已發(fā)展到USB2.0。由于USB具有以下幾方面的特點,所以迅速普及,逐漸確定了在計算機接口中的主導(dǎo)地位。
(1)易用性。USB支持熱插拔和即插即用。
(2)可擴展性。用戶可以通過連接USB集線器到一個已有的端口來增加USB端口數(shù)量,集線器上還可以連更多的集線器。理論上可以連接127個外設(shè)到USB總線上。
(3)快速性。USB1.1版規(guī)定了兩種傳輸速率:低速傳輸和全速傳輸。低速傳輸?shù)乃俾适?.5Mbps,全速是12Mbps。這不但遠遠高于傳統(tǒng)的串口傳輸速率,也比并口傳輸快了好多倍。最近推出的USB2.0允許的最高傳輸速率高達480Mbps。
(4)可靠性。USB的可靠性來自硬件設(shè)計和USB數(shù)據(jù)傳輸協(xié)議兩方面的保證。USB驅(qū)動器、接收器和電纜的硬件規(guī)范消除了大多數(shù)可能引起數(shù)據(jù)錯誤的噪聲;USB協(xié)議使用了差錯校驗和數(shù)據(jù)重傳機制,可以最大程度保證數(shù)據(jù)傳輸?shù)臏蚀_性。
(5)內(nèi)置電源。USB總線內(nèi)置電源線,可以給外設(shè)提供5V和最多500mA的電源供應(yīng),滿足大部分低功耗外設(shè)的電源要求。
由于USB具有這些突出的優(yōu)點,不但一些傳統(tǒng)外設(shè)開始提供USB接口,而且大量新型外設(shè)也把USB接口作為首先甚至唯一的接口,如MP3播放器、移動硬盤等。由于USB的高可靠性和足夠快的通信速率,USB開始應(yīng)用于工業(yè)級的實時通信和控制,例如機器人系統(tǒng)中示教盒與控制器的通信。本文論述的用USB端口實現(xiàn)機器人上位機與下位機的通信也屬于這些方面的應(yīng)用。
2、 用USB實現(xiàn)計算機雙機通信
由于USB模型是一種Host-Slave(主機-外設(shè))主從式結(jié)構(gòu),沒有辦法使兩臺主機不通過外設(shè)而直接通過USB總線通信。然而可通過增加外設(shè)控制器的方法使兩臺主機利用它們的USB端口通信。每個外設(shè)控制器連接到不同的主要,并利用共享的緩沖器交換數(shù)據(jù)。Cypress公司的EZ-Link和Prolific公司的PL-2301把兩個外設(shè)控制器和共享緩沖區(qū)集成到一塊芯片上,作為兩臺主機通過USB總線通俗訴橋梁。其它公司也提供類似的控制芯片。在教學(xué)機器人中,采用PL-2301。
PL-2301是臺灣Prolific公司生產(chǎn)的一種全速USB控制芯片。PL-2301的結(jié)構(gòu)框圖如圖1所示。
PL-2301包括兩套獨立的USB控制單元。在握手信號的協(xié)調(diào)下,它們通過兩個FIFO緩沖器無阻塞地交換數(shù)據(jù)。PL-2301包含四個終端:缺省的控制終端(地址00H)、中斷終端(地址81H)、塊輸出終端(地址02H)、塊輸入終端(地址83H)。控制傳輸用于在主機列舉階段完成對PL-2301的配置及在兩臺主機通信時控制PL-2301的握手信號;中斷傳輸用于PL-2301定期(每毫秒一次)向主機報告握手信號的狀態(tài);塊傳輸用于兩臺主機之間實時地交換數(shù)據(jù)。塊傳輸支持錯誤檢測,這對實時通信和控制很重要。控制傳輸被確保擁有10%的USB總線帶寬,中斷傳輸和等時傳輸最多可以使用90%的帶寬,塊傳輸使用剩余的最大可用帶寬(最多95%)。當總線不太忙時,由于塊傳輸只有一個很小的協(xié)議頭(13字節(jié)),它是所有傳輸類型中最快的。為了確何教學(xué)機器人上下位機以最快的速度通信,滿足實時性要求,最好不要在USB總線上掛接過多的USB外設(shè)。
PL-2301除了能對USB標準請求做出反應(yīng)外,還能對幾種廠商自定義的請求做出反應(yīng)。自定義請求ClearQuickLinkFeature和SetQuickLinkFeature用于控制兩臺主機通信時PL-2301的握手信號。這些握手信號是:
(1)TX_RDY指示本地USB端口是否準備好傳輸數(shù)據(jù)的指示信號。
(2)S_EN掛起使能信號。置位后,PL-2301支持標準的USB掛起特性。
(3)RESET_O塊輸出管道的復(fù)位信號,用于出現(xiàn)錯誤時復(fù)位塊輸出通道。
(4)RESET_IN塊輸入管道的復(fù)位信號,用于出現(xiàn)錯誤時復(fù)位塊輸入管道。
(5)TX_REQ塊傳輸?shù)恼埱笮盘枴?/p>
(6)TX_C塊傳輸完成的指示信號。
(7)PEER_E告訴對方本地端口是否連接好的指示信號。
在這幾個握手信號的協(xié)調(diào)下,上位機和下位機可以雙向通信。圖2是主機PC A向PC B傳輸數(shù)據(jù)的流程圖。這些底層的細節(jié)問題并不需要控制,由PL-2301的驅(qū)動程序完成。
3、 軟件結(jié)構(gòu)
3.1 教學(xué)機器人軟件結(jié)構(gòu)
EDUROBOT-680-II型教學(xué)機器人控制系統(tǒng)的控制軟件包括下位機的底層控制軟件和上位機的上層控制軟件,它們通過USB端口通信。其軟件結(jié)構(gòu)如圖3所示。
上層控制軟件運行在Windows98平臺上,它為用戶提供與機器人交互的人機接口界面,完成復(fù)雜運動控制的數(shù)據(jù)處理和插補計算。它由人機界面、運算插補、主控、通信四大模塊構(gòu)成。通信模塊能夠?qū)崟r地發(fā)送控制命令給下位機并從下位機獲得反饋信息,同時保證數(shù)據(jù)傳輸?shù)臏蚀_性。
為了提供對USB的支持(為了使底層控制系統(tǒng)有更好的實時性和更緊湊,下一步準備將底層控制系統(tǒng)改用支持USB的Windows CE、VxWorks或嵌入式Linux),底層控制系統(tǒng)目前采用Windows98平臺。底層控制軟件接口收上層控制軟件的控制命令,同時解釋并執(zhí)行控制命令。這通過多線程實現(xiàn)。任務(wù)調(diào)度和管理模塊是底層控制軟件的主線程,它負責(zé)從指令隊列中取出指令并解釋執(zhí)行。主線程執(zhí)行過程會產(chǎn)生一個輔助線程——通信線程。通信線程調(diào)用通信模塊的輸出函數(shù),負責(zé)監(jiān)視USB端口。如果上位機傳來控制命令,則遵循教學(xué)機器人通信協(xié)議接收并存入指令隊列中。
3.2 通信模塊的實現(xiàn)
上位機和下位機控制軟件共用相同的PL-2301客戶驅(qū)動程序、傳輸模塊(由Prolific公司提供)和通信模塊。
PL-2301客戶驅(qū)動程序是典型的WDM驅(qū)動程序。驅(qū)動程序屏蔽了底層的硬件細節(jié)和USB協(xié)議,使上層軟件僅通過驅(qū)動程序接口函數(shù)就可以訪問PL-2301。主要的幾個驅(qū)動程序接口函數(shù)是CreateFile()、WriteFile()、ReadFile()、DeviceIOControl()。
傳輸模塊(Transfer.dll)是驅(qū)動程序的上層模塊,它通過調(diào)用驅(qū)動程序接口函數(shù),實現(xiàn)了兩臺主機通過PL-2301通信的基本通信能力。Transfer.dll會產(chǎn)生一列三個線程:
(1)發(fā)送線程。這個線程對發(fā)送請求進行排隊并按先后順序處理請求。如果出現(xiàn)錯誤,則努力恢復(fù)。
(2)接收線程。這個線程等待來自狀態(tài)線程的消息,如果發(fā)現(xiàn)對方主機將要傳輸數(shù)據(jù),就按照傳輸協(xié)議接收數(shù)據(jù)。接收線程把接收到的數(shù)據(jù)放在接收FIFO緩沖器中,等待上層軟件(Comm.dll)取走。如果有錯誤發(fā)生時,也會努力恢復(fù)。
(3)狀態(tài)線程。這個線程監(jiān)視PL-2301的狀態(tài)信號。如果發(fā)現(xiàn)有任何狀態(tài)改變,它將給相關(guān)線程發(fā)消息或調(diào)用回調(diào)函數(shù)通知上層軟件。
Transfer.dll提供幾個供上層軟件(Comm.dll)調(diào)用的輸出函數(shù):
·USB_InitService()調(diào)用Transfer.dll里的其他輸出函數(shù)之間必須先調(diào)用這個函數(shù)。
·USB_OpenConnect()調(diào)用此函數(shù)獲得PL-2301的句柄。發(fā)送和接收數(shù)據(jù)時要用到這個句柄。
·USB_WriteConnect()調(diào)用此函數(shù)向?qū)Ψ街鳈C發(fā)送指定的數(shù)據(jù)。
·USB_ReadConnect()調(diào)用此函數(shù)從接收FIFO緩沖器中讀取數(shù)據(jù)。
通信模塊(Comm.dll)通過調(diào)用Transfer.dll提供的輸出函數(shù)完成教學(xué)機器人控制命令的發(fā)送和接收。為了協(xié)調(diào)命令的發(fā)送和接收,定義了套控制字,作為上位機與下位機通信時的握手信號(與PL-2301的握手信號沒有聯(lián)系)。上位機發(fā)送數(shù)據(jù)(控制命令或控制字)時,直接調(diào)用USB-WriteConnect()即可。下位機讀取數(shù)據(jù)采取輪詢方式,循環(huán)調(diào)用USB-Read Connect()掃描USB端口,如果有數(shù)據(jù)則接收下來。如果接收到的是指令,則放入指令隊列中,等待任務(wù)管理和調(diào)度線程取走。圖4是上位機發(fā)送一條命令的示意圖。有些命令需要下位機發(fā)送返回值給上位機,如讀機器人狀態(tài)命令status需要下位機發(fā)送返回值給上位機,如讀機器人狀態(tài)命令status需要下位機把機器人狀態(tài)返回給上位機。下位機發(fā)送返回值的過程與上位機發(fā)送命令的過程相似。
USB作為一種新興的計算機外設(shè)接口標準,其技術(shù)特點使不但能作為計算機與一般外設(shè)的接口,也可用于實時通信和控制。本文介紹的用USB實現(xiàn)教學(xué)機器為上下位機的通信,為機器人上下位機的通信提供了一種新穎、方便和可靠的解決方案。隨著USB2.0的推出,其高達480Mbps的傳輸速率可滿足高實時性要求的工業(yè)設(shè)備控制、動態(tài)圖像實時傳輸?shù)龋瑸閁SB在更廣闊領(lǐng)域的應(yīng)用打下了堅實的基礎(chǔ)。
責(zé)任編輯:gt
評論
查看更多