Friday, March 21, 2008

日本娃娃機不用吊的用丟的 小小機器人代勞

最近日本街頭流行一款新型娃娃機,玻璃窗內不是懸吊手臂,而是一隻小小機器人。只要投入硬幣,它就會為您將娃娃扔到洞口。不過機器人偶爾也會跌倒,可別以為這樣就結束了,機器人會自動爬起來,繼續為您服務。

夾娃娃一定得用夾的嗎?那可不一定,日本街頭就出現一種抱娃娃機,只要投入硬幣,玻璃窗內的小機器人就會站起來為您服務。按前進鈕,機器人就會小碎步往目標物移動,再按抓取鍵,機器人就會把娃娃抱起來,只是操縱還是得靠技巧,兩手空空抓不到是常有的事。

小機器人不小心也會跌倒,這時候就GAMEOVER了嗎?可沒這麼快,只要在限定時間內,機器人就會撐著地面爬起來,繼續為您服務。

這款名為ROBOCATCHER的娃娃機,不只受到男生青睞,就連年輕女性也為之瘋狂,即使造價是一般夾娃娃機的3倍,仍然供不應求,天馬行空的創意概念,也為業者開發無限商機。


Tuesday, March 11, 2008

機器人在前進:機器人平台與開發工具

機器人在前進:機器人平台與開發工具

( 3 月 1 日 2008 年)
Robert Cravotta,技術編輯

