機器人開(kāi)發(fā)工具中的可復用性軟件模塊
用于 Robotics Studio 的虛擬編程工具不像 LabView 環(huán)境那樣成熟,但工具運行良好。當執行某些代碼時(shí),我注意到了 Robotics Studio 中的一個(gè)有趣的問(wèn)題。一個(gè)教程演示了有關(guān)循環(huán)以及將文字轉換為語(yǔ)音的方法。聽(tīng)到系統的計數很有意思。但是,如果我在程序執行時(shí)實(shí)現一個(gè)上下文開(kāi)關(guān),則讓人不安的是程序有時(shí)會(huì )混淆編號順序。換句話(huà)說(shuō),消息傳遞會(huì )表現為后進(jìn)先出,這樣,如果系統在接收一條消息時(shí)碰巧很忙,消息就可能丟失,而在亂序情況下,后面會(huì )死鎖在前面的消息上。這種怪異現象可能是語(yǔ)音合成塊的特性,但卻是一種不希望出現的行為。如果與我使用的代碼相比,亂序執行不太明顯,則這種類(lèi)型的行為可能影響調錯階段。
還有一個(gè)有關(guān) Robotics Studio 開(kāi)發(fā)環(huán)境接口完備性的例子,它出現在我在一個(gè)派生對話(huà)框中間向另一個(gè)程序作上下文切換時(shí)。當對話(huà)框在副窗口中時(shí),有時(shí)候我無(wú)法回到對話(huà)框中,而副窗口也會(huì )鎖死,等候著(zhù)派生窗口的結束。在 Windows XP 中對話(huà)框并不出現在任務(wù)欄上,不過(guò)我終于明白可以用 Alt 和 Tab 鍵手工選擇它。
本項目只是一系列項目中的第一步,我希望能挨個(gè)完成,逐漸增加復雜性,要實(shí)現的終極目標是用一個(gè)立體檢測系統在噪聲環(huán)境中辨別出一個(gè)任意聲音。除了項目的目標與價(jià)值以外,開(kāi)發(fā)平臺的使用也提供了一個(gè)機會(huì ),能夠驗證開(kāi)發(fā)人員現在可以使用的資源,輔助復雜機器人控制系統的開(kāi)發(fā)工作。一種常被表述的目標是:開(kāi)發(fā)人員應能夠設計出一種公共的硬件規范,然后能夠在跨多種機器人平臺上通過(guò)運行時(shí)綁定使用這一規范,而無(wú)需重新設計。
我很高興有現在這些可用產(chǎn)品,也期望今后幾年所有這些開(kāi)發(fā)平臺會(huì )有一系列后續動(dòng)作,它們對于新機器人項目的啟動(dòng),以及使開(kāi)發(fā)人員能夠重用以前項目的軟硬部件都做了很好的工作。我尤其高興的是,有些開(kāi)發(fā)環(huán)境正將這些系統看作一組可以互相交互的分布式系統。對于那些建立包含多機器人協(xié)同工作系統的設計者來(lái)說(shuō),這一特性將成為一個(gè)重要能力。
參考文獻
1. Cravotta, Robert, “Robots on the march,” EDN, Dec 3, 2007, pg 44, www.edn.com/article/CA6505566.
自從本文第一部分印出以來(lái),我知道了另外兩個(gè)機器人開(kāi)發(fā)平臺:CoreWare 的 CoroBot 和 Gostai 的 URBI(通用實(shí)時(shí)行為接口),CoroBot 是一種四輪滑移轉向平臺,帶一只彩色攝像頭、IR 距離傳感器和 1.2 GHz PC 級處理器,運行 Windows XP、Xubuntu Linux,也可以?xún)烧咄瑫r(shí)運行(圖 A)。設計者可以在產(chǎn)品的塑料頂板上鉆孔,作永久性固定,還可以接受多種粘接物(如 Velcro 魔術(shù)貼)作臨時(shí)固定。系統為開(kāi)放式,簡(jiǎn)化了對其多個(gè)部件的訪(fǎng)問(wèn),但將其使用限制于室內環(huán)境。它的重量為 12 lbs,可以接收最多 5 lbs 的負荷。
CoroBot平臺有九種型號,起價(jià)為2799美元,向開(kāi)發(fā)人員供應。對于預裝Windows XP的型號,軟件開(kāi)發(fā)可以采用微軟的Robotics Studio,而對預裝Xubuntu Linux的型號則使用Player。平臺現可選雙靴型和可選四 DOF(自由度)臂并帶一個(gè)抓頭傳感器。帶臂型號有24 個(gè)可用伺服端口,無(wú)臂型號有30個(gè)可用伺服端口?,F在沒(méi)有能夠支持平臺的C 或C++庫,但該公司稱(chēng)它正在評審PlusPack for Microsoft Robotics Studio,以支持未來(lái)的開(kāi)發(fā)。
Gostai正在將自己的產(chǎn)品URBI腳本接口語(yǔ)言定位成一種用于軟件模塊的通用機器人平臺。它在客戶(hù)/服務(wù)器結構上工作,可遠程控制一臺機器人或任何復雜系統。URBI給出了一種通用方法,能夠控制一臺機器人、通過(guò)插入軟件部件而增加功能,并且以一種輕便的方式開(kāi)發(fā)出完全交互的復雜機器人應用。該平臺能用于多種機器人系統、操作系統和編程語(yǔ)言,如C++、Java和 Matlab。
Gostai 將面向對象的 URBI 基于一種原型方案,允許開(kāi)發(fā)人員定義純 URBI 的對象,或者用向核心中插入 C++ 類(lèi)或“UObjects”,為語(yǔ)言增加類(lèi),成為原生的 URBI 類(lèi)。你甚至可以從核心中拔出 UObjects,將其運行為遠程自主應用,從 URBI 引擎獲得 IP(互聯(lián)網(wǎng)協(xié)議)地址作為一個(gè)參數。
URBI 語(yǔ)言中有一個(gè)重要考慮因素,那就是在語(yǔ)義的核心中集成了并行與事件。URBI 語(yǔ)言支持四種類(lèi)型的命令間臨時(shí)約束條件。一是 Task B 必須在 Task A 后面執行。第二個(gè)是 Task B 必須在 Task A 結束時(shí)開(kāi)始,而第一個(gè)約束條件允許兩個(gè)任務(wù)之間有一個(gè)時(shí)間間隙。第三個(gè)約束是 Task A 和 B 必須同時(shí)開(kāi)始,即,如果一個(gè)任務(wù)還未準備好,則另一個(gè)要等待前一個(gè)準備好后才開(kāi)始執行。第四個(gè)約束是 Task B 的開(kāi)始必須同時(shí)或晚于 Task A,但其開(kāi)始不得晚于 Task A 完成前。
由于 URBI 是一種并行語(yǔ)言,它可以用互斥(互斥-排除)技術(shù)處理并行訪(fǎng)問(wèn),保證一個(gè)時(shí)間只有一種代碼能使用某種資源。URBI 支持七個(gè)混合模式,它們設定了系統應如何處理沖突性與同步任務(wù)問(wèn)題。一個(gè)混合模式的例子是加法與混合模式,它將沖突任務(wù)的計算加到或平均到結果值上。隊列模式實(shí)現了一種經(jīng)典的互斥機制。
為提供更好的并行支持,時(shí)間概念成為 URBI 語(yǔ)義中的一部分。例如,URBI 中的一個(gè)簡(jiǎn)單任務(wù)可以使一個(gè)變量在一個(gè)給定時(shí)間里或以某個(gè)給定速度達到一個(gè)值,否則就設為一個(gè)正弦振蕩。這些非瞬時(shí)的任務(wù)可以與其它設定同時(shí)執行。舉例來(lái)說(shuō),考慮任務(wù) neck.val=10 time:450msleg.val= -45 speed:7.5 tail.val=14 sin:4s ampli:45;。這個(gè)任務(wù)使用 "time," "speed," "sin," 和 "ampli" 修改任務(wù)完成的方式。在本例中,"neck.val" 的值將在 450 ms內達到10。其它支持的修飾語(yǔ)有 "phase," "getphase," 和 "smooth."。
URBI 自身能夠加快并行事件的處理速度,因為多個(gè)事件可以并行發(fā)生,并觸發(fā)一些可以并行運行和重疊的代碼。實(shí)際中,對 URBI 中一個(gè)事件作出反應的最簡(jiǎn)單方式是使用 “at” 命令,它看似 “if” 語(yǔ)句,即當檢驗為真時(shí)執行一條命令。不過(guò),與 “if” 不同的是,”at” 命令會(huì )保持在后臺作再次觸發(fā),而并不終止。另一種這類(lèi)工具是 “whenever” 語(yǔ)句,它循環(huán)執行命令,直到檢驗為真。該語(yǔ)句類(lèi)似于 “while” 語(yǔ)句,不同的是當檢驗為假時(shí)它保持在后臺。語(yǔ)言還可以忽略有參數或沒(méi)有參數的事件。
評論