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