機 器人終於讓人有了想像的空間。隨著低成本開發平台變得越來越容易取得,人們將機器人用於教育與最終應用的機會也在不斷增加。不過,“機器人”此一用語是一 個要限定範圍的猛獸,因為人們通常會把這些裝置擬人化,把它們看作佣人或寵物。大多數人能在看到機器人時,就把它認出來,但你也會發現,很難找到一種能夠 適用於所有或大多數機器人的說明。例如,iRobot 把自己的Roomba 稱為吸塵機器人(vacuuming robot),但很多人毫無疑問地會稱它是一種機器人(robot)。另一方面,多數人很難把自動式的汽車(autonomous automobile)稱為機器人,例如像是在美國國防部高等研究計畫局(he Defense Advanced Research Projects Agency,DARPA)的Urban Challenge中所跑的那些車子。這些功能近似的系統之間究竟有什麼差異?更重要的是,身為一名設計者,在建立這些類型系統時,他所使用的設計方案與 開發資源有何差異?一個嵌入式自動或半自動子系統的設計(如高檔汽車中的刹車與牽引控制系統),與多數人所認為的機器人設計之間有何差異?
幸運的 是,在機器人社群中,有越來越多的設計資源並不擔心這些差異,並且他們每天都在為更多的人群開啟機器人技術與自動化子系統的天地。這很重要;這些類型的系 統是由一系列由通用型與專業型專家所組成的跨學科團隊之研究成果。機器人技術開發平台為這些團隊提供了一個起點,讓他們不需要成為感測器、機械與電機控制 的專家,就能開始發展自己的專案。由於這些系統的軟體發展工具日益成熟,讓領域中的專家有更大的動力來進行這些系統的規格、設計、測試與部署。
本 次實作計畫的第一部分(編註:本文英文版發表於2007年12月3日的EDN雜誌上)將先簡要地說明計畫的內容,然後再把焦點聚集在我準備用來實現專案的 平台與開發工具。第二部分(編註:英文版原文)則是在2008 年 2 月 7 日出版的EDN雜誌上發表,其中描述了以所選定的硬體與軟體平台實現該專案的相關細節。這次的實作計畫將嘗試達成下列多個目標。第一個目標是為您揭示那些 能讓開發團隊立即開始建立自動化系統的資源,無論它們是嵌入式的或獨立式的,也不管它們是全自動的還是部分自動的。另一個目標是揭示那些支援它們的最新平 台與開發資源;重要的是要清楚地瞭解,這些開發資源的成熟程度,是否(或在多大程度上)處於或超出了早期使用者的水平。
另一個目標是呈現檢測一個 在行動平台上(而不是固定平台)的世界的構想。我看過很多展示,尤其是在視覺檢測方面,設計者將感測器安裝在一個穩固的架子上,以盡力消除在資料擷取期間 發生任何運動的可能性。這種類型的系統似乎都用在計算負載較大的場合,以便為一個牢固、穩定平台所無法擷取到的資料進行補償。在開發自動汽車時,我的團隊 特意在檢測情境中引入了運動(motion),以幫助我們識別和過濾掉感測器的異常情況,並且讓它更容易判別出我們試圖要找的東西。此一計畫是對運動輔助 檢測的靈活性測試之第一次嘗試,運動輔助檢測最終可降低越來越大的計算負載,從而在檢測中獲得更好的資料識別與模式識別結果。為了此一計畫,我嘗試建立一 個雙耳檢測(binaural-sensing)系統,並證明它是一個雙話筒、運動輔助、聲音定位的機器人。換句話說,機器人將嘗試用兩個話筒來相互定 位,並用機器人的能力來協調行動、指示並最終判別出聲源的位置。
此一專案並非試圖要用盡一切力量來找出現有的機器人開發資源,因為這個社群還在不 斷發展之中;相反的,此一專案的目標是找出我為此一計畫所考慮的幾款少數行動機器人平台,及以現有支援它們的開發資源。有關機器人開發資源請見在博客 (blog)上的文章“嵌入式機器人技術”,網址為www.edn.com/071203b1。現在,讓我們研究一下我為此一計畫所準備的平台和開發資 源。
平台
從 1990 年起,iRobot 就一直在提供系列可完成從清潔地板到清除爆炸物等各種工作的各種機器人。該公司使用自己專利的 Aware 機器人智慧系統,以便在各傢俱之間進行導航,以及在廢棄的建築物內搜索。該公司在 2005 年 10 月以後製造的 iRobot Roomba 包含有 iRobot Roomba SCI(serial-command interface,串列指令介面)的電路與軟體,使開發人員能夠控制或修改自己 Roomba 的性能,並可從遠端監控其感測器。Roomba SCI 協議透過一個 miniDIN 連接器的外接串列埠,為 Roomba 提供一控制鏈路。SCI 包含了控制 Roomba 所有致動器(actuator)的命令,如電機、LED 與揚聲器,並要求來自所有系統內部感測器的感測器資料。
2007 年年初,該公司推出了一款 iRobot Create,這是一款預先組裝的行動機器人平台,有 32 個內建的感測器、致動器以及串列介面,起始價格為 129.99 美元(圖 1)。Create 採用 Roomba 的核心技術,並與Roomba 的可充電電池、遙控器和其他附件相容。該平台包括一個開放式載荷倉(payload bay);一個 25 針的擴充埠;以及可以在機器人上安裝的市售感測器、致動器和其他第三方電子部件(如攝影鏡頭、臂和無線連接)的螺紋安裝孔。
使用者可以透過串列連 接,從桌上型電腦下載數位命令的短腳本來對平台進行編程,或將程式載進到命令模組。命令模組中的處理器是一款 20MHz、8位元的Atmel ATMega168 微控制器。WinAVR開放原始碼開發(open-source-development)工具組支援用 C 或 C++ 對命令模組的編程。開發工具組包括一個編輯器、一個編譯器,以及命令模組的下載器(downloader)。開發人員還可以用微軟於 2006 年 11 月推出的Microsoft Robotics Studio來對機器人進行編程。RoboDynamics 的 Roomba DevTools 工具可以使開發人員透過藍牙、USB 或串列介面,從自己的電腦來控制 Roomba 平台。
命令模組手冊包含了有低階的編程 技巧和實例(參考文獻 1)。編程技巧包括盡可能地用 8位元的值(8-bit value)來計算、避免浮點演算法,以及使用整數(integer)和右移位(right shift)來代替除法(division)。這些技巧中所舉的一個例子是對暫存器或埠寫入位元遮罩(bit mask),以清除、啟動和讀取 ADC,因為現在還沒有函數呼叫(function call)的應用編程介面(application-programming interface,API)。另一個技巧則是說明如何用計時器延遲函數來讓按鍵輸入反彈跳(debounce)。執行複雜的自動控制需要相當長的一段學 習曲線,除非 iRobot 為工具集增加一個對該層做抽象的 API 框架,如微軟的 Robotics Studio 那樣。
Segway 提供的是機器人技術行動平台(robotic-mobility platform,RMP),它是以 Segway 的個人輸送機(personal transporter,PT)為基礎;RMP 採用的是耐用型的包裝,以便用於人類尺寸機器人(human-scale-robotic)的應用(圖 2)。Segway RMP 包含了在各種地形緊湊空間內移動沉重負載的配置。Segway RMP 電機(motor)可以連續提供 2 hp 功率,必要時可達 4 至 5 hp 峰值功率,足以帶動一個人體尺寸大小的負載。Segway RMP 有多種型號,包含各種電池與輪胎/車輪的組合,提供最遠 15 英里範圍和 400 lbs 的承載能力。Segway RMP 採用一至四個鎳氫充電電池(nickel-metal-hydride,NiMH)或鋰(鋰離子)電池組。任何能提供 52V 電壓的電源均可為 Segway RMP 供電。你可以將 Segway RMP 接在一個緊湊型氣體產生器(gas generator)上,在使用中為電池充電。
Segway RMP 包括一個板上充電系統,且系統可以透過 USB 或控制器區域網路(controller-area-network,CAN)串列匯流排界面來進行控制。 Segway 表示,USB 電氣介面隱藏著一個 CAN 介面,因為該公司發現,提供 USB 前端大幅縮短了開發人員與平台介接的學習曲線。如果他們願意,開發人員也可以直接在 CAN 級上工作。該公司正在考慮增加其他通信介面,如乙太網路。另外,他們還在考慮改進機械介面,包括增加用於安裝支架的螺孔。有些型號帶有用於客戶檢測設備的 支架和計算硬體,靜態穩定運行的腳輪(caster),或不同 Segway RMP 之間互連的連接點。有些開發人員沒有採用安裝孔和安裝架,而是成功地用工業級 Velcro 來測試和連接其平台的原型部件。
該公司的開發支援包 括使用開放原始碼開發(open-source-development)的工具,並能使用多種由公司支援的演算法,以便管理平台上重量與均衡性的配置。 Segway 與微軟最近宣佈將經由Microsoft Robotics Studio來對該平台提供支援。微軟的 Robotics Studio 是一個端到端的 Windows 環境,支援機器人應用的開發,這些應用是以那些可以提供以.NET為基礎之代表性狀態傳輸技術(representational-state- transfer,REST)服務導向的運轉時間環境的硬體平台為目標,例如 Windows CE 和 Windows 行動設備。運轉時間(runtime)部件支援各種機器人的開發,如仿真機器人;透過與桌上型電腦直接鏈結控制的機器人,如串列埠、USB 或藍牙;以及帶有板載控制處理器的機器人。開發環境亦包括了視覺化創作(visual authoring)與仿真工具。有幾家公司均已正式聲明他們的產品支援微軟 Robotics Studio,這些公司包括 iRobot、Lego 和 Segway(參考文獻 2)。
根據微軟的《Robotics Studio 使用者指南》,運轉時間環境包括了並行與協調運轉時間(concurrency-and-coordination-runtime,CCR)與分散軟體 服務(decentralized-software-services,DSS)部件,而這些部件必須依附在以下的需求集(參考文獻 3)。它必須能夠進行狀態監控,以及應用運轉時間部件之間的互動。它必須能夠在應用運行中發現、建立、終止和重新啟動部件。它必須能夠並行地處理多個感測 器的輸入,並將這些輸入組織成工作任務,而不會讓這些任務之間有無意干擾的風險。它必須能夠透過網路同時處理本地與遠端的自動與受控機器人應用。運轉時間 必須夠輕量(lightweight),從而能在廣泛的環境中執行。應用環境必須為可擴充,並有足夠的靈活性,以適應各種硬體與軟體環境的互動。
CCR 透過一個訊息導向編程的(message-oriented-programming)模型來支援非同步的與並行的操作,該模型可以自動揭示並行硬體與協 定的訊息,而不需要用到人工的線程(manual threading)、鎖定或給出信號(semaphore)。這種方案使設計者能夠建立起更鬆散耦合的軟體模組或部件。任何以.NET 2.0 CLR(Common Language Runtime,公共語言運轉時間)為目標的語言,都可以來處理自足的(self-contained )CCR .NET DLL。微軟在 CCR 上建立了 DSS 運轉時間,且 DSS 並不仰賴微軟 Robotics Studio 中的任何其他部件。它為管理服務提供了一個主控環境,以及一組基礎的服務(infrastructure service),它們可以用來服務的開創、發現、記錄、除錯、監控與保全。DSS 支援一種輕量的、以服務為導向的應用模型,該模型結合了基於傳統 REST Web 的(traditional REST Web-based)架構,以及部分 Web 服務架構。DSS 定義了一種應用模型,它建立在 REST 模型上,透過它們的狀態和對該狀態的一組統一操作而展示服務,但透過增加結構化資料操作、事件通知以及服務組織擴充了超文件傳輸協定(hypertext -transfer protocol,HTTP)應用模型。
DSS 的主要目標是提供服務之間的互通性,不管這些服務是否在相同的結點上運行或是在網路上運行。DSS 用 HTTP 和分散軟體服務協定(Decentralized Software Services Protocol ,DSSP)來當作與服務介接的基礎。基於 DSSP 的羽量級簡單物件存取協定(Decentralized Software Services Protocol,SOAP)支援結構化狀態與事件模型的操作,這改變了結構化狀態的驅動。可以把 DSSP 當作一種狀態驅動的應用模型,對各個服務進行處理與簽署。
微軟虛擬編程語言(Visual Programming Language,VPL)的繪圖編輯開發環境採用一種資料流(data-flow)編程模型,而不是控制流(control-flow)模型。一個 VPL 資料流包括一個連接的動作串列順序(a connected sequence of activities),資料流將其表示為帶輸入和輸出的區塊,可以將它們連接到其他的動作區塊上。動作可以表示為預建構的服務(prebuilt service)、資料流控制、函數或其他代碼模組;動作也可以包含其他動作的組合。VPL 針對初級程式師,但該編程語言也吸引高級程式師用來進行快速原型的開發或代碼開發。
Robotics Studio 仿真(simulation)運轉時間包含了仿真引擎服務、受控物理引擎(managed-physics-engine)控管器(wrapper)、原 生的物理引擎(native-physics-engine)庫,以及與物理引擎介接的部件和在仿真世界中表示硬體與物理物件的渲染引擎。仿真引擎服務負 責實體的渲染,以及物理引擎仿真時間的處理。它跟蹤整個仿真的狀態,為仿真提供一個服務/分佈(service/distributed)前端。受控物理 引擎控管器將使用者從低階物理引擎 API 中抽象出來,為物理仿真提供一個受控介面。原生物理引擎庫透過 Ageia PhysX 技術實現硬體加速,這是透過 Ageia PhysX 技術處理器來支援硬體的加速,該處理器現用於桌上型電腦的 PhysX Accelerator 附加卡。微軟的 Robotics Studio 帶有一些預先定義的實體(entitie),它們表示為仿真硬體的高級介面,隱藏了物理 API 的使用。
開發人員可以選擇只與受控物理引擎 API 互動,而不用任何的視覺化。但為了簡化對仿真代碼的狀態檢查、除錯和持久性,微軟建議開發人員總是使用仿真引擎服務,以及定義關閉(disable)了渲 染的訂製實體。渲染引擎用到了繪圖加速卡的可編程流水線,遵從 DirectX9 的圖元/頂點著色器(pixel/vertex-shader)標準。
Lego 的 Mindstorms NXT 是該公司最新一代機器人技術工具組,它開始於 1998 年商用的 Robotics Invention System;NXT 則在 2006 年 8 月推出。支持這個平台的內建資源、第三方資源和專業級開發工具越來越多,如 National Instruments 用於 Lego 的 LabView 工具組。大量的支持淹沒了最初可能的印象,即 NXT 不過是一個玩具(圖 3)。事實上,Lego 的 NXT 積木方案使該平台具備機械的靈活性,可使它適用於快速的原型製作,以及感測器和運動部件的多種物理配置之探索。
NXT 利用一顆 32位元的ARM7 處理器來為平台提供自動的控制器。基本的系統包括三個有精密控制功能的內建旋轉感測器之伺服電機、一個用於運動檢測的超聲波感測器、一個支援聲音模式識別 與音調識別的聲音感測器、一個檢測顏色和光強度的光感測器、一個觸控感測器,以及支持第三方資源開發與整合的 USB 2.0 與藍牙無線介面。瀏覽 Mindstorms 網站可以獲得豐富的使用者資源與開發資源,包括開放原始碼的 NXT 韌體、軟體及硬體開發包和一個藍牙開發包。
將 LabView 當作 NXT 的開發工具來使用,正好趕上去年 NXT 平台的推出,並且隨著微軟 Robotics Studio 支持平台數量的增加,這些工具元件可能是支援與工具的爆炸性成長之預兆。一方面,這種爆炸性增長將透過較高級別的抽象,為更多開發人員開啟機器人編程平台 的大門。另一方面,它能獲得更高的生產力,並能夠充分利用第三方開發者的工作,完成日益複雜和重要的機器人設計。這些目標的實現將透過一種強健的機制,用 於開發者封裝(encapsulate)、保護和分發機器人的子系統設計。利用LabView 工具組來對 NXT 編程,需要 LabView 7.1、8.0 或 8.20,而為 NXT 軟體建立原生區塊則需要 LabView 7.1。
LabView 繪圖開發環境包括了一個內建的編譯器,也可支援即時的資料獲取與儀器控制,同時還帶有開創控制與測試應用的繪圖展示工具(graphical presentation tool)。它透過一個可以讓結點間資料流動(而不是文字(text)的連續行)的資料流編程模型(data-flow-programming),來確 定代碼的執行順序,從而支援一個通用編程環境的特性,如資料結構、迴圈結構、事件處理以及針對物件的編程。該方案使開發人員能夠建立起捕獲多工或多線程部 件的方塊圖,並可以在有適當硬體情況下,並行地執行多個運算。
開發者可以擴充 LabView 的功能,方法是使用處理軟體優化、資料管理與視覺化,以及對各種硬體目標(包括 FPGA)進行部署的插件(add-on)。其他插件則用於信號處理與分析、自動化測試、影像擷取以及機器視覺,還有控制設計與仿真工業控制。數百個第三 方插件都帶有第三方工具與模型和仿真設計介面的內容,如 MathWorks 的 Simulink 環境。
可擴充性
所有這些平台有一個 共同的主題,那就是對可擴充性的支持,不僅是針對訂製與第三方軟體模組,也是針對硬體介面與子系統。這些平台中的每一款都提供了我對這次實作計畫所期望的 行動性,但我還要用一些軟、硬體來擴充這些平台,增加雙耳檢測功能,以及為回應音頻輸入而進行的引導平台之動作。
與 iRobot Create 和 Lego NXT 不同,Segway RMP 包括了檢測其方向與慣性運動的能力,我認為這是在量產產品中實現聲音定位的基礎。不過,這次的實作計畫是要進行構想的驗證,目的是要看:是否最粗略的運動 控制與立體檢測的結合,也可以讓聲音的定位問題變得更容易處理。另外,在這一點上,對一個原型構想驗證專案而言,硬體部件之間的介面和建立 RMP 軟體控制的長期學習曲線似乎是使用 RMP 所要支付的一個巨大成本。這個問題使 Create 和 NXT 成為了平台候選人。
我最開始的目標 是 iRobot 平台,因為我在一個先前的計畫中購買過一台 Roomba(參考文獻 4),另外,也是因為 Roomba 有在房間內不確定位置的物體之間導航的演算法。挑戰來自於要找到一些可以快速設置的模組,它能收集音頻輸入,發出指令,並接收來自 Roomba 控制器的回應。我為聲音的檢測和高級控制器子系統找到了兩款可能成為計畫的候選人的評估平台。
其中之一是德州儀器公司的 eZ430-RF2500 開發工具,它包括兩個 USB Sstick大小的開發板,支持彼此間的無線連接(圖 4)。我喜歡無線連接,因為很多年來,我都希望把它應用到一項計畫中,並且,它似乎也為一項設計增加了無線功能,從而最終就實現了為系統增加模組,而不必 自己從頭來設計。一片開發板從 USB 連接的主控電腦上獲得電源,另一片板子則連接到一個電池盒,以便獲得電源。該板採用一個 16 MHz、16位元的MSP430F2274 微控制器,它提供充足的處理能力,還有一個 10位元、200k-sample/sec的 ADC,其速度足以擷取音頻輸入。
另一個來自 Silicon Labs 的平台是 C8051F064-EK 評估包,它採用一個 25 MIPS、8位元的C8051F064 微控制器,帶有兩個 16位元、1M-sample/sec 的ADC,可同時從兩個音頻輸入採樣(圖 5)。該評估板可以透過 USB 連接從主機接受電源,並帶有一個 BNC 和前端電路,以調整來自兩個類比輸入的類比信號。但是,為了能同時使用這些板子,我必須為話筒建立硬體介面和軟體驅動,並透過 Roomba 的串列埠通信。
當在研究將 National Instruments 的 LabView 用於 Lego NXT 時,我發現 National Instruments 的一位工程師最近把 NXT 用在一個類似電子“牧羊犬”的驗證應用,它可以根據聽到的聲音來完成一個動作,如向左或向右轉、停止或前進。這個功能不同於完成運動輔助的聲音定位,但瞭 解該計畫的詳情後,我可以將其作為一種參考設計,這樣就能節省此次實作計畫設置的寶貴時間。
我選擇 NXT 系統的另一個原因是,立即可以得到確認能與 NXT 系統介接的恰當模組。將 National Instruments 的 Speedy 33(一片採用德州儀器公司 TMS320VC33 的 DSP 板)與 LabView DSP 模組和一個來自 HiTechnic 的感測器原型板相結合,就得到了一個包含此一專案全部適用硬體的結構。Speedy 33 整合了兩個相距約 5 英寸的話筒,有48 kHz 的採樣,並且還採用了 LabView DSP 模組,為時域與頻域信號處理提供資料獲取與資料分析虛擬儀器庫的存取(圖 6)。HiTechnic 原型板在 Speedy 33 與 NXT 之間提供一個物理鏈路,並且在 NXT 的感測器記憶體模組中提供了一個邏輯映射。
這篇實作計畫文章 的第二部分(編註:英文版原文)會刊登在 2008 年 2 月 7 日出版的EDN雜誌上,將進一步研究使用 NXT 平台和開發資源,以及用運動輔助雙耳採樣進行聲音定位的工作細節。在時間和空間許可的情況下,我還會嘗試使用微軟的 Robotics Studio 模型建立與仿真功能,並分享自己的經驗。

