400 likes | 874 Views
國立台中科技大學資訊工程學系 實務專題報告. NXT 與手機應用 Smartphone Application for NXT Direct control. 指導教授: 陳世穎 老師 鄭玄宜 老師 作 者: 1497k045 楊濬暠 1499k030 陳冠志 1499k018 柯樂濬. 目錄. 摘要 第一章 環境建置 1.1 圖解環境建置流程 1.2 NXT 韌體 1.3 Android 開發工具 1.4 籃牙開發導覽 第二章 遙控方式講解 2 .1 主從式架構 ( Master&Slave )
E N D
國立台中科技大學資訊工程學系實務專題報告 NXT 與手機應用 Smartphone Application for NXT Direct control • 指導教授:陳世穎 老師 鄭玄宜 老師 • 作 者:1497k045楊濬暠 1499k030陳冠志 1499k018柯樂濬
目錄 摘要 第一章 環境建置 1.1圖解環境建置流程 1.2 NXT韌體 1.3 Android開發工具 1.4 籃牙開發導覽 第二章 遙控方式講解 2.1 主從式架構(Master&Slave) 2.2 直接控制(Direct control) 第三章 實作專案 BTtest 3.1 功能展示 3.2 籃牙連線 3.3 傳送指令 3.4 機器人控制 3.5 Menu列表 第四章 專題進展規劃 結語 銘謝 參考文獻
摘要 本專題為智慧型手機遙控LEGO NXT方式的專題,探討使用手機遙控NXT機器人的方式。 我們會介紹普遍使用的主從式架構概念,以及本專題所使用的手機直接控制方式。在Mindstorms公佈的藍芽開發導引裡面有詳細解說可以已無線通訊傳送特定的指令碼用來對NXT下命令,這些命令包括揚聲器的動作、讀取電池的電量、感應器的操作、馬達的轉動等等,概括了九成以上的NXT動作。 這次的目的便是開發出只有Android端便可以動作的搖控程式。最後將對兩種遙控方式的成效做討論。
第一章環境建置 本章節用於介紹整個開發環境的構成,其實android與NXT都有許多配套的開發工具,可看你所熟悉的程式語言來選擇。我們JAVA語言為主,選用的是lejos韌體、eclipse Android開發套件(ADT)。 須具備平台: 建置流程:
1.2NXT韌體 http://lejos.sourceforge.net/ 為了讓NXT主機能運作JAVA程式語言,我們必須將NXT的韌體改為lejos,而不是去官方作升級。 首先我們到lejos的官往下載韌體,下載時須注意你的機器人版本來選擇下載的韌體,本專題使用NXT故我們下載第二個NXT Brick。
接著我們來到lejos下載頁面,官網會偵測你使用的系統來幫你進入下載頁面,這裡我們只需要選擇版本即可。如無特殊需求,直接點選上面的最新版本就好了。接著我們來到lejos下載頁面,官網會偵測你使用的系統來幫你進入下載頁面,這裡我們只需要選擇版本即可。如無特殊需求,直接點選上面的最新版本就好了。
雙擊下載回來的Lejos安裝檔,照程序安裝即可。安裝完成後將NXT主機連接電腦進行韌體更新。 雙擊下載回來的Lejos安裝檔,照程序安裝即可。安裝完成後將NXT主機連接電腦進行韌體更新。 • *安裝前請確認電腦內已經安裝了JAVA與JDK套件,不然能會報錯。
1.3Android開發工具http://developer.android.com/sdk/index.html1.3Android開發工具http://developer.android.com/sdk/index.html • GOOGLE搜尋Android SDK便可到上述網址,點擊圖中的Download the SDK藍色按鈕便可以抓到我們需要的Android程式開發環境Eclipse。 • 解壓縮後看到三個檔案,Eclipse是我們開發程式的環境,SDK是他的主要套件包,SDK Manger可以幫助你更新開發工具與模擬器版本。
一般來說,這邊還有一個動作是必須開啟Eclipse來設定SDK路徑才能開始寫程式,但我們這次所下載的是整合好的開發環境,所以路徑已經設定好了。一般來說,這邊還有一個動作是必須開啟Eclipse來設定SDK路徑才能開始寫程式,但我們這次所下載的是整合好的開發環境,所以路徑已經設定好了。 • 若有需要的話,請點選工具列的Window->Preferences->Android 設定路徑。
打開SDK Menneger,我們需要將兩個東西作更新。一個是SDK Tools,它包含了開發食用到的許多功能;另一個是更新模擬器版本到最新版,或是你的手機的版本,這樣我們才能撰寫該版本的程式。 • 更新會花上很長一段時間,請耐心等候。
1.4籃牙開發導覽 • 這邊是Lego官方所發布的籃牙開發導覽,裡面是4份PDF的說明書。內容提到了關於如何使用籃牙遙控NXT以及NXT內部的行動指令。 • http://www.lego.com/en-us/mindstorms/?domainredir=mindstorms.lego.com • Download -> Download Archive ->最右邊-> Bluetooth Developer Kit • 先到mind storms官網,點選Download。
下方會出現選單可以給你選擇,我們所需要的東西在最右邊。下方會出現選單可以給你選擇,我們所需要的東西在最右邊。 • 請點選圖中的右箭頭來找到我們要下載的類別,NXT。
點選左下角的Bluetooth Developer Kit後,上方的FLASH便會改成下載模式,請點選右邊的Download 下載。
第二章 NXT籃芽遙控導覽 • 2.1主從式架構(Master&Slave) 現行普遍使用的LEGO遙控方式是在NXT端事先編輯好我們想要的動作,透過籃牙通訊配對傳送簡單的字串給NXT,讓其根據接收到的字串作出我們事先編輯的動作。 以手機遙控NXT為例,手機端編寫控制介面,將每個按鈕做編號,按下按鈕後傳送要求;NXT端設計了一個迴圈來接受android的指令(如圖1-1),接到來自於android的要求時做出對應的動作。兩邊撰寫完後使用籃牙連接起來,做到多采多樣的手機NXT遙控。
2.2 Direct control 我們可以在legomindstorms官網找到籃牙開發套件(詳情請參閱2.4籃牙開發套件),而套件內提供了NXT內建的控制指令,可以讓我們使用籃牙傳送這些控制指令來操控機器人,不必經過NXT端的SLAVE程式。
在列出指令前,我們必須先解釋一下Direct Commend指令的封包架構。 • 最開始的兩個封包顯示這個指令的長度,封包3則是指令的類別、Byte 4 開始才是下命令的指令所在處。
第三章 Direct control實作專案 Bttest • 3.1功能展示 • 程式一開始進入藍芽通訊畫面,若無開啟藍芽會要求使用者打開。 • 藍芽開啟後點擊待機畫面或是使用MENU功能表可以進行配對通訊。
public ConnectThread 負責與裝置之間的連線, 取得,解開回傳的bundle獲 取連線裝置的MAC位置、主 機名稱等資訊。 UUID NXT使用的UUID。想對NXT進 行藍芽連線的話,就得使用 這個UUID。
public ConnectedThread 連線後所使用的Thread。 若將兩個工作都寫在同一個 執行緒裡會發生卡死的狀況 ,因此連線後的工作與連線 中的工作分兩個不同的執行 緒來完成。
Public booleanWriteb 使用Try&Catch的方式做寫入命 令,避免傳輸失敗卡住的情況。
3.3 傳送指令 Public static byte[]Beeptest NXT自帶的蜂鳴器。 Byte 3 為指令類型,蜂鳴器使用 0x03。 • Byte 4~ Byte 5 • 蜂鳴器得音域,單位為Hz • Byte 6 • 持續時間
Public static [] Movetest 馬達控制,通常用於讓機器 人行走。 Byte 3 為指令類型,馬達使 用0x04。 Byte 4 馬達所在的PORT Byte 5 要馬達運作的馬力 Byte 7 馬達運作模式
感應器 (SENSOR) 使用Android 直接控制想要抓取感應器的值需要有三個步驟,設定感應器(Setinput)、格式化(Lswrite)、讀取感應器數值(Lsread)三樣。 Public static [] setinputmode Byte 3為setinputmode指令類型,使用代碼為0x05。 Byte 4 所在的PORT。此指令用於設定輸入口,這邊我們拿來設置感應器。 Byte 5sensor type,連接此口的感應器工作類型。為使用接下來的兩個指令, 這邊設為Lowspeed_9V。 Byte 6sensor mode,感應器工作模式。布林代數(是非運用)、16進制等等
Public static [] Lswrite Public static [] Lsread Lswrite命令用於格式化NXT感應器傳進來的值,Lsread命令才能讀取到可用的值。需特別注意的是這兩個命令有指令長度的問題,最長不能超過每個命令16Bytes的限制。
Menu功能 最一開始用來作開始連線的按鈕。後來為了測試藍芽連線狀況,將連線方式改成點擊螢幕即可連線,這個部分用在Debug做交叉比對。
第四章專題進展規劃 • 進度流程圖
問題與解決方法 • 此次專題碰到最後的麻煩便是美工。因為我們都是工科的學生,實在沒有藝術細胞也不常接觸廣告設計軟體,報告所用的圖或是程式裡的圖片都是用小畫家一筆一筆拉出來的,非常土法煉鋼。有些地方若能使用美工圖片也可以讓程式寫得簡單點,報告跟成品也可以更活潑生動。 下次有機會進行研究開發時,尋找有美術背景的伙伴應會是我們的優先事項。 • 開發這個程式還有一個麻煩是,這項開發工作很吃ANDROID技術。指令傳輸是一個固定的流程,不能做更動。若有需要其他計算或是取值都要另外寫副程式來做動作。但最麻煩的莫過於傳輸指令有錯誤的可能。即使這樣的現象不常發生,但以遙控程式來說,會有操作不穩定的現象都會帶給使用者不好的使用觀感。 • 在這個專題裡我們達成了用手機單向命令機器人的課題,但這樣就沒有了主從式架構的優點。主從式架構雖然維護起來不那麼容易、修改時也需要兩邊做改動,但可以透過減少傳輸量讓傳輸錯誤的情況減少達到穩定的通訊這個目的。
結語 • 學生覺得,就現今科技發展的來看,一個優秀的網路傳輸架構必須要有傳輸穩定、不常有傳輸錯誤、傳輸錯誤時須有辦法補救等特點,好確保遙控的精準度。就以上考量來說選擇傳統的主從式架構是最適合的方式。 • 我們在這次的專題學習到了如何思考為使用者需要的功能選擇適當配置的方法。因此在這結語,我想利用我們學到的這個東西為Direct Commend 思考一個可以讓其發展所長的計劃,將手機直接安裝於樂高機器人上面。 • 其實手機裡面感應器是可以應用在機器人上面的,多樣化的感應器讓智慧手機做到許多便利的功能,同時也啟蒙了行動裝置開發人員的靈感。不過手機感應器畢竟是設計給手機使用的東西,所以若直接拿手機的感應器機器人讓機器人使用想必會覺得功能不足,還不如究其需要量身打造或添購一個適合的感應器零件。
因此我們可以換個角度思考,將手機安裝在機器人身上,改用手機感應器來補足機器人配套零件得不足之處。這有很多的方向可以嘗試,譬如說使用陀螺儀來做雙足步行機器人的平衡維持、使用加速度感應器與機器人的超音波感應器製做雷達、使用手機的光感應器偵測明亮度來調節機器人讀取顏色的靈敏度等等。因此我們可以換個角度思考,將手機安裝在機器人身上,改用手機感應器來補足機器人配套零件得不足之處。這有很多的方向可以嘗試,譬如說使用陀螺儀來做雙足步行機器人的平衡維持、使用加速度感應器與機器人的超音波感應器製做雷達、使用手機的光感應器偵測明亮度來調節機器人讀取顏色的靈敏度等等。 • 用兩部手機、一台NXT透過藍芽的多方傳輸,可以在機器人身上裝備一台手機,再用另一隻手機或電腦進行遙控。裝在機器人身上的手機除了用感應器輔助機器人的行動以外,還可以傳輸資料回遙控端的電腦,這樣或許可以作出一台小型的無線偵查機器人,接下來我們將會進行這個讓人樂此不疲得新課題。
銘謝 • 於此特別感謝 陳世穎 老師鄭玄宜 老師,以及專題中為我們提供過諸多協助的師長,也感謝為我們辦理手續出借設備的學長。NXT機器人是我們過去在學習電腦相關科目時不曾接觸過的領域,能在這個領域進行一年的研究全是仰賴師長的悉心指導與學長們在技術上的指教。 • 我們也對在這個領域進行研究已久且熱心公開研究資料的各位前輩獻上謝意,有許多難關若是沒有前輩們放在網路上的討論資料只靠我們自己是無法解決的。
參考文獻 • 感謝各位先進提供寶貴的研究資料,這邊列出本專題有參考請益的部分 Android / NXT 機器人大戰:智慧型手機控制機器人 LEGO_MINDSTORMS_NXT_Direct_commands
此部分列出本專題有使用到參考圖片的來源。 http://zh.wikipedia.org/wiki/%E4%B8%AA%E4%BA%BA%E7%94%B5%E8%84%91 http://wiki.nxtcrypto.org/wiki/Main_Page http://www.sony.com.tw/