淺談Scratch與Kinect結合與實作方法─讓你的Scratch更具互動性

淺談Scratch與Kinect結合與實作方法─讓你的Scratch更具互動性
佛光大學學習與數位科技學系 許惠美老師

前言

今年年初參加新北市文德國小自由軟體研習活動,經陳國全老師的介紹看到Stephen Howell先生所拍攝之《Scratch and Kinect》(http://vimeo.com/18562642)影片,得知Scratch可以與微軟Xbox 360之體感控制器Kinect做結合,為了想增加Scratch在教學上的互動性,於是就開始進行這方面的研究。

Kinect是什麼?

Kinect乃是微軟推出用以搭配Xbox360之體感搖控器,可將身體動作精準地反映到遊戲中,使用者對於遊戲的參與就不再只是以鍵盤、滑鼠、搖桿、手把等方式─以手來控制,而是可以結合肢體的動作與數位內容進行互動。體感搖控器可以塑造更直覺式的互動形式,讓使用者更容易投入虛擬的情境之中,增加遊戲的擬真性。

體感搖控器的出現讓大家開始思考它在教育上應用的可行性,許多人對於這項科技在教育上的應用感到無比的興奮,例如:《Kinect in Education: The New Technology Focal Point?》(http://www.k12mobilelearning.com/?p=1604),作者就大膽預言未來Kinect將是教室中科技應用的一項重點。由於Kinect在2010年11月才在北美問市,除了在Xbox上的應用外,也開始嘗試與其他軟體做結合。

Kinect原本是搭配Xbox360,目前可以透過一些開放源碼的驅動程式讓Kinect可以在個人電腦上使用。根據Wikipedia (http://en.wikipedia.org/wiki/Kinect)的說明:Kinect於2010年11月問市之初,Adafruit Industries即提供賞金公開徵選Kinect的開放源碼驅動程式,當然這項舉措最初受到微軟的微詞,不過最後微軟認為這項舉措並不構成Kinect被駭的事實,這讓Kinect與個人電腦溝通之驅動程式得以不斷地發展。2010年12月Prime Sense釋出它的開放源碼驅動程式以及具有動作偵測功能的NITE程式,這大大造福了許多想在個人電腦上使用Kinect的使用者。

從Kinect到Scratch

Scratch(http://scratch.mit.edu/)是由麻省理工學院開發的一套程式語言,透過圖形式的介面設計,學習者以拖拉的方式進行遊戲、動畫等程式設計,大大降低程式設計的門檻,Scratch所設計的數位內容可以透過PicoBoard或是LEGO WeDo增加互動性,此外透過Stephen Howell先生的努力,撰寫Kinect與Scratch的中介程式,讓Scratch可以很容易地與Kinect給合,使得Scratch上所設計之教學內容具有高度的互動性。

在Scratch上使用Kinect大致上有三個重要的關鍵,首先是硬體部分的準備,第二是安裝Kinect在電腦上的驅動程式,第三則是使用Scratch與Kinect的中介程式並完成定位設定。

一、硬體部分的準備:需要一個實體的Kinect體感搖控器,並且外加一個Kinect Sensor Power Supply(見圖一),由於Kinect具備獨特的連結埠,需要透過Kinect Sensor Power Supply轉換成USB的接頭,才能夠與電腦做連結。如果是購買Xbox360主機與Kinect之同捆包者,則需另購Kinect 之Kinect Sensor Power Supply以利用USB與電腦連接。

圖一:Kinect Sensor Power Supply(可轉換成USB的接頭)

二、安裝Kinect之驅動程式:由於筆者目前只在Windows下試用,暫時以此作業系統做介紹,這部分之操作方式主要是參考在Youtube上《【MMD kinect Tutorial】OpenNI + Kinect + MikuMikuDance》(http://www.youtube.com/watch?v=Ncm8kv4NnNAKinect)之教學介紹,分成以上五個步驟:
1.下載Kinect 之驅動程式:至https://github.com/avin2/SensorKinect下載zip檔案(avin2-SensorKinect-28738dc),下載後再進行解壓縮。
2.插入Kinect,系統會找不到適合的驅動程式,以手動安裝的方式,在裝置管理員中,設定驅動程式所在的路徑,選擇上述解壓資料夾中PlatformWin32Driver之路徑,系統就會安裝Kinect Motor、Kinect Audio與Kinect Camera之驅動程式。
3.至Open NI網站,下載OpenNI(http://www.openni.org/downloadfiles/openni-binaries/20-latest-unstable),建議選擇安裝最新之開發版本(Development Edition)。
4.使用之前下載的avin2-SensorKinect-28738dc,至Bin資料夾中,安裝SensorKinect-Win-OpenSource32-5.0.1之程式。
5.至Open NI網站,下載NITE(http://www.openni.org/downloadfiles/openni-compliant-middleware-binaries/33-latest-unstable),並加以安裝,安裝的過程需要鍵入序號「0KOIk2JeIBYClPWVnMoRKn5cdY4=」
完成以上步驟之後,建議大家可以從「開始」─>「所有程式」─>「OpenNI」─>「Samples」選擇「NiViewer」加以做測試,等待一會兒,應該可以看到Kinect所投影出來的畫面。

三、使用Scratch與Kinect的中介程式並完成定位設定:
若要在Scratch上使用Kinect需要一個中介程式以及Scratch的測試檔案,這些都可以在Stephen Howell的網站上取得。
1.下載OpenNI2ScratchGUI7.exe(https://docs.google.com/leaf?id=0B18iNT0aRQwMZTE4ZmI5NjAtNmFkYy00YzRhLTk5OTEtYzc4OWMxMjgwOThj&hl=en),這個程式可以將Kinect所取得的關節訊息傳至Scratch,這個程式下載之後即可使用無需安裝。雙擊這個程式之後,會出現以下的螢幕(如圖二),即會開始執行,首先第一步是確認Kinect已經連結至電腦,之後就會開始偵測與感應,使用者就需要站在離Kinect約1-2公尺的距離,讓Kinect進行偵測,在感應的過程中需要注意左手邊欄位的訊息,偵測完成之後就會送出完成訊息,即可以按下「Connect to Scratch」的按鈕,這時就可以開啟Scratch程式。

圖二:OpenNI2ScratchGUI7執行之畫面

2. Scratch測試程式:至Scratch官方網站Stephen Howell個人的專案區(http://scratch.mit.edu/users/SHowell)即可看到三個範例檔案:Kinect Skeleton、Kinect Ball Bounce、Kinect Space Invader,下載這三個程式需要於Scratch官方網站上註冊。
3.開啟Scratch程式,打開以上任何一個檔案,即會出現「遠端感應器連結已啟動」的信息,站在Kinect的感應範圍內,按下綠旗即可開始使用。

Scratch程式的編寫

若要在Scratch上編寫使用Kinect的程式,其方式並不困難,與PicoBoard的使用方式類似,主要是運用「偵測」這個部分的程式(見圖三),如果在遠端偵測器連接的情形下只要在下拉選單,即出現身體各部位關節的偵測值,例如:頭、脖子、肩膀、手肘、手、驅幹、腳等的X、Y、Z軸座標的偵測值(如圖四)。但是由於在撰寫程式時通常並不一定連結Kinect,建議大家可以先將相關的偵測值先複製至程式中以便使用。圖五則是目前OpenNI2ScratchGUI7中介程式傳送至Scratch之偵測值。

圖三:可引用偵測值的程式


圖四:按下偵測值即出現各部份的座標值

圖五:各部位之偵測值

程式撰寫部份,就以Stephen Howell先生之骨架範例檔為例(見圖六),其各部分的座標位置即是去找尋使用者的關節位置訊息,例如左手的部分,如圖七:其程式碼的寫法非常直接,即是將左手之X與Y座標各存成一個變數:l_hand_x與l_hand_y,之後設定左手這個物件不斷地以偵測值改變其位置。

圖六:Kinect Skeleton程式

圖七:左手的程式碼