作者簡介
有興趣的讀者可透過以下的方式與技術編輯 Robert Cravotta聯絡。電話: 1-661-296-5096 ;電子郵件信箱: rcravotta@edn.com.。

參考文獻
1. iRobot Command Module Owner’s Manual, www.irobot.com/filelibrary/create/Command%20Module%20Manual_v2.pdf.
2. “Microsoft Robotics Studio Partners,” http://msdn2.microsoft.com/en-us/robotics/bb383566.aspx.
3. Microsoft Robotics Studio User Guide, http://msdn2.microsoft.com/en-us/library/bb482024.aspx.
4. Cravotta, Robert, “Rummage through a Roomba: Sensor-packed vacuum robot attracts hacks,” EDN, March 15, 2007, pg 32, www.edn.com/article/CA6421379.

圖 1 機器人製造商 iRobot 用 Create 建造了公司的 Roomba 吸塵機器人,可供教育者、愛好者和開發人員添加到自己的軟硬體中,以控制平台。
圖 2 Segway 的 RMP(機器人行動平台)是以該公司的個人運輸產品為基礎,現有多種配置,可支援不同的負載與地形場合。
圖 3 National Instruments 提供一種版本的 LabView來支援 Lego Mindstorm NXT 的開發。
圖 4 德州儀器公司的 eZ430-RF2500 發展工具是擴充板候選人之一,部分原因是因為它採用了模組化的無線通信方案。
圖 5 Silicon Labs 的 C8051F064EK 評估套件是擴充板候選人之一,部分原因是因為它使用了雙 ADC,這可以同時從兩個話筒進行採樣。
圖 6 National Instruments 的 Speedy 33 信號處理模組帶有兩個內建話筒和驅動器,以及處理採樣資料的虛擬儀器。

Click here for Illustrations:


Figure 1, Figure 2, Figure 3, Figure 4, Figure 5, Figure 6