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