機器人開(kāi)發(fā)工具中的可復用性軟件模塊
機器人開(kāi)發(fā)平臺的進(jìn)展主要集中在如何讓開(kāi)發(fā)人員著(zhù)手工作,但它們也提供更急需的軟件部件重用方法,如從一個(gè)機器人項目到另一個(gè)機器人項目。
要 點(diǎn)
設計者有很多現成可用的機器人開(kāi)發(fā)平臺。
機器人平臺的工具正在逐步成熟,但仍有路要走。
機器人開(kāi)發(fā)環(huán)境使設計者能夠快速完成設計到測試思想的重復。
玩具、游戲和“真實(shí)世界”應用之間的界限正在模糊。原本針對嚴格真實(shí)世界應用的技術(shù)卻不斷在更大規模的電動(dòng)玩具、小器具和計算機游戲市場(chǎng)上找到自己的用途。與此同時(shí),娛樂(lè )設備中的新型工程創(chuàng )新有越來(lái)越多的機會(huì )流入真實(shí)世界的應用。對于很多低價(jià)消費電子產(chǎn)品(如娛樂(lè )裝置),消費市場(chǎng)現在能接受的產(chǎn)品支持壽命周期遠小于那些高價(jià)產(chǎn)品,如汽車(chē)、其它車(chē)輛、工業(yè)與醫療設備,以及大型中心辦公室設備等。這些消費電子產(chǎn)品的較短支持壽命周期允許(甚至要求)用更高級技術(shù)進(jìn)步來(lái)鑒別其工作。
為了制造工業(yè)機器人和半自動(dòng)系統,開(kāi)發(fā)人員使用的技術(shù)正日益跨越工業(yè)技術(shù)與消費、家用技術(shù)的邊界,如電動(dòng)玩具、小器具、游戲機和其它個(gè)人娛樂(lè )設備。不幸的是,與 上世紀80 年代初的 PC 類(lèi)似,今天機器人的軟件兼容性仍有很大的改進(jìn)余地。去年以來(lái)開(kāi)始出現的公開(kāi)式機器人開(kāi)發(fā)平臺試圖解決更快啟動(dòng)機器人設計項目的問(wèn)題。實(shí)現這一目標的部分方法是提供一種開(kāi)發(fā)軟件部件的機制,設計者可將其用于一個(gè)機器人項目的開(kāi)發(fā),然后在其它機器人項目中獲得重用。自從本動(dòng)手項目的第一部分發(fā)表以來(lái)(參考文獻 1),我又多知道了兩個(gè)公開(kāi)的機器人開(kāi)發(fā)平臺,一個(gè)來(lái)自 CoroWare,另一個(gè)則來(lái)自 Gostai(見(jiàn)附文“更多平臺”)。
機器人開(kāi)發(fā)平臺及其不斷成長(cháng)和發(fā)展是實(shí)現今天和未來(lái)項目復雜程度的增減,使其達到某種可控水平以保持設計者生產(chǎn)率的重要基礎。本動(dòng)手項目主要關(guān)注 Lego NXT Mindstorms 平臺與 National Instruments 的 LabView 環(huán)境。我也在微軟的 Robotics Studio 上花了一些時(shí)間。
項目
本項目的硬件清單依據是 Brady Duggan 的一次展示,他是 National Instruments 的一名軟件工程師。Duggan 演示了一個(gè)用于電子“牧羊犬”的非官方參考設計。他使用了別人已在類(lèi)似項目中用過(guò)的硬件配置,其價(jià)值是能為快速啟動(dòng)和運行提供極大的幫助。硬件配置包括National Instruments基于德州儀器公司 TMS320VC33的Speedy-33 DSP模塊,它連接到一塊來(lái)自HiTechnic公司的原型板。該板再連接到Lego NXT控制器,后者控制Lego積木塊簡(jiǎn)單平臺的傳動(dòng)電機(圖 1)。
Speedy-33有兩個(gè)間距約5英寸的話(huà)筒,電路板支持48kHz的話(huà)筒采樣。LabView支持對電路板的直接編程,如同LabView支持的其它硬件部件一樣。Speedy-33用作機器人的耳朵。因為我需要在短時(shí)間內了解有關(guān)聲音的更多信息,因此決定Speedy-33只作為一個(gè)傳感器,然后把數據送給NXT。項目后續內容將包括實(shí)現兩個(gè)單元之間的雙向通信,這樣聲音探測算法可以在判斷聲音信號相對機器人的位置時(shí),混合來(lái)自機器人平臺的信息。
為簡(jiǎn)化項目的復雜性,我選擇了一個(gè)800Hz的聲源,它在整個(gè)測試期間都保持可辨別。選擇這個(gè)頻率的原因是:參考算法的實(shí)驗表明,系統在較高頻率下比低頻有更高的成功率,如440Hz。只尋找一個(gè)音調使 LabView DSP模塊包中的DSP函數更容易使用。實(shí)際上,算法會(huì )將話(huà)筒信號與目標頻率作交叉關(guān)聯(lián),通過(guò)比較各個(gè)話(huà)筒峰值的采樣點(diǎn),確定相對相位差。對于以后再做的項目,系統的終極目標是采用機器人平臺的運動(dòng)反饋,在一個(gè)多噪聲環(huán)境中探測到任意聲音信號的相位差,能檢測出預定的任何信號。為實(shí)現這個(gè)終極目標,機器人平臺必須探測出自己的慣性位置,這樣在平臺旋轉或移動(dòng)時(shí),就可以準確地將運動(dòng)傳送給檢測算法。這種功能需要為機器人平臺增加陀螺和加速度傳感器,如HiTechnic公司的產(chǎn)品。
HiTechnic原型板基本是Speedy-33 接口與 NXT 接口之間的一個(gè)橋梁,這樣,不需要在 NXT 上建立新的代碼就可以實(shí)現兩個(gè)部件的連接。原型板可以使設計者建立自己的傳感器,并更簡(jiǎn)便地將其與 NXT 使用的物理接口與邏輯接口相連接。HiTechnic 板對 NXT 表現為遵循 NXT 傳感器協(xié)議的定制傳感器。對本項目,我使用了六個(gè)數字端口,用于從 Speedy-33 向 NXT 的通信。Speedy-33 有一個(gè)密封的外殼,可支持多種外設的端口。但要用到六個(gè)數字 I/O 端口,我就必須從外殼中取出板子,否則就無(wú)法連接數字 I/O。不過(guò),本項目不必對 HiTechnic 原型板作直接編程。
我喜歡簡(jiǎn)單化和節省時(shí)間,因此實(shí)現了一種從 Speedy-33; 到NXT 控制器的單向通信。我知道建立一種雙向通信方法會(huì )花時(shí)間,并增加對調試階段的需求。Speedy-33 會(huì )在檢測到目標聲音時(shí)報告出聲音的左、右方位。NXT 控制程序必須知道 Speedy-33 是否刷新了記錄,因此我將六個(gè)數字腳中的兩個(gè)用作計數器,其它四個(gè)腳表示從左至右之間的某個(gè)位置,四個(gè)腳可表示聲源的 16 個(gè)位置。這種方法使 Speedy-33 只有在聽(tīng)到目標聲音時(shí)才發(fā)送一個(gè)更新,并且當出現一個(gè)新的聲音位置更新時(shí),機器人控制器負責作出識別。
如 Speedy-33 一樣,我用 LabView 為 NXT 編程。但是,在為它們編程之間存在著(zhù)微妙但卻重要的差異。LabView 并不像 LabView 系列中的那些普通硬件部件一樣正式地支持 NXT。如要用 LabView 建立 NXT 代碼,就必須將程序結構用作 NXT 工具集插件。即使是普通的程序結構(如循環(huán)與比較)也必須來(lái)自插件工具集,而不是普通的位置。這種限制仍允許你打開(kāi)和固定住與 NXT 專(zhuān)用工具集菜單,這樣便于使用,而不會(huì )誤打開(kāi)用于其它目標的工具。
NXT 裝有一只 32 bit ARM (www.arm.com) 處理器,為該系統提供了大量的處理能力。由于 Speedy-33 的檢測算法只有在聽(tīng)到目標聲音時(shí)才會(huì )更新方向信息,因此 NXT 可以在兩次方向更新之間顯示狀態(tài)信息或保持空閑。使用這個(gè)檢測算法時(shí),聲音越接近兩只話(huà)筒的等分位置,就越難以判斷聲音的方向。這種現象的部分原因是聲源到達每只話(huà)筒的時(shí)間差小于采樣速率。對本項目,這種情況是可以接受的。這種現象亦表明,由于機器人一直在調整,聲音的方向也越來(lái)越接近兩只話(huà)筒的中心。因此,隨著(zhù)被檢聲音的方向與兩只話(huà)筒距離的接近,電機的運動(dòng)也應越來(lái)越小。否則,運動(dòng)粗放的機器人會(huì )在兩個(gè)位置之間來(lái)回彈跳。
建立軟件
使用 LabView 開(kāi)發(fā)環(huán)境需要花點(diǎn)時(shí)間適應。我的編程經(jīng)驗主要以基于文字的編碼為主,如使用 C 語(yǔ)音和匯編語(yǔ)言。指導軟件有很大幫助作用,尤其是它們幫我熟悉了工具資源的訪(fǎng)問(wèn)位置和意義。National Instruments 已經(jīng)對 LabView 的開(kāi)放環(huán)境進(jìn)行了 20 多年的改進(jìn),并且增加了很多針對特定領(lǐng)域應用的環(huán)境擴展工具。LabView 的虛擬儀器工具可用于數據采集、顯示與分析,很容易使用,你可以為數據分析與糾錯設定完備的顯示,這是 LabView 環(huán)境的優(yōu)點(diǎn)之一。
在上世紀 90 年代,我曾用過(guò) LabView 的一個(gè)早期版本做過(guò)一個(gè)可調激光控制系統。我那時(shí)用虛擬語(yǔ)言工具做了一些編程工作,但多數還是用 C,因為我發(fā)現很難過(guò)渡到一個(gè)完全虛擬的編程形式。經(jīng)過(guò)對當前項目的仔細思考,我可以說(shuō)明為什么這種過(guò)渡對我這么難。幾年來(lái),我已經(jīng)形成了在代碼“空白”處說(shuō)明含義與設計信息的編碼風(fēng)格。換句話(huà)說(shuō),代碼的意圖、空行的位置,以及長(cháng)指令串或復雜指令串的分行,等等,這些都能給熟悉軟件開(kāi)發(fā)決策方式的讀者提供有價(jià)值的信息。
我從來(lái)沒(méi)有開(kāi)發(fā)過(guò)一種在虛擬編程模式的空白中提供信息的類(lèi)似方法,也不清楚業(yè)內對這種策略的方法,當然我還沒(méi)找過(guò)。
在做這個(gè)項目時(shí),我可以看到開(kāi)發(fā)人員如何使用左右和上下程序流,在空白處表示出含義和其它信息。
使用 LabView 和微軟的 Robotics Studio 這種虛擬編程模型,可以更容易給出有關(guān)并行性的信息,而在文本式編程中要更困難。你可以確定排序結構的位置,這樣就能看到它們可以同時(shí)運行,并且可以更容易看到它們是否在共享某些資源。這兩種環(huán)境都可以混合使用虛擬編程與基于文本的編碼,即將基于文本的代碼封裝為塊,再用于虛擬環(huán)境。Robotics Studio 教程中有一個(gè)例子提出了有關(guān)虛擬編程的一個(gè)擔憂(yōu)。該例表示如何不采用原來(lái)方式而實(shí)現一個(gè)前述實(shí)例,該例原使用了一個(gè)變量和一個(gè)循環(huán)。我猜由于自己缺乏虛擬編程的經(jīng)驗,因此看循環(huán)就與重寫(xiě)代碼一樣,但如只看代碼結構,當循環(huán)不很明顯時(shí)我還是一籌莫展。
我很喜歡用 LabView 環(huán)境仿真機器人,并且,雖然可以將 LabView 與 MathWorks 的 Simulink 環(huán)境鏈接起來(lái),但我未能對本項目嘗試這種方法。另一方面,我可以下載微軟的 Robotics Studio,并立即開(kāi)始一臺機器人的仿真。不幸的是,據微軟高級開(kāi)發(fā)人員 Kyle Johns 說(shuō),仿真環(huán)境為每個(gè)對象提供物理與虛擬模型,但現在缺少對聲音仿真的支持,而這正是項目需要的。公正地說(shuō),微軟的環(huán)境是針對機器人技術(shù),而我只使用來(lái)自現有產(chǎn)品的預定機器人。但是,能將一臺機器人置于某個(gè)環(huán)境中,通過(guò)直觀(guān)的方法看到機器人在環(huán)境中的運行方式與功能,還是很不錯的。我無(wú)法確認要花多少工作量才能設置一個(gè)機器人名單,完成對它的仿真,但很多支持的機器人平臺都存在著(zhù)一些基本配置,可以直接用作啟動(dòng)工作??催@兩個(gè)環(huán)境最終能否相互補充,協(xié)同工作,將會(huì )是件有意思的事。
評論