跳到主要內容

從安裝到使用 Scratch 寫程式控制 Tello


前一篇提到在手機上可以運用 DroneBlocks App,以堆疊積木的方式寫出程式控制 Tello。現在我們把設備換成有 WiFi 的電腦,同樣在電腦上面堆疊出控制 Tello 的積木,用的軟體是 Scratch。

Scratch其實是一個電腦程式的開發平台,它的開發者期望透過這個平台,讓使用者在愉快的環境下透過實際操作(如設計互動故事)去學習程式設計、數學和計算知識。最近大家不斷在談的STEM(Science科學, Technology技術, Engineering工程, Mathematics數學)或STREAM(同STEM,多加一個 Art 藝術)教育,很多也都是利用Scratch來完成的。

在Tello的官網上,Scratch也是官方有文件支持的開發平台。雖然上面只有幾行字,很簡略的告訴你要怎麼樣安裝。不過真的就只要那幾行,就可以用 Scratch 開始控制 Tello。現在就用我的寫法,告訴你要怎麼樣開始吧!


我們先從「官方」的東西開始,大家會比較放心。進到Ryze Technology的Tello產品,點選下載。左方的「文檔與手冊」中會有「Scratch README」,把它點開來看,裡面的內容大致是這個樣子。
  1. 安裝 Scratch 2.0 離線編輯器 (https://scratch.mit.edu/download
  2. 下載並安裝 node.js (https://nodejs.org/
  3. 下載 Tello.js 和 Tello.s2e 兩個檔案(https://dl-cdn.ryzerobotics.com/downloads/tello/20180222/Scratch.zip) ,解開檔案進入資料夾,鍵入 node Tello.js
  4. 打開 Scratch 2.0,按住「Shift」鍵,點選「檔案」選單,「匯入實驗性 HTTP 擴充功能」,選擇資料夾中的 Tello.s2e 檔案。
  5. Tello 的控制介面會出現在 Scratch 的「更多積木」當中。
官方文件寫的很精簡,真的有點太過精簡,下面就用我們的方式來介紹。


Step 1. 安裝 Scratch 2.0 離線編輯器


點選文件中的下載 連結(https://scratch.mit.edu/download),進入 Scratch 2.0 的下載畫面。你會發現,如果跟我一樣是 Mac 的使用者,還得先安裝 Adobe AIR 才能開始用。所以,也只好點選畫面中 Adobe AIR 的連結,先把它給裝好。


Adobe AIR 的安裝過程很簡單,而且都寫中文,照著做就可以了。裝好後要記得回到 Scratch 的下載畫面,在步驟2 「Scratch 離線編輯器」點選「下載」。


下載回來的檔案是個 dmg 檔,打開後裡面只有一個「Install Scratch 2」,雙擊打開安裝程式。

原則上也是照著引導去做而已,沒有什麼難度。裝好後就可以打開 Scratch 離線編輯器囉,感覺跟 DroneBlocks 很像吧!



Step 2. 下載並安裝 Node.js

第二個步驟是下載 Node.js,這個網頁好像沒有做中文的,大家練練英文能力吧!


打開 https://nodejs.org/ 網站後,理論上會跳出你系統相對應的 Node.js 版本。macOS (x64) 目前有兩個版本可以選擇,隨便選一個你喜歡的就可以。


下載回來的是 pkg 的安裝包,點開來照著步驟裝就可以。預設的安裝包應該會安裝 Node.js 和npm 兩個東西,有興趣的再深入去查資料,要不然把它裝好就行了。


Step 3. 下載 Tello.js 和 Tello.s2e

第三個步驟,要從 Ryze Technology 的網站上下載 Tello.js 和 Tello.s2e 兩個檔案(https://dl-cdn.ryzerobotics.com/downloads/tello/20180222/Scratch.zip),下載回來記得把壓縮檔給解開。Tello.js 要用 Node.js 執行,跑在背景和你的 Tello 連線溝通用的。Tello.s2e 則是定義 Scratch 中控制 Tello 的自訂積木。


我們在這個步驟先處理 Tello.js,進到 Scratch 後再處理另一個檔案。在 Mac 的環境底下,進入應用程式找出「終端機」,或英文的「Terminal」。在裡面鍵入 node ,加一個空格,然後把 Tello.js 那個檔案拖進去,最後按下 Enter。

跳出「Tello Scratch Ext running at http://127.0.0.1:8001/」,恭喜你已經成功了!


Step 4. 打開 Scratch 載入 Tello.s2e

現在要來處理 Scratch 自訂積木的檔案,也就是 Tello.s2e。開始使用前我們先把這個 Tello.s2e 改成繁體中文的 TelloCht.s2e。

隨便用一個文字編輯器打開 Tello.s2e,你會發現內容是這個樣子的:


我們把內容改成繁體中文後,會變成這個樣子,把它存成 TelloCht.s2e。


接下來打開 Scratch ,按住 Shift 鍵不放,點選「檔案」選單。要是沒按著 Shift,檔案選單裡面不會出現「匯入實驗性 HTTP 擴充功能」的選單。


選擇「匯入實驗性 HTTP 擴充功能」選單,點選剛剛弄好的 TelloCht.s2e 檔案,回到 Scratch 中選擇「更多積木」,就可以看到「起飛」、「降落」等控制 Tello 的積木了。


Step 5. 執行 Tello 任務

最後這個部分涉及的是 Scratch 的使用方式,這邊只講最簡單的。Scratch需要使用「事件」來驅動,動作一定是從點擊綠旗開始。也就是說,你的程式得先從事件的積木中,把那個「當(綠旗)被點擊」的積木拖出來,再開始接其他的積木。

最簡單的飛行任務就是「起飛」和「降落」,我們就把「起飛」和「降落」兩個積木從「更多積木」中拖出來,接到綠旗那個積木下面。不過要是「起飛」和「降落」兩個命令下得太靠近,起飛的動作還沒完成的話,Tello會直接忽視「降落」這個指令,所以在中間我們塞入另一個「等待10秒」的積木。


最後,確認電腦的 WiFi 連上 Tello ,就可以按下綠旗開始試驗起飛降落是否成功了!


當你熟練一點 Scratch 的使用方式,就可以設計一個用鍵盤導控 Tello 的小程式了。像我自己做的這個,還順帶連動畫的視窗一起做了呢!

不單是鍵盤導控而已,你也可以用 Scratch 來挑戰 DroneBlocks 的任務喔!

留言

熱門文章

差不多食譜實驗:小烤箱烤長茄子? Oven-roasted Long Aubergine?

發佈了「 差不多食譜:小烤箱烤茄子 Oven-roasted Aubergine 」之後,有位朋友在YouTube上留言問說,這個方法也可以用在市場上比較常看到的那種長茄子嗎?當時我只能回答不知道,因為沒試過。現在我有答案了!結果是一半一半!

差不多食譜:香煎南瓜片 Pan-fried Pumpkin

托爺爺的福,在萬聖節那碗「 南瓜盅飯 」後,我還有個老家的南瓜可以用。但要怎麼好好運用這顆南瓜,卻是個不小問題。差不多食譜曾經試過「 醋漬南瓜 」、「 牛奶南瓜 」,還有「 南瓜濃湯 」幾種運用新鮮南瓜的料理,難度雖然都不高,看起來卻都不像平時會出現在餐桌的家常菜。這次我們不妨搞得家常一點,用廚房裡都會有菜刀和煎鍋 (除非你家不開伙) ,來弄個超級家常的「香煎南瓜片」。

上車睡覺、下車尿尿

台灣人對於旅遊的形容,往往是「上車睡覺、下車尿尿」。這是因為行程被極度壓縮,試圖要在最短的時間裡面看最多的東西,於是每個景點都只是蜻蜓點水般匆匆帶過,停留的時間往往等同於排隊上廁所的時間。 這個紫南宮的行程已在「人山人海的紫南宮」當中提到過,只是當初沒寫到為什麼要去參觀紫南宮。事實上,紫南宮最富盛名的是可以借錢的土地公。然而,這點對我們家人而言一點吸引力都沒有,反倒是那號稱七星級的廁所,才是吸引我們前往參拜的重點。或許你會說:「有沒有搞錯,開一個鐘頭的車去上廁所!」沒錯,行程就是這麼規劃的。 在過年期間要到紫南宮上廁所還不是件容易的事。首先,你必須先開車到紫南宮,這大概是最容易的部份。接著,你就得面臨搶停車位窘境。 過年期間,不論哪個景點都是人山人海,免費停車位更是難找。紫南宮雖然提供一大片停車場,在過年期間卻也不敷使用,每台進入停車場的車都虎視眈眈,只要哪邊出現一個車位,起碼就有四、五台車等著。 好不容易停好車,接下來就得穿越那群要去借錢、還錢、拜拜的人群。在那個地方,怎麼前進的都不知道,反正總會有人把你向前推進。 好不容易到達造價上億的廁所,人山人海的盛況依舊。還好這群並非全部都來上廁所,要不然廁所早就被塞爆了。聽老爸老媽說,上次他們來的時候廁所裡面都沒人,還可以在裡面拍照、欣賞噴水。但這次裡面卻塞了不少人,我也不好意思拿著那麼大的一台相機拍人家上廁所的模樣,只能拍拍外觀。 由於是在盛產竹筍的竹山鎮,廁所的外觀也用竹筍作為造型,每個竹筍下方都是一間造價昂貴的廁所。一個令我覺得很貼心的設計在於,廁所不僅僅只是男廁/女廁,還有一個殘障廁所,方便行動不便的人。 雖然招牌寫著「金筍迎客」,但是看起來那個筍子明明就是不鏽鋼的,除非把它理解成金屬。我還特地爬上廁所的樓頂,想說能不能看到些什麼特別的風景。可是過年期間,看到的除了人群還是人群。 上完廁所後,簡單徒手祭拜了提供廁所的土地公,我們又再次穿越那重重的人群。不過,我還是偷偷跑去滾了一下那個象徵「財源滾滾」的金元寶。最後,又踏上那個停車戰場,從容地離去。 我不奢望有賺大錢的機會,只要生活能過得去,偶爾還能買些奢侈品犒賞自己就夠了。不過這個願望似乎也不簡單!