ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098chpi5442034-001.pdf · nxt....

63
中 華 大 學 碩 士 論 文 利用 Matlab RWTH 工具箱設計解魔術方塊機 器人 Design of a Rubik’s Cube Solver Robot using Matlab RWTH toolbox 別: 電機工程學系碩士班 學號姓名: M09701024 鮑柏年 指導教授: 黃 啟 光 博士 國 九十九 年 八 月

Upload: others

Post on 28-Oct-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

中 華 大 學

碩 士 論 文

利用 Matlab RWTH 工具箱設計解魔術方塊機

器人

Design of a Rubikrsquos Cube Solver Robot using

Matlab RWTH toolbox

系 所 別 電機工程學系碩士班

學號姓名 M09701024 鮑柏年

指導教授 黃 啟 光 博士

中 華 民 國 九十九 年 八 月

i

摘要摘要摘要摘要

智慧型機器人結合了電子機械自動化與人工智慧並且廣泛的應用於工

業以及服務業和娛樂用途是近年來備受矚目的產業之一在此本論文以 PC

為基礎設計一解魔術方塊機器人並利用樂高積木的組裝快速與低成本的特性架

設所需的實驗機構在論文中透過 MATLAB 的影像擷取與影像處理取得魔術

方塊的六面色值並帶入魔術方塊解題器中解題最後將解題資訊轉換成馬達控

制訊號進行魔術方塊的轉正動作整體的實驗過程結合了程式設計與運用以及

硬體設備的應用

關鍵字關鍵字關鍵字關鍵字智慧型機器人智慧型機器人智慧型機器人智慧型機器人魔術方塊魔術方塊魔術方塊魔術方塊影像處理影像處理影像處理影像處理

ii

Abstract

Robotics industry a technology integration and high skill value-added industries

is a combination of mechanical automation electrical electronics information

software communications and creative content related to technology In this thesis a

robot for a Rubiks cube game is developed based on Matlab and LEGO mindstorms

NXT In the Matlab part a CCD Web camber is used to obtain the color information

of the real-time Rubiks cube though image acquisition toolbox and image processing

toolbox And a Rubiks cube solver is used to obtain the solve actions In the LEGO

mindstorms NXT part a robotrsquos arm used the DC servomotor to get the action form

the Rubiks cube solver From the experimental results the favorable results can be

achieved by the proposed robot setup

Keyword intelligent robot Rubiks cube image processing

iii

致謝致謝致謝致謝

在研究所兩年的求學生涯中承蒙指導教授黃啟光博士在學業上及研究方面

給予悉心的指導與鼓勵以及許駿飛教授的諄諄教誨與指點迷津帶領我走向更

深的領域探索以往未曾想過的問題學習過程中老師總是不厭其煩的教導

從最基本的一步一步向上累積同時在待人處事人生規劃方面亦給予寶貴的意

見讓我對生涯規劃以及研究態度更加積極謹此致上由衷的謝意其次要感謝

實驗室的許多學長同學以及學弟的幫忙指導與精神上的鼓勵其中特別感謝同

學沈漢賢在數學以及程式方面給予的寶貴意見僅將此篇論文獻給關心我鼓勵我

的人在我遇到難題困惑沮喪時默默支持我的人深深的感謝他們使我得以完成

此論文願與他們分享此榮耀

鮑柏年 謹識於中華大學

2010 年 8 月

iv

目錄目錄目錄目錄

摘要 i

Abstract ii

致謝 iii

目錄 iv

圖目錄 v

表目錄 vii

第一章 序論 錯誤錯誤錯誤錯誤 尚未定義書籤尚未定義書籤尚未定義書籤尚未定義書籤

1-1 智慧型機器人介紹 1

1-2 樂高機器人介紹 6

1-3 研究背景與目的 9

第二章 機器平台介紹 13

2-1 整體架構 13

2-2 NXT 控制盒 14

2-3 LEGO伺服馬達 16

2-4 BricxCC 與 NXC介紹 18

2-5 MATLAB 影像擷取與處理工具箱 21

2-6 RWTH Toolbox介紹 26

第三章 解魔術方塊機器人設計 30

3-1 影像處理與結果 30

3-2 魔術方塊解題與結果 36

第四章 結論與未來研究 52

4-1 結論 52

4-2 未來研究 53

參考文獻 54

v

圖目錄圖目錄圖目錄圖目錄

圖 1-1 日本本田公司所發表之 Asimo 機器人 2

圖 1-2 具有人工智慧的 Probo 3

圖 1-3 具有療癒功能的 Paro 3

圖 1-4 導覽 機器人「小美」 4

圖 1-5 室內多功能服務型機器人 5

圖 1-6 QB 遠端臨場機器人 6

圖 1-7 樂高 Mindstorms NXT 機器人 7

圖 1-8 NXT-G 使用介面 8

圖 1-9 各種多階與非標準魔術方塊 10

圖 1-10 以 PC 為基礎之解魔術方塊機器人 10

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人 10

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人 11

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人 11

圖 2-1 解魔術方塊機器人示意圖 13

圖 2-2 NXT 控制盒 14

圖 2-3 LEGO伺服馬達解析圖 16

圖 2-4 光學編碼器 AB相訊號 17

圖 2-5 BricxCC 程式開發環境 19

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器) 20

圖 2-7 影像擷取圖樣 23

圖 2-8 影像處理樣本 25

圖 2-9 PC 與 NXT連線圖 26

圖 2-10 ECRobot NXT 模組方塊 28

vi

圖 2-11 ECRobot simulink環境 29

圖 3-1 魔術方塊六面影像 30

圖 3-2 由圖 3-1 轉換的灰階圖案 31

圖 3-3 由圖 3-2 轉換的二元化影像 32

圖 3-4 各色面展開圖 35

圖 3-5 LBL 基本解法流程圖 37

圖 3-6 解題器模擬圖 38

圖 3-7 魔術方塊的 6個面色值代入解題器中 39

圖 3-8 解題器解題過程 41

圖 3-9 方塊六面位置定義 42

圖 3-10 機器人的翻轉方塊與旋轉方塊 42

vii

表目錄表目錄表目錄表目錄

表 2-1 MATLAB 影像轉換 24

表 3-1 魔術方塊 6 色取樣 33

表 3-2 白色面九格方塊像素值 34

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 2: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

i

摘要摘要摘要摘要

智慧型機器人結合了電子機械自動化與人工智慧並且廣泛的應用於工

業以及服務業和娛樂用途是近年來備受矚目的產業之一在此本論文以 PC

為基礎設計一解魔術方塊機器人並利用樂高積木的組裝快速與低成本的特性架

設所需的實驗機構在論文中透過 MATLAB 的影像擷取與影像處理取得魔術

方塊的六面色值並帶入魔術方塊解題器中解題最後將解題資訊轉換成馬達控

制訊號進行魔術方塊的轉正動作整體的實驗過程結合了程式設計與運用以及

硬體設備的應用

關鍵字關鍵字關鍵字關鍵字智慧型機器人智慧型機器人智慧型機器人智慧型機器人魔術方塊魔術方塊魔術方塊魔術方塊影像處理影像處理影像處理影像處理

ii

Abstract

Robotics industry a technology integration and high skill value-added industries

is a combination of mechanical automation electrical electronics information

software communications and creative content related to technology In this thesis a

robot for a Rubiks cube game is developed based on Matlab and LEGO mindstorms

NXT In the Matlab part a CCD Web camber is used to obtain the color information

of the real-time Rubiks cube though image acquisition toolbox and image processing

toolbox And a Rubiks cube solver is used to obtain the solve actions In the LEGO

mindstorms NXT part a robotrsquos arm used the DC servomotor to get the action form

the Rubiks cube solver From the experimental results the favorable results can be

achieved by the proposed robot setup

Keyword intelligent robot Rubiks cube image processing

iii

致謝致謝致謝致謝

在研究所兩年的求學生涯中承蒙指導教授黃啟光博士在學業上及研究方面

給予悉心的指導與鼓勵以及許駿飛教授的諄諄教誨與指點迷津帶領我走向更

深的領域探索以往未曾想過的問題學習過程中老師總是不厭其煩的教導

從最基本的一步一步向上累積同時在待人處事人生規劃方面亦給予寶貴的意

見讓我對生涯規劃以及研究態度更加積極謹此致上由衷的謝意其次要感謝

實驗室的許多學長同學以及學弟的幫忙指導與精神上的鼓勵其中特別感謝同

學沈漢賢在數學以及程式方面給予的寶貴意見僅將此篇論文獻給關心我鼓勵我

的人在我遇到難題困惑沮喪時默默支持我的人深深的感謝他們使我得以完成

此論文願與他們分享此榮耀

鮑柏年 謹識於中華大學

2010 年 8 月

iv

目錄目錄目錄目錄

摘要 i

Abstract ii

致謝 iii

目錄 iv

圖目錄 v

表目錄 vii

第一章 序論 錯誤錯誤錯誤錯誤 尚未定義書籤尚未定義書籤尚未定義書籤尚未定義書籤

1-1 智慧型機器人介紹 1

1-2 樂高機器人介紹 6

1-3 研究背景與目的 9

第二章 機器平台介紹 13

2-1 整體架構 13

2-2 NXT 控制盒 14

2-3 LEGO伺服馬達 16

2-4 BricxCC 與 NXC介紹 18

2-5 MATLAB 影像擷取與處理工具箱 21

2-6 RWTH Toolbox介紹 26

第三章 解魔術方塊機器人設計 30

3-1 影像處理與結果 30

3-2 魔術方塊解題與結果 36

第四章 結論與未來研究 52

4-1 結論 52

4-2 未來研究 53

參考文獻 54

v

圖目錄圖目錄圖目錄圖目錄

圖 1-1 日本本田公司所發表之 Asimo 機器人 2

圖 1-2 具有人工智慧的 Probo 3

圖 1-3 具有療癒功能的 Paro 3

圖 1-4 導覽 機器人「小美」 4

圖 1-5 室內多功能服務型機器人 5

圖 1-6 QB 遠端臨場機器人 6

圖 1-7 樂高 Mindstorms NXT 機器人 7

圖 1-8 NXT-G 使用介面 8

圖 1-9 各種多階與非標準魔術方塊 10

圖 1-10 以 PC 為基礎之解魔術方塊機器人 10

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人 10

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人 11

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人 11

圖 2-1 解魔術方塊機器人示意圖 13

圖 2-2 NXT 控制盒 14

圖 2-3 LEGO伺服馬達解析圖 16

圖 2-4 光學編碼器 AB相訊號 17

圖 2-5 BricxCC 程式開發環境 19

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器) 20

圖 2-7 影像擷取圖樣 23

圖 2-8 影像處理樣本 25

圖 2-9 PC 與 NXT連線圖 26

圖 2-10 ECRobot NXT 模組方塊 28

vi

圖 2-11 ECRobot simulink環境 29

圖 3-1 魔術方塊六面影像 30

圖 3-2 由圖 3-1 轉換的灰階圖案 31

圖 3-3 由圖 3-2 轉換的二元化影像 32

圖 3-4 各色面展開圖 35

圖 3-5 LBL 基本解法流程圖 37

圖 3-6 解題器模擬圖 38

圖 3-7 魔術方塊的 6個面色值代入解題器中 39

圖 3-8 解題器解題過程 41

圖 3-9 方塊六面位置定義 42

圖 3-10 機器人的翻轉方塊與旋轉方塊 42

vii

表目錄表目錄表目錄表目錄

表 2-1 MATLAB 影像轉換 24

表 3-1 魔術方塊 6 色取樣 33

表 3-2 白色面九格方塊像素值 34

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 3: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

ii

Abstract

Robotics industry a technology integration and high skill value-added industries

is a combination of mechanical automation electrical electronics information

software communications and creative content related to technology In this thesis a

robot for a Rubiks cube game is developed based on Matlab and LEGO mindstorms

NXT In the Matlab part a CCD Web camber is used to obtain the color information

of the real-time Rubiks cube though image acquisition toolbox and image processing

toolbox And a Rubiks cube solver is used to obtain the solve actions In the LEGO

mindstorms NXT part a robotrsquos arm used the DC servomotor to get the action form

the Rubiks cube solver From the experimental results the favorable results can be

achieved by the proposed robot setup

Keyword intelligent robot Rubiks cube image processing

iii

致謝致謝致謝致謝

在研究所兩年的求學生涯中承蒙指導教授黃啟光博士在學業上及研究方面

給予悉心的指導與鼓勵以及許駿飛教授的諄諄教誨與指點迷津帶領我走向更

深的領域探索以往未曾想過的問題學習過程中老師總是不厭其煩的教導

從最基本的一步一步向上累積同時在待人處事人生規劃方面亦給予寶貴的意

見讓我對生涯規劃以及研究態度更加積極謹此致上由衷的謝意其次要感謝

實驗室的許多學長同學以及學弟的幫忙指導與精神上的鼓勵其中特別感謝同

學沈漢賢在數學以及程式方面給予的寶貴意見僅將此篇論文獻給關心我鼓勵我

的人在我遇到難題困惑沮喪時默默支持我的人深深的感謝他們使我得以完成

此論文願與他們分享此榮耀

鮑柏年 謹識於中華大學

2010 年 8 月

iv

目錄目錄目錄目錄

摘要 i

Abstract ii

致謝 iii

目錄 iv

圖目錄 v

表目錄 vii

第一章 序論 錯誤錯誤錯誤錯誤 尚未定義書籤尚未定義書籤尚未定義書籤尚未定義書籤

1-1 智慧型機器人介紹 1

1-2 樂高機器人介紹 6

1-3 研究背景與目的 9

第二章 機器平台介紹 13

2-1 整體架構 13

2-2 NXT 控制盒 14

2-3 LEGO伺服馬達 16

2-4 BricxCC 與 NXC介紹 18

2-5 MATLAB 影像擷取與處理工具箱 21

2-6 RWTH Toolbox介紹 26

第三章 解魔術方塊機器人設計 30

3-1 影像處理與結果 30

3-2 魔術方塊解題與結果 36

第四章 結論與未來研究 52

4-1 結論 52

4-2 未來研究 53

參考文獻 54

v

圖目錄圖目錄圖目錄圖目錄

圖 1-1 日本本田公司所發表之 Asimo 機器人 2

圖 1-2 具有人工智慧的 Probo 3

圖 1-3 具有療癒功能的 Paro 3

圖 1-4 導覽 機器人「小美」 4

圖 1-5 室內多功能服務型機器人 5

圖 1-6 QB 遠端臨場機器人 6

圖 1-7 樂高 Mindstorms NXT 機器人 7

圖 1-8 NXT-G 使用介面 8

圖 1-9 各種多階與非標準魔術方塊 10

圖 1-10 以 PC 為基礎之解魔術方塊機器人 10

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人 10

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人 11

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人 11

圖 2-1 解魔術方塊機器人示意圖 13

圖 2-2 NXT 控制盒 14

圖 2-3 LEGO伺服馬達解析圖 16

圖 2-4 光學編碼器 AB相訊號 17

圖 2-5 BricxCC 程式開發環境 19

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器) 20

圖 2-7 影像擷取圖樣 23

圖 2-8 影像處理樣本 25

圖 2-9 PC 與 NXT連線圖 26

圖 2-10 ECRobot NXT 模組方塊 28

vi

圖 2-11 ECRobot simulink環境 29

圖 3-1 魔術方塊六面影像 30

圖 3-2 由圖 3-1 轉換的灰階圖案 31

圖 3-3 由圖 3-2 轉換的二元化影像 32

圖 3-4 各色面展開圖 35

圖 3-5 LBL 基本解法流程圖 37

圖 3-6 解題器模擬圖 38

圖 3-7 魔術方塊的 6個面色值代入解題器中 39

圖 3-8 解題器解題過程 41

圖 3-9 方塊六面位置定義 42

圖 3-10 機器人的翻轉方塊與旋轉方塊 42

vii

表目錄表目錄表目錄表目錄

表 2-1 MATLAB 影像轉換 24

表 3-1 魔術方塊 6 色取樣 33

表 3-2 白色面九格方塊像素值 34

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 4: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

iii

致謝致謝致謝致謝

在研究所兩年的求學生涯中承蒙指導教授黃啟光博士在學業上及研究方面

給予悉心的指導與鼓勵以及許駿飛教授的諄諄教誨與指點迷津帶領我走向更

深的領域探索以往未曾想過的問題學習過程中老師總是不厭其煩的教導

從最基本的一步一步向上累積同時在待人處事人生規劃方面亦給予寶貴的意

見讓我對生涯規劃以及研究態度更加積極謹此致上由衷的謝意其次要感謝

實驗室的許多學長同學以及學弟的幫忙指導與精神上的鼓勵其中特別感謝同

學沈漢賢在數學以及程式方面給予的寶貴意見僅將此篇論文獻給關心我鼓勵我

的人在我遇到難題困惑沮喪時默默支持我的人深深的感謝他們使我得以完成

此論文願與他們分享此榮耀

鮑柏年 謹識於中華大學

2010 年 8 月

iv

目錄目錄目錄目錄

摘要 i

Abstract ii

致謝 iii

目錄 iv

圖目錄 v

表目錄 vii

第一章 序論 錯誤錯誤錯誤錯誤 尚未定義書籤尚未定義書籤尚未定義書籤尚未定義書籤

1-1 智慧型機器人介紹 1

1-2 樂高機器人介紹 6

1-3 研究背景與目的 9

第二章 機器平台介紹 13

2-1 整體架構 13

2-2 NXT 控制盒 14

2-3 LEGO伺服馬達 16

2-4 BricxCC 與 NXC介紹 18

2-5 MATLAB 影像擷取與處理工具箱 21

2-6 RWTH Toolbox介紹 26

第三章 解魔術方塊機器人設計 30

3-1 影像處理與結果 30

3-2 魔術方塊解題與結果 36

第四章 結論與未來研究 52

4-1 結論 52

4-2 未來研究 53

參考文獻 54

v

圖目錄圖目錄圖目錄圖目錄

圖 1-1 日本本田公司所發表之 Asimo 機器人 2

圖 1-2 具有人工智慧的 Probo 3

圖 1-3 具有療癒功能的 Paro 3

圖 1-4 導覽 機器人「小美」 4

圖 1-5 室內多功能服務型機器人 5

圖 1-6 QB 遠端臨場機器人 6

圖 1-7 樂高 Mindstorms NXT 機器人 7

圖 1-8 NXT-G 使用介面 8

圖 1-9 各種多階與非標準魔術方塊 10

圖 1-10 以 PC 為基礎之解魔術方塊機器人 10

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人 10

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人 11

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人 11

圖 2-1 解魔術方塊機器人示意圖 13

圖 2-2 NXT 控制盒 14

圖 2-3 LEGO伺服馬達解析圖 16

圖 2-4 光學編碼器 AB相訊號 17

圖 2-5 BricxCC 程式開發環境 19

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器) 20

圖 2-7 影像擷取圖樣 23

圖 2-8 影像處理樣本 25

圖 2-9 PC 與 NXT連線圖 26

圖 2-10 ECRobot NXT 模組方塊 28

vi

圖 2-11 ECRobot simulink環境 29

圖 3-1 魔術方塊六面影像 30

圖 3-2 由圖 3-1 轉換的灰階圖案 31

圖 3-3 由圖 3-2 轉換的二元化影像 32

圖 3-4 各色面展開圖 35

圖 3-5 LBL 基本解法流程圖 37

圖 3-6 解題器模擬圖 38

圖 3-7 魔術方塊的 6個面色值代入解題器中 39

圖 3-8 解題器解題過程 41

圖 3-9 方塊六面位置定義 42

圖 3-10 機器人的翻轉方塊與旋轉方塊 42

vii

表目錄表目錄表目錄表目錄

表 2-1 MATLAB 影像轉換 24

表 3-1 魔術方塊 6 色取樣 33

表 3-2 白色面九格方塊像素值 34

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 5: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

iv

目錄目錄目錄目錄

摘要 i

Abstract ii

致謝 iii

目錄 iv

圖目錄 v

表目錄 vii

第一章 序論 錯誤錯誤錯誤錯誤 尚未定義書籤尚未定義書籤尚未定義書籤尚未定義書籤

1-1 智慧型機器人介紹 1

1-2 樂高機器人介紹 6

1-3 研究背景與目的 9

第二章 機器平台介紹 13

2-1 整體架構 13

2-2 NXT 控制盒 14

2-3 LEGO伺服馬達 16

2-4 BricxCC 與 NXC介紹 18

2-5 MATLAB 影像擷取與處理工具箱 21

2-6 RWTH Toolbox介紹 26

第三章 解魔術方塊機器人設計 30

3-1 影像處理與結果 30

3-2 魔術方塊解題與結果 36

第四章 結論與未來研究 52

4-1 結論 52

4-2 未來研究 53

參考文獻 54

v

圖目錄圖目錄圖目錄圖目錄

圖 1-1 日本本田公司所發表之 Asimo 機器人 2

圖 1-2 具有人工智慧的 Probo 3

圖 1-3 具有療癒功能的 Paro 3

圖 1-4 導覽 機器人「小美」 4

圖 1-5 室內多功能服務型機器人 5

圖 1-6 QB 遠端臨場機器人 6

圖 1-7 樂高 Mindstorms NXT 機器人 7

圖 1-8 NXT-G 使用介面 8

圖 1-9 各種多階與非標準魔術方塊 10

圖 1-10 以 PC 為基礎之解魔術方塊機器人 10

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人 10

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人 11

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人 11

圖 2-1 解魔術方塊機器人示意圖 13

圖 2-2 NXT 控制盒 14

圖 2-3 LEGO伺服馬達解析圖 16

圖 2-4 光學編碼器 AB相訊號 17

圖 2-5 BricxCC 程式開發環境 19

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器) 20

圖 2-7 影像擷取圖樣 23

圖 2-8 影像處理樣本 25

圖 2-9 PC 與 NXT連線圖 26

圖 2-10 ECRobot NXT 模組方塊 28

vi

圖 2-11 ECRobot simulink環境 29

圖 3-1 魔術方塊六面影像 30

圖 3-2 由圖 3-1 轉換的灰階圖案 31

圖 3-3 由圖 3-2 轉換的二元化影像 32

圖 3-4 各色面展開圖 35

圖 3-5 LBL 基本解法流程圖 37

圖 3-6 解題器模擬圖 38

圖 3-7 魔術方塊的 6個面色值代入解題器中 39

圖 3-8 解題器解題過程 41

圖 3-9 方塊六面位置定義 42

圖 3-10 機器人的翻轉方塊與旋轉方塊 42

vii

表目錄表目錄表目錄表目錄

表 2-1 MATLAB 影像轉換 24

表 3-1 魔術方塊 6 色取樣 33

表 3-2 白色面九格方塊像素值 34

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 6: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

v

圖目錄圖目錄圖目錄圖目錄

圖 1-1 日本本田公司所發表之 Asimo 機器人 2

圖 1-2 具有人工智慧的 Probo 3

圖 1-3 具有療癒功能的 Paro 3

圖 1-4 導覽 機器人「小美」 4

圖 1-5 室內多功能服務型機器人 5

圖 1-6 QB 遠端臨場機器人 6

圖 1-7 樂高 Mindstorms NXT 機器人 7

圖 1-8 NXT-G 使用介面 8

圖 1-9 各種多階與非標準魔術方塊 10

圖 1-10 以 PC 為基礎之解魔術方塊機器人 10

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人 10

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人 11

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人 11

圖 2-1 解魔術方塊機器人示意圖 13

圖 2-2 NXT 控制盒 14

圖 2-3 LEGO伺服馬達解析圖 16

圖 2-4 光學編碼器 AB相訊號 17

圖 2-5 BricxCC 程式開發環境 19

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器) 20

圖 2-7 影像擷取圖樣 23

圖 2-8 影像處理樣本 25

圖 2-9 PC 與 NXT連線圖 26

圖 2-10 ECRobot NXT 模組方塊 28

vi

圖 2-11 ECRobot simulink環境 29

圖 3-1 魔術方塊六面影像 30

圖 3-2 由圖 3-1 轉換的灰階圖案 31

圖 3-3 由圖 3-2 轉換的二元化影像 32

圖 3-4 各色面展開圖 35

圖 3-5 LBL 基本解法流程圖 37

圖 3-6 解題器模擬圖 38

圖 3-7 魔術方塊的 6個面色值代入解題器中 39

圖 3-8 解題器解題過程 41

圖 3-9 方塊六面位置定義 42

圖 3-10 機器人的翻轉方塊與旋轉方塊 42

vii

表目錄表目錄表目錄表目錄

表 2-1 MATLAB 影像轉換 24

表 3-1 魔術方塊 6 色取樣 33

表 3-2 白色面九格方塊像素值 34

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 7: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

vi

圖 2-11 ECRobot simulink環境 29

圖 3-1 魔術方塊六面影像 30

圖 3-2 由圖 3-1 轉換的灰階圖案 31

圖 3-3 由圖 3-2 轉換的二元化影像 32

圖 3-4 各色面展開圖 35

圖 3-5 LBL 基本解法流程圖 37

圖 3-6 解題器模擬圖 38

圖 3-7 魔術方塊的 6個面色值代入解題器中 39

圖 3-8 解題器解題過程 41

圖 3-9 方塊六面位置定義 42

圖 3-10 機器人的翻轉方塊與旋轉方塊 42

vii

表目錄表目錄表目錄表目錄

表 2-1 MATLAB 影像轉換 24

表 3-1 魔術方塊 6 色取樣 33

表 3-2 白色面九格方塊像素值 34

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 8: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

vii

表目錄表目錄表目錄表目錄

表 2-1 MATLAB 影像轉換 24

表 3-1 魔術方塊 6 色取樣 33

表 3-2 白色面九格方塊像素值 34

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 9: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

1

第一章第一章第一章第一章 序論序論序論序論

11 智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹智慧型機器人介紹

機器人產業是結合機械自動化電機電子資訊軟體通訊及創意內容

等相關技術為一高度技術整合且高附加價值的明星產業可預期的是機器人也

即將進入家庭環境成為一般民眾生活的一部分對於國家發展與國家經濟及工業

整體發展具有關鍵性指標的地位機器人的關鍵技術涵蓋機械結構設計馬達設

計與控制即時影像語音處理感測電路設計與實現嵌入式系統軟硬體設計

微處理器應用與 IC 設計智慧型控制技術機電整合等等的專業知識是一個

需要系統整合才能有效發展的研究領域[1-4]

臺灣社會從以農業為主的被殖民社會轉變成為以工商業為主的社會人民

的生活水準提高各項物質生活品質提升對於精神生活的重視也與日俱增統

計台灣三大都會區寂寞人口達 107 萬生活型態趨向「單身化」再加上快節奏

的都市生活步調緊張的社會關係使得生活感受產生更多壓力「寂寞」因而

變成為都市男女的集體感傷因此台灣開始出現「第四級幸福產業」其目的

主要讓消費者有幸福親密感滿足被關懷並找到歸屬的產業其中智慧型

機器人便佔有舉足輕重之地位

智慧型機器人是一種多功能的多軸全自動或半自動機械裝置可透過程式化

動作執行各項生產活動或結合人工智慧與感測技術的應用提供人類生活健

康安全娛樂等方面的服務智慧型機器人產業尚屬起步階段根據經濟部的

資料顯示目前的智慧型機器人大多集中於保全清潔娛樂和互動上面的應用

未來可以結合不同領域的發展國內則於「行政院 2005 年產業科技策略會議」

中決定將智慧型機器人產業發展目標分為三個階段第Ⅰ階段期間由目前至

西元 2008年預估產值將達到新台幣 300億元第Ⅱ階段期間由西元 2009 至

2013年預估產值將達到新台幣 900億元以上第Ⅲ階段期間由西元 2014至

2020 年我國將成為智慧型機器人主要製造國[5]以下分別就國內外相關研究

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 10: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

2

舉例說明

Asimo 人形機器人[6]

日本本田公司(Honda)由 1986 年開始研發人形機器人至今已研發超過 20

年不論機器人可模擬人類動作到何種程度但總需要時間才能讓人們接受本

田當初在研發 ASIMO 時就希望可研發最平易近人的機器人為目標ASIMO 代

表 Advanced Step in Innovative Mobility是由本田公司所研發全球唯一可爬行

樓梯且可慢速奔跑的機器人ASIMO 具有語音及人類臉部辨識的智慧功能可

使用手勢與人類進行溝通且 ASIMO 的手臂可以開關電燈大門等甚至還可

以為客人端茶

圖 1-1 日本本田公司所發表之 Asimo 機器人[6]

微軟公司的 Probo[7]

圖 1-2 的 Probo 主要的任務就是陪伴醫院裡的病童讓孩子在有時頗痛苦的

醫療過程中得到心靈上的慰藉這項計畫將來預計會在比利時首都布魯賽爾市

的兩家醫院中進行實驗將來希望透過這個具有社群互動能力強調語言人工

智慧以及守護孩童心靈的機器人能讓病童在接受治療的過程中更順利並能

健康平安的出院

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 11: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

3

圖 1-2 具有人工智慧的 Probo[7]

具療癒功能的 Paro[8]

帕羅(Paro)安裝有感知影像視覺聽覺觸覺和姿勢的感測器可以根據

人們對它的觸摸方式相應地調整動作如圖 1-3所示可以管理老年人的日常

生活提醒他們按時吃藥它們還可以用作通訊工具為用戶提供無線語音和視

頻連接與遠方的朋友和家人進行交流帕羅最大的特點是可以對人的接觸產

生交互反應當你對著它甜言蜜語或愛撫一番時帕羅會撲閃著眼睛眨動長

長的睫毛扭動身軀發出小海豹般的叫聲但如有人對它不理不睬它則會表

現出委屈和憤怒帕羅還有一套固定的作息時間白天伴人玩耍夜晚安然入睡

其外形動作和聲音充分刺激人的感官讓人們有與之交流的感覺從而豐富人

的生活成為老年人的忠誠ldquo伴侶rdquo

圖 1-3 具有療癒功能的 Paro[8]

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 12: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

4

台灣大學導覽機器人「小美」[9]

台灣大學在黃漢邦教授帶領成功研發全自動智慧型導覽機器人「小美」如

圖 1-4所示利用人工智慧與控制技術先是自動辨識人臉判斷觀眾所在位置

接著自動偵測路線清楚帶領觀眾逐一導覽台大校史館館藏還會表現「好開心」

「好生氣」等八種表情與情緒音調當訪客注視某處時「小美」機器人的頭部

也會跟著轉動感覺就像和訪客一起注視同一個地方容易讓訪客覺得很親近

另外一個特色就是可以建立 2D和 3D 的地圖也就是說它今天可以放在台大

校史館那他也可以放在北美館也可以放在國美館可以放在任何地方讓這

個機器人把這個環境地圖整個建立起來建立起來以後它就可以根據這地圖做

導航跟進一步的解說

圖 1-4 導覽 機器人「小美」[9]

中正大學室內多功能服務型機器人[10]

中正大學羅仁權教授的研究團隊所研發設計的「室內多功能服務智慧型機器

人」如圖 1-5機器人設計以居家和企業保全為用途以多重感測理論為基礎

機械手臂可以端茶水攙扶老人並具有比對資料庫的五官擷取影像建檔以辨識

入侵者除完善的保全功能外還有語音功能可應用於保全勤務並可透過語

音系統詳細解說企業概況是一部兼具保全居家照顧服務功能與擔任企業親

善大使的機器人

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 13: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

5

圖 1-5 室內多功能服務型機器人[10]

美國 Anybots 的 QB 遠端臨場機器人[11]

QB 是一個遠端臨場機器人如圖 1-6目的為讓使用者能在遠端透過網際

網路同時在數個地方與他人互動如同身歷其境的參與任何一個遠方的會議

不僅利於需要遠端工作的人使用也可以應用於一些緊急狀況QB 機器人的攝

影機是用於操作者可以了解機器人的位置以及他所面對的障礙物機器人的移動

仍然要依靠遠端的使用者操作因此可另外加入電腦視覺的分析例如利用影像

辨認以尋找遠端環境的人或物體用影像追蹤使機器人跟隨特定的人或是建立

工作環境的地圖讓遠端的操縱更加便利

圖 1-6 QB 遠端臨場機器人[11]

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 14: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

6

12 樂高機器人介紹樂高機器人介紹樂高機器人介紹樂高機器人介紹

樂高機器人套件(LEGO MINDSTORMS Robotics Invention System)目前最

著名的機器人學習的案例樂高機器人套件是針對 12 歲以上的小孩或大人對

機器人有興趣(或者啟發自動控制教育)的教育玩具這項產品計畫始於 1986

由丹麥樂高公司和美國麻省理工學院的媒體實驗室(Media Lab)進行的一項「可

程式積木(Programmable Brick)」的合作案一般的樂高模型完成之後是『靜』

態模型玩家可以自由想像沈浸於觀賞之中將模型加上馬達等動力元件就

可以進化為『動』態模型有了動作玩家可以有更多的玩法樂高 Mindstorms

NXT 是樂高最新一代的機器人樂高(LEGO)已于 2006 年 9 月上旬推出樂高公

司和美國麻省理工學院共同開發的機器人組件新款ldquo教育用 LEGO Mindstorms

NXTrdquo如圖 1-7所示Mindstorms 是將配備微處理器的 LEGO公司的塑料積木

組裝起來通過個人電腦制作的程序來控制的機器人[12]

在圖 1-7 中中間是 NXT 所使用的中央控制積木週邊的電子零件由左

上角那個長的像雞腿的零件開始 順時針依序是馬達馬達馬達超音波距

離感測器光源感應器音源感測器以及觸碰感應器中央控制積木就跟 RCX

那一大塊黃色的積木功能一樣 程式設計師將寫好的程式灌入至此積木然後

交由該積木去控制與他連結的 IO 零件去執行程式馬達可以說是 NXT 的主要

輸出零件機器人需要運動的部分就要交給馬達去執行NXT 除了這個輸出方

式外還可以藉由中央控制積木的螢幕和音源來輸出所以你可以編寫一首簡單

的歌交給 NXT 播放至於 NXT 的輸入部分超音波距離感應器主要藉由發射

超音波然後接收自己發射出去的超音波得到兩者之間所需的時間來計算與物

體的距離光源感應器有兩種模式一種是自己發出光線然後測反射回來光線

另一種是接收來自外界的紅外線音源感應器就是收音機接收來自外界的聲音

觸碰感應器可以偵測該感應器是被壓住或鬆開[12]

由於樂高機器人套件的彈性化擁有著讓使用者自行開發設計組合成各

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 15: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

7

式不同類型的樂高機器人模式也因此這樣的應用也被常拿來做教育上的教學

讓小朋友透過樂高的組合來設計不同類型的與功能的機器人全球各地甚至舉

辦了樂高機器人相互競賽並吸引不少的小朋友參與而這樣的學習模式其實可

以讓學生來學習「控制流程」的設計當中更有包含「邏輯分析」「創意思考」

「問題解決」「合作學習」等概念讓各組的學生發揮溝通思考邏輯合

作等不同方式來組合拼湊出最佳化的機器人世界各地許多知名的研究機構也

皆以這樂高機器人的使用來發展各式的學習模式以及各種不同的計畫

圖 1-7 樂高 Mindstorms NXT 機器人[12]

整套的樂高 NXT 配件中也附帶了 NXT-G 這套圖像化控制軟體G 即是

graphical 的意思NXT-G 是由美商國家儀器公司的 LabVIEW 軟體所支援而使

用介面與 MATLAB 的 simulink 類似它將所有的程式包成一個一個的方塊使

用者只需拖曳方塊再設定相關參數後就可以執行對於樂高機器人很陌生的人也

可以很容易上手如圖 1-8但與文字程式相比圖像化界面的程式再用性較低

且與相同功能的文字程式碼相比由圖像化介面所完成的程式會用掉比較多的記

憶體執行上的效率也較慢這也促使了許多高階樂高玩家致力於開發可以讓 C

語言及 Java 等高階程式語言可以直接控制 NXT 的程式環境

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 16: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

8

圖 1-8 NXT-G 使用介面 (a)程式環境

圖 1-8 NXT-G 使用介面 (b)程式範例

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 17: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

9

13 研究研究研究研究背景與背景與背景與背景與目的目的目的目的

魔術方塊是匈牙利首都布達佩斯的一位年輕建築系教授愛爾伯-魯畢克的作

品原本他是因為向學生教授建築學的一些理念所致做出的教具沒想到卻變成

今日的魔術方塊魔術方塊是一個非常奇特的結構26 個小立方塊能自由的圍

繞一個同樣大小的中心塊轉動魯畢克教授在這些小方塊的表面上塗上了不同

的顏色這樣就能一目了然瞭解每個方塊的轉動它的遊戲規則是在打亂之後

用最少的動作復原到最初的位置1975 年這套遊戲申請了專利1977 年上市之

後立刻吸引全世界千萬人投入當中還包括一些數學家因為它總共有約四千三

百億的變化[13-15]到了近幾年市面上更推出了多階魔術方塊例如 5x5 與 7x7

等等以及由不規則型的小方塊組合而成的魔術方塊更有非正方體造型的方塊

如圖 1-9所示這使的魔術方塊的變化性及求解公式的複雜性又更上了一層樓

以下分別就舉例說明幾種比較常見之解魔術方塊機器人如圖 1-10 所示主要

以 PC 為基礎之解魔術方塊機器人其透過 CCD 將六個面之魔術方塊資訊傳至

PC 個人電腦利用程式計算解方塊步驟再透過伺服介面卡控制機器手臂動作

達到解方塊之目的但是該架構往往需要昂貴之機構設計費用針對此缺點有

研究者利用樂高積木設計組合成所需之機器手臂如圖 1-11 所示如此可以大

大減少開發之成本與時間

(a) (b)

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 18: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

10

(c) (d)

圖 1-9 各種多階與非標準魔術方塊[16]

圖 1-10 以 PC 為基礎之解魔術方塊機器人[17]

(a) (b)

圖 1-11 以 PC 為基礎之解魔術方塊樂高機器人[1819]

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 19: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

11

Android 平台除了愈來愈普及憑著 Open Source 優勢 Android平台首

先就是其開發性開發的平臺允許任何移動終端廠商加入到 Android聯盟中來

開放的平台也會帶來更大競爭如此一來消費者將可以用更低的價位購得心儀

的手機一些研究者利用 Android平台智慧型手機將解方塊程式寫入計算所需之

解方塊步驟再利用藍牙通訊介面將動作命令傳送至 NXT 中央控制積木利用

中央控制積木控制手臂動作達到解方塊目的如圖 1-12 所示更有不少研究者

直接利用 NXT 中央控制積木來計算解方塊之步驟如圖 1-13所示如此即可不

需使用 PC 或手機來計算解方塊動作但是這樣單純以 NXT 中央控制積木來

實現解魔術方塊機器人時往往侷限於 NXT 軟體開發環境與運算能力時常無

法快速解題或需較多步驟才能達到解方塊之目的

圖 1-12 以 Andriod 為基礎之解魔術方塊樂高機器人[20]

(a) (b)

圖 1-13 以 NXT 為基礎之解魔術方塊樂高機器人[21]

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 20: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

12

本研究將以 PC 為基礎設計所需之解魔術方塊機器人在機構設計部分本

論文利用樂高積木設計組合所需之機器人如此可以大大減少開發之成本與時間

接著並透過 CCD Web Camera 將六個面之魔術方塊資訊傳至個人電腦在

MATLAB 環境下利用影像處理技術得知該方塊顏色分佈之情狀再進一步計算

解方塊所需之步驟最後在電腦使用 MATLAB 的 IO 功能下透過藍芽傳輸

傳送指令至樂高機器人本論文所提出之 MATLAB遠端遙控樂高機器人解決方

案可以有立即執行程式設計無需額外的工具與在MATLAB 環境下進行研發與

除錯工作等優點如此所提出之架構除了十分適合解魔術方塊機器人使用還

十分適合各種不同功能之智慧型機器人使用

除了MATLAB RWTH Toolbox 之外可用來控制 NXT 的高階程式環境還有

NXCLabView for LEGO MINDSTORMS NXTMicrosoft Robotics Developer

Studio 等其中也有由美商國家儀器公司 LabView 軟體所支援的 NXT-G圖像化

控制軟體它將程式包成一個方塊只需要拖拉方塊並且設定參數就可執行不

過與同功能的程式碼相比是比較耗費記憶體的

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 21: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

第二章第二章第二章第二章 機器平台介紹機器平台介紹機器平台介紹機器平台介紹

21 整體架構整體架構整體架構整體架構

為了讓電腦讀取魔術方塊的六個面

旋轉這二個動作本章將對機器人平台加以探討

工具箱軟體的開發環境與

器人的實驗環境其架構示意圖如圖

MATLAB 影像處理MATLAB

令NXT 主機及樂高伺服馬達

的平台部分與架設影像擷取裝置部分

塊的六面色值再使用 RWTH

在本章中將逐步詳細介紹

13

機器平台介紹機器平台介紹機器平台介紹機器平台介紹

為了讓電腦讀取魔術方塊的六個面並且讓機器人完成翻轉與旋轉魔術方塊

本章將對機器人平台加以探討實驗環境主要利用

軟體的開發環境與樂高 NXT 主機及其積木零組件來完成解魔術方塊機

其架構示意圖如圖 2-1 所示包含了機影像擷取裝置

MATLAB 魔術方塊模擬器解題RWTH 工具箱

伺服馬達而積木部分則分為翻轉的手臂部分

的平台部分與架設影像擷取裝置部分透過影像擷取與影像處理軟體讀取魔術方

RWTH 工具箱對 NXT 控制盒下達馬達控制指令

在本章中將逐步詳細介紹再將整個實驗環境的架設作一說明

圖 2-1 解魔術方塊機器人示意圖

並且讓機器人完成翻轉與旋轉魔術方塊

實驗環境主要利用 MATLAB

主機及其積木零組件來完成解魔術方塊機

包含了機影像擷取裝置電腦

工具箱的控制指

而積木部分則分為翻轉的手臂部分旋轉方塊

透過影像擷取與影像處理軟體讀取魔術方

控制盒下達馬達控制指令以下

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 22: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

14

22 NXT 控制盒控制盒控制盒控制盒

在 NXT 之前樂高公司在 1999 年發表了第一代智慧型主機RCXRCX

有 3 個輸入端與 3 個輸出端可以接上多種感應器與馬達組成一台簡易的機器

人搭配 Robolab這套圖像化軟體透過紅外線傳輸將電腦上的程式下載到 RCX

上並執行經過數年之後樂高公司在 2005年發表了新一代智慧型主機NXT

除了在硬體效能方面有大幅度的提升之外也提供了更多種的感應器選擇

以下則對 NXT 控制盒做詳細介紹[12]

(1)處理器與記憶體

主核心為 32 位元的 ARM7 微處理器負責管理所有燒錄的執行檔擁有

256K 快閃記憶體與 64K 內存 RAM以及 8 位元 AVR 微控制器負責管理 IO

的控制擁有 4K 快閃記憶體與 512B 內存 RAMARM (Advanced RISC Machine)

是一個 32 位元精簡指令集微處理器架構並且廣泛運用在許多嵌入式系統設計

上其特點就是耗電量低故普遍應用在行動通訊領域AVR(Automatic Voltage

Regulor)微控制器是 1997 年由 ATMEL 公司研發出的增強型內建快閃的

RISC(Reduced Instruction Set Computing)精簡指令集 8 位元單晶片其具有高可

靠性高速度低功耗的特性並廣泛應用在電腦外部設備工業儀器通訊設

備等領域

圖 2-2 NXT 控制盒

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 23: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

15

(2)傳輸方式與 IO端子

在電腦與 NXT 之間的傳輸可透過 USB 20 (PC-NXT)與藍芽(PC-NXT 或

NXT-NXT)二種方式完成而 NXT 擁有 3 個馬達輸出端與 4 個感應器輸入端

並使用 6芯傳輸線連接馬達與感應器此傳輸線也支援 I2C傳輸協定包括了一

個用於將來使用的 IEC 61158 Type 4EN 50 170 相容接口

(3)使用者介面

包含了一個 64x100 像素的可程式化液晶顯示面板與左右鍵及橘色的功能

鍵以及 8KHz 音質的揚聲器透過功能鍵與左右鍵可以開啟 NXT 的使用介面

可進行檔案的執行與刪除或是在指定輸入端連接感應器便可顯示該感應器的

讀值在使用介面中也可編輯簡易的圖形化程式並且執行但最多只可編輯 5

個工作方塊對於複雜的動作還是必須使用高階的程式軟體

(4)感應器

NXT 支援的感應器約可分為 2 種類比感應器與 I2C 感應器類比感應器

有觸碰感應器光感應器聲音感應器等等這類感應器將讀取到的值輸入 NXT

主機進行類比數位轉換I2C 感應器有超音波感應器紅外線感應器以及一些

近年來開發的新型感應器I2C(Inter Integrated Circuit)為一個串列匯流排介面

利用二條訊號控制線(SCLSDA)在二個 IC 之間傳送資料並且有主(Master)從

(Slave)機制其優點為佔用空間非常小可大幅減少電路空間並且確保資料不

失真故近年來所開發的較複雜類型感應器皆運用 I2C數位介面傳輸也有將以

往的類比類型溫度感應器數位化藉以提高精確度在傳送速率上傳統的類比

感應器將讀取的值輸入 NXT 主機進行類比數位轉換I2C 感應器則是將感應結

果以一次一位元的串列傳送方式輸入 NXT 主機所以在速率上是較類比感應器

慢的

(5)電源

6 個 3號電池或充電鋰電池其中感應器的供電為 43V電流因感應器種類

而異馬達的供電為 9V 60mA

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 24: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

16

23 LEGO 伺服馬達伺服馬達伺服馬達伺服馬達

工業用伺服馬達可以精準的控制馬達轉動角度而樂高公司也在 NXT 上推

出了內建角度感應器的伺服馬達藉以做到定位(positioning)並且使用了很多

齒輪來達到增大扭力的效果其構造如圖 2-3所示相較於上一代的 RCX 馬達

以體積變大及高成本換取了功能更強大的馬達[12]NXT 馬達將一個圓分為 360

等份每個控制單位為 1 度這對於一些嚴格要求馬達轉動角度的專題得以進

圖 2-3 樂高伺服馬達解析圖

而此角度感應器為一個光學編碼器利用一組發光二極體或是其他光源來發

光使用光電晶體來感測在發光二極體與光電晶體之間有一轉盤通常是聯接

在馬達的轉軸上而轉盤上有可透光與不可透光的區域當馬達轉動時會帶動轉

盤一照一暗的產生一個方波訊號此方波訊號的頻率相對應於馬達的轉動速度

而方波的數量則對應於馬達轉動的角度若在感測端加入第二組光電晶體將原

來的孔距定義成 360 度並且讓二組光電晶體排列相位相差成 90 度當圓盤轉

動時便可產生二個相位差 90 度的 AB 方波若 A 方波領先 B 方波則馬達正轉

反之則馬達反轉如圖 2-4所示

至於 NXT 馬達的速度控制方面有別於一般的直流馬達透過電壓大小來改

變馬達速度而是採用 PWM(Pulse width Modulation)脈波寬度調變方式來調整對

馬達的供電時間藉以達到改變馬達轉速一般來說 PWM 的頻率會在 1KHz 以

光學編碼器

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 25: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

17

上一個週期約為 1 毫秒以 50工作週期來說相當於供電 05 毫秒停止供電

05毫秒由於 1KHz 的頻率會有 1000 個週期所以即使是 10的工作週期馬達

的運作看起來也不會斷斷續續的

(a)

(b)

圖 2-4 光學編碼器 AB 相訊號 (a)編碼器做正向運轉 (b)編碼器做反向運轉

轉動速度較慢時 轉動速度較快時A脈波B脈波 轉動速度較慢時 轉動速度較快時A脈波B脈波

轉動速度較慢時 轉動速度較快時A脈波

B脈波轉動速度較慢時 轉動速度較快時A脈波

B脈波

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 26: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

18

24 BricxCC 與與與與 NXC 介紹介紹介紹介紹

在 2001年Dave Baum 發表了 NQC(Not Quite C)給 RCX 使用的類 C 語

言程式環境是 RCX Command Center後來改版成 Bricx Command CenterBricx

Command Center(BricxCC)是一個整合型程式環境支援了樂高智慧型主機以及

第三方的程式語言[22-23]

到了 2006年NXT 發表後John C Hansen依照NXT 的硬體設備發展了NXC

(Not eXactly C)NXC 依照 NXT規格對應了 C 語言語法並完整支援所有 NXT

的硬體功能與多種外接感應器可在 Bricx command Center 中進行編譯更提供

了許多方便的直接控制介面

而 NXC 與 BricxCC 具有以下優點

(1)免費且更新迅速

NXC 與 BricxCC 都是免費的在官方網站上也時常有測試檔與各種說明

(2)相容性高

使用樂高標準韌體不需要安裝新的韌體可與 NXT-G交叉測試

(3)穩定可靠

BricxCC 經過歷代版本的更新後已是一個成熟的程式環境穩定性已比

NQC 大幅提高

(4)上手快速

從安裝 BricxCC撰寫簡單的 NXC 程式並且組裝樂高積木到機器人動起來

不會超過 30 分鐘而且 NXC 有許多特有語法來存取感應器與馬達的參數

NXC 包括了算數和邏輯運算資料轉移控制流程條件指令以及它特

有的程式指令程式設計者只需懂得 C 或 C++ 程式語言就足以撰寫程式在

BricxCC介面中可以選擇使用何種樂高智慧型主機以及與電腦的連接方式和韌

體也可以選擇使用別種程式環境例如 NQC 與 NBCBricxCC 會依使用者選擇

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 27: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

19

的程式種類編譯成硬體語言只要 Compile無誤便會產生一個 rxe檔這是 NXT

唯一辨識的執行檔利用 BricxCC 的燒錄功能與 USB傳輸線或藍芽便可下載

燒錄檔至 NXT再透過執行功能或是 NXT 上的橘色功能鍵便可執行並驗證程式

功能BricxCC 的程式開發環境如圖 2-5所示

圖 2-5 BricxCC 程式開發環境

BricxCC 也有提供 NXT 與電腦連線的即時控制功能 Direct Control這功能

包含了對指定輸出腳位的馬達進行正反轉的控制與運轉速度以及馬達的剎車模

式指定輸入腳位的感應器種類也可選擇感應器的存取模式如預設的 RAW 值

與布林值以及百分比值等等在Watching the Brick 功能中則可以即時觀察

各輸入輸出腳位的馬達相關參數與感應器的值也可以將這些讀取的值使用圖表

模式顯示出來如圖 2-6所示另外也有 Brick Piano 可以讓 NXT 即時發音可

以在此編輯發音並轉換成 NXC 程式碼

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 28: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

20

圖 2-6 Watching the Brick 的資料圖表化功能(光感應器)

至於 NXC 對於馬達的控制方式約可分為無控制模式速度控制模式同步

模式角度控制模式與 PID 控制模式五種在無控制模式中顧名思義的不會

對馬達給予誤差修正量只是純粹的令馬達轉哪個方向速度多快而已速度控

制模式中當給定馬達轉動速度參數後如果給予馬達一個外力負載則 NXT

會試著加大馬達的控制量以維持給定的速度參數同步模式中可以對指定的二

個馬達設定同步百分比在此模式中若對其中一個馬達強加負載則另一個馬達

速度也會跟著慢下來至於同步百分比則指二個馬達的同步比率舉例來說設 0

的話二個馬達會以同樣速度轉同一方向設 20 的話則其中一個馬達速度會比另

一個慢一些100 的話則是二個馬達以同樣速度轉不同方向最後 PID模式中

由於 PID 控制器是內建於 NXT 中的所以使用者只需要設定設定 P 值I 值D

值就可以令馬達旋轉指定的角度而 NXT 預設的 PID 值分別為 963232若

觀察不同的 PID 值例如只給 P 值其他為 0則誤差無法抵銷以至馬達不能剛好轉

到指定角度若 P 值為 0只給 ID 值則轉動的誤差會變大若只給 PI 值而 D

值為 0則馬達會轉過頭再轉回來修正

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 29: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

21

25 MATLAB 影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱影像擷取與處理工具箱

MATLAB 與 Simulink 影像處理工具提供工程師科學家及研究人員一個直

覺式彈性化的環境來解決複雜的影像處理問題並廣泛運用於航太及國防遠

距感應技術生物科技醫學影像科學影像及材料科學等等且適用於各種動

靜態影像處理搭配影像擷取卡網路攝影機等裝置擷取影像進行影像增強

轉換計算濾波器設計等影像分析及演算法發展之應用提供在處理複雜的影

像問題時做更有效率及最適當的影像處理

論文中主要使用的 2 個工具箱模組[24]

影像擷取工具箱

影像擷取工具箱可直接在MATLAB 或 Simulink 的環境下將與電腦相容的

影像硬體裝置所擷取的影像與動態影片匯入 MATLAB裡做分析處理並支援許

多硬體供應商的產品

影像處理工具箱

影像處理工具箱提供一個完整的開發環境進行影像分析處理視覺化及演

算法開發功能可以恢復雜訊或著降低影像增強影像粹取功能分析陰影

結構紀錄 2 個影像並且管理色彩裝置檔案

搭配影像擷取工具箱並因應 LEGO 積木所架設的機器人平台適合本實驗

機構的影像擷取裝置有 CCD 與網路攝影機兩者的相異點為

CCD 需要額外電源供應

網路攝影機一般視訊直接用 USB 接到電腦後灌入驅動程式即可使用可

是 CCD 需要利用影像擷取器連接至電腦

CCD所擷取的影像畫質解析度較高但是相對的處理資料量也較大

而整體實驗架構中影像擷取部分主要用以抓取並辨識魔術方塊一個面上的

九宮格色塊故在此選擇了架設容易但解析度較低的網路攝影機在使用網路攝

影機的實作情況則可以利用影像擷取工具箱裡面介紹的方法以及 function 實現

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 30: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

22

其步驟如下

步驟一安裝與設定影像擷取裝置

安裝影像擷取設備的驅動程式並且連接至電腦再使用相關應用軟體預覽影

像畫面若使用 CCD則需多安裝影像擷取卡的驅動程式

步驟二檢視影像擷取工具箱唯一辨識的影像擷取裝置檢索資訊

要判斷 MATLAB 是否和網路攝影機連接上要看 DeviceIDs 這個參數是否

有正確 值再進行下一個步驟一般正確的數值會是 1若MATLAB沒有讀到

網路攝影機則該值是 0在此情形下須透過 imaqreset 指令清除所有影像擷取

物件訊息如下

info =

AdaptorDllName [1x67 char]

AdaptorDllVersion 33 (R2009a)

AdaptorName winvideo

DeviceIDs [1]

DeviceInfo [1x1 struct]

若網路攝影機與 MATLAB連接妥當則可觀看影像擷取裝置相關資訊其

中 DefaultFormat 為擷取圖像時的解析度DeviceName 為網路攝影機名稱訊息

如下

dev_info =

DefaultFormat RGB24_640x480

DeviceFileSupported 0

DeviceName 09-ASE200

DeviceID 1

ObjectConstructor videoinput(winvideo 1)

SupportedFormats 1x13 cell

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 31: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

23

步驟三創驗視訊輸入物件

在此步驟為創建 MATLAB 與影像擷取裝置的連接通道可運用 videoinput

指令並且再參照步驟二獲得的資訊進行相關設定訊息如下

vid = videoinput(winvideo1RGB24_640x480)

Summary of Video Input Object Using 09-ASE200

Acquisition Source(s) input1 is available

Acquisition Parameters input1 is the current selected source

10 frames per trigger using the selected source

RGB24_640x480 video data to be logged upon START

步驟四預覽視訊

由於是使用 USB 連接到電腦所以在擷取影像時沒有太大的困難可由

preview(vid)預覽以下是 Demo 影像

圖 2-7 影像擷取圖樣

步驟五設定影像擷取物件屬性

當創建完視訊輸入物件之後可用 getselectedsource 指令檢視其相關屬性

並可利用 set function 更改相關參數例如影像擷取禎數等等

步驟六擷取影像

設定完視訊輸入之後便可以透過 getdata存取影像資料在MATLAB 之下也

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 32: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

24

可以使用 imwrite 將影像存成硬碟檔案

在取得影像資訊之後便可利用影像處理工具箱進行影像處理在 MATLAB

中會將影像存取成依格式而具有不同維度的矩陣舉例來說圖 2-6 是一個

640x480 像素的 RGB 影像並且每一點像素都有 RGB 三個值則存取成一個三

維 640x480矩陣之後的一般處理方式有轉換圖像的資料類型進行數學運算或

是影像類型方便處理可參照表 2-2處理的方式有對於灰階像素對比不明顯的

圖片進行直方圖等化(histogram equalization)處理以增強明暗度灰階影像的不同

閥值二元化處理使用濾波函數針對影像邊緣的銳利化或是去除影像雜訊以及去

除模糊來復原影像利用膨脹與侵蝕來處理影像中的形狀區域的填充與連通以

及骨架化處理等等[25]

函數 用途 格式

ind2gray 索引轉灰階 y= ind2gray(xmap)

gray2ind 灰階轉索引 [ymap]= gray2ind(x)

rgb2gray RGB 轉灰階 y= rgb2gray(x)

gray2rgb 灰階轉 RGB y= gray2rgb(x)

rgb2ind RGB 轉索引 [ymap]= rgb2ind (x)

ind2rgb 索引轉 RGB y= ind2rgb (xmap)

表 2-1 MATLAB 影像轉換

圖 2-8 為簡易的樣本處理將原始的 RGB彩色圖經過灰階轉換並且經過直

方圖等化處理再利用 Otsu 演算法取得的最佳閥值二元化之後再經過 3x3 元

素全為 1 的矩陣侵蝕 2次

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 33: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

25

圖 2-8 影像處理樣本 (a)原始灰階影像 (b)histeq 處理後的灰階影像

(c)Otsu最佳閥值二元化 (d)以 ones(33)二次侵蝕

(a) (b)

(c) (d)

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 34: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

26

26 RWTH Toolbox 介紹介紹介紹介紹

RWTH Mindstorm NXT Toolbox 為德國亞琛大學電機工程學系 2007年發表

的以MATLAB為基礎的LEGO機器人程式開發環境可以利用MATLAB function

與機器人直接性的互動並且支援藍芽遠端操控 NXT 智慧型主機如圖 2-9 所

示工具箱設計概念最大的優點就是可以將機器人應用與 MATLAB 的複雜數學

運算結合在一起提供了機器人更多人工智慧與其他運用的無限可能從 2007

年到 2008年該學系已經成功運用 RWTH Mindstorm NXT Toolbox完成了 200 個

機器人專題

圖 2-9 PC 與 NXT連線圖[12]

另外也有搭配 Real-Time Workshop和 Real-Time Workshop Embedded Coder

使用的 simulink 模擬工具以下則對此 simulink 模擬工具及其套件軟體作一介

(1)Cygwin

由於 Linux 嵌入式系統為現在最普遍使用的如果要使用 simulink 來進行

NXT 的實作與模擬則必須具備 Linux 的作業環境而 Cygwin 便是一個 Windows

系統下的虛擬 Linux 環境包含了類似 Linux 的 API仿真層以及其他相關的 Linux

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 35: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

27

作業工具並且提供 GNUARM 的相容環境主程式可在官方網站下載

httpwwwcygwincom在安裝過程中需點選 Devel底下的 Make 執行檔

(2)GNUARM

這是一個在 Linux 作業系統下的 toolchain由於無法直接在 Windows 底下

執行所以必須將軟體安裝在 Cygwin底下並搭配使用主程式可在官方網站下

載httpwwwgnuarmcom

(3)NeXTTool

NeXTTool使用了LEGO Mindstorms NXT的驅動來傳輸電腦與NXT的資料

可以進行燒錄檢視 NXT 的資訊如感應器讀值儲存在內的檔案或是下載新的

韌體等等工具軟體可在 httpbricxccsourceforgenetutilitieshtml下載並且將

資料夾放置在 Cygwin下

(4)NXT standard firmware

Simulink 的模擬功能如果要連線 NXT下載燒錄檔則必須更新版本較高的韌

體(106 或更高)韌體可在 httpbricxccsourceforgenetlms_arm_jchzip下載再

將檔案存放至NeXTTool目錄下並且使用 cmd命令提示字元鍵入關鍵字 nexttool

com=usb ndashfirmware=lms_arm_nbcnxc_107rfw 更新韌體

(5)Embedded Coder Robot NXT

以 NXT 的 ARM 系統為基礎而設計出來的 Simulink 程式可以拉圖或是設

計控制器模組而模組方塊的架構與各元素的定義為定點與浮點設計工具可在

MATLAB官方網站下載資料夾必須放置在MATLAB 的安裝路徑最頂端

(6)nxtOSEK

nxtOSEK 是 NXT 程序化控制器的即時運作系統(RTOSReal-Time Operating

Systems)包含了 leJOS NXJ 以及 TOPPERS OSEK RTOS 的 IO驅動並且使

NXT 智慧型可運行 ANSI CC++程序程式可在 httplejos-oseksourceforgenet

下載將資料夾存放至第五個介紹的軟體 ecrobotNXT下的 environment裡

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 36: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

28

安裝完以上六個軟體後便可執行位於第五個介紹的 ecrobotNXT 資料夾下的

ecrobotnxtsetupm 以完成最後的程序其中需要注意所有的資料夾路徑中不可存

在有空格或是參雜全形半形字體的資料夾否則 m-file 會抓取不到路徑之後便

可在 simulink 找到新增的模組工具箱 ECRobot NXT Blockset其模組方塊如圖

2-10所示

圖 2-10 ECRobot NXT 模組方塊

其中 ExpFcnCalls scheduler 是控制 Function-Call Subsystems 的執行時間可

以設定多個 Function-Call Subsystems 並給予特定的時間參數並且用 Subsystems

方塊涵蓋起來在 Function-Call Subsystems裡面可以給予一些特定功能排程例

如令馬達跑弦波訊號如圖 2-11 所示分別給予三個 Function-Call 不同的時間

參數 100ms500ms1000ms

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 37: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

29

(a) (b)

(c) (d)

圖 2-11 (a)整體架構方塊 (b)scope數據圖橫軸為時間縱軸為徑度

(c)subsystems 內的三個 Function-Call (d) Function-Call 內的模組方塊

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 38: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

30

第三章第三章第三章第三章 解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計解魔術方塊機器人設計

3-1 影像處理與結果影像處理與結果影像處理與結果影像處理與結果

在本節中將依照第二章介紹的影像擷取工具箱與影像處理工具箱擷取魔

術方塊的六個面並處理分析六個面的色值其中如圖 3-1所示先以網路攝影

機擷取好魔術方塊的六個面並寫入硬碟成 bmp檔由於每個面的九個小方塊

位於正中間的小方塊是無論如何轉動方塊都不會移動位置的這是因為它是軸心

方塊同時也是六面顏色的判斷

(a) (b)

(b) (d)

(e) (f)

圖 3-1 魔術方塊六面影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面 (e)橘色

面 (f)紅色面

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 39: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

31

擷取完影像後便可以進行影像處理首先依照表 2-1 的轉換指令將原始的彩

色圖案轉換成灰階圖案如圖 3-2所示

(a) (b)

(b) (d)

(e) (f)

圖 3-2 由圖 3-1 轉換的灰階圖案 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

之後再選擇適當的閥值把灰階圖案轉換成黑白的二元化圖案如圖3-3所示

並經過相關的處理將方塊周圍以外的白色區域去除以取得影像中最感興趣的地

方在此便是指魔術方塊的邊框

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 40: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

32

(a) (b)

(c) (d)

(e) (f)

圖 3-3 由圖 3-2 轉換的二元化影像 (a)白色面 (b)綠色面 (c)黃色面 (d)藍色面

(e)橘色面 (f)紅色面

取得了最感興趣的部分後接下來則是取得魔術方塊的邊框位置在 2-5 的

影像處理介紹中提到MATLAB 的影像處理是將原始影像轉換成相對應大小的

矩陣因影像的 RGB灰階格式的不同而具有不同的維度並且每一點的像素

會因應顏色的不同而有不同的值例如 RGB 影像的三個值皆為 0 到 255灰階

影像也是 0 到 255 的值二元化影像則是 0(黑)和 1(白)而影像的像素座標

分佈皆是第四象限在影像處理妥善的情形下可以從二元化影像尋找出白色區

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 41: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

33

域最小的 x 軸座標y 軸座標以及最大的 x 軸座標y 軸座標這二點約等於是

影像中魔術方塊的左上點與右下點

在取得了魔術方塊的對角二個點後便可以透過最大與最小軸座標計算出魔

術方塊一個邊的長度由於實驗中的方塊是標準魔術方塊所以每一邊的長度以

及每一面的九個小方塊邊長都是固定的故取得了邊長後再除以三就是小方塊的

邊長得到約略的九個小方塊的涵蓋區域後便可以分辨它們的顏色通常一個小

面顏色的 RGB 值並不是均勻分佈的會因為環境光的影響而改變色值所以在

此對每一個小方塊取 9 個等距離的點透過計算這 9 個點的像素值的平均來判斷

這一小面是屬於何種顏色在判斷顏色之前必須要有魔術方塊的六個顏色 RGB

值在此先做了六個顏色的取樣並四捨五入可參考表 3-1

顏色 R 值 G 值 B 值

紅 148 0 0

橙 255 64 0

黃 180 135 24

綠 0 47 54

藍 0 0 94

白 186 182 192

表 3-1 魔術方塊 6色取樣

依照表 3-1 的取樣結果設定好適當的 RGB判斷區間來針對每一面的九個

顏色進行判斷在此以白色面即圖 3-1(a)來作一判斷從以上說明取得白色面的

九格像素平均值如表 3-2所示其中白色面方塊因為印有商標所以會有較大的

偏差可以加大中心方塊的判斷區間或著經過其他 5 面的中心方塊色彩判斷將

印有文字的白色面歸類為白色

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 42: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

34

方塊位置 R 值 G 值 B 值

左上 0 26 30

中上 255 56 0

右上 166 162 172

左中 0 24 26

正中心 159 154 151

右中 0 0 75

左下 0 0 71

中下 140 0 0

右下 170 164 174

表 3-2 白色面九格方塊像素值

透過程式的判斷式將白色面的色彩進行歸類黃色歸類為 1綠色歸類為 2

紅色歸類為 3橙色歸類為 4藍色歸類為 5白色歸類為 6用 3x3矩陣顯示則

可得到 2 4 62 6 55 3 6而其他的色面分別為紅色面 5 3 26 3 66 5 5橙色面 3 6 14 4 11 5 6

黃色面 5 2 41 1 31 5 2綠色面 3 2 41 2 13 6 1藍色面 2 3 34 5 44 2 4

若將得到的 6 面值畫成一個展開圖可以得到一個較明顯的色彩分佈由於軸

心方塊是固定不動的同時也是各色面的原始顏色根據若以白色面來觀看其他

4個鄰面的顏色則一定固定為紅綠橙藍依順時鐘排列而另一面則一定是黃色

如圖 3-4所示

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 43: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

35

2 3 3

4 5 4

4 2 4

3 6 1 2 4 6 5 5 6 2 5 1

4 4 1 2 6 5 6 3 6 3 1 1

1 5 6 5 3 6 2 3 5 4 2 5

3 2 4

1 2 1

3 6 1

圖 3-4 各色面展開圖

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 44: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

36

32 魔術方塊解題魔術方塊解題魔術方塊解題魔術方塊解題與與與與結果結果結果結果

在取得 6 面的顏色後就可以進行解題解題的方式可以透過魔術方塊的特有

公式或是用程式模擬器求解在特有公式的部分有分為基本解與快速解許多

人會認為魔術方塊是一個面一個面慢慢解的但實際上魔術方塊的解法是一層一

層解的基本的解法是先轉好第一層再轉好第二層最後再轉好第三層這個

基本的轉法稱為 LBL也就是 Layer By Layer此解法的出現是由魔術方塊推出

的 30 年來許多的玩家不斷的討論與經驗累積整理出來的並且普遍流傳在坊

間之中對於熟記解題公式的人來說多半可以在 1 分鐘左右解完方塊至於要能

夠在30秒甚至是20秒內解完魔術方塊其目的已不是單純的解題而是講求時間

盡可能的減少公式以增快解題速度這類的解法稱為「速解魔方」至於速解公

式的始祖美國賓漢頓大學教授弗雷德里奇(Jessica Fridrich)[13-15]她設計

了 70幾個公式並且可以 17秒解完方塊而現今的許多速解公式大部分都是改編

她的公式在此則對 LBL 基礎解法作一詳細介紹大致上的解法為先轉好第一

層的十字形並且邊塊的顏色必須與鄰面相同如圖 3-5(a)然後再轉正 4 個角

塊顏色也必須與 3 個鄰面相同如圖 3-5(b)如此第一層就轉完了接著將第

二層的邊塊互換使 2 個鄰面顏色相符合如圖 3-5(c)最後第三層也是先轉好該

色面的十字形不過與第一層不同的是十字形的邊塊不用與鄰面符合如圖

3-5(d)之後再針對 4個角塊進行互換與翻面至 3個鄰面相符如圖 3-5(e)3-5(f)

最後再對 4 個邊塊互換至與鄰面相符合如圖 3-5(g)如此便可解完方塊其詳

細流程如以下所示

圖 3-5 (a)步驟一 圖 3-5 (b)步驟二

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 45: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

37

圖 3-5 (c)步驟三 圖 3-5 (d)步驟四

圖 3-5 (e)步驟五 圖 3-5 (f)步驟六

圖 3-5 (g)步驟七

圖 3-5 LBL基本解法流程圖[26]

魔術方塊的解法除了記公式之外也可以利用魔術方塊解題器隨著電腦資訊

的發展已有許多數學家將推算出的演算法程式化實現在 C 語言或是 Java

以及 MATLAB 等程式環境除了兼具快速解題之外還附帶模擬的魔術方塊影像

可以觀察解題過程在論文中則是使用程式模擬器求解而解題器是由 Alexander

Mueller所設計的這是一個寫在 MATLAB 底下的 m-file可以在 MATLAB網

頁上下載httpwwwmathworkscommatlabcentralfileexchange8461開啟後如

圖 3-6所示

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 46: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

38

圖 3-6 解題器模擬圖

在視窗中可以翻轉魔術方塊的各個面也可以拖曳方塊觀察各個面的色彩分

佈或是隨機產生一個轉亂的方塊然後進行自動求解與手動求解在此將魔術

方塊的 6 個面色值代入解題器中如圖 3-7所示

(a) (b)

(c) (d)

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 47: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

39

(e)

圖 3-7 (a)黃紅綠色面 (b)黃藍紅色面 (c)黃橙藍色面 (d)黃綠橙色面 (e)紅綠白

色面

按下解題鍵後便會產生一連串的解題動作例如某色面向右轉 90 度或是向

左轉 90 度以及旋轉 180 度以目前的方塊來說會產生以下的動作綠色面右

轉 90 度>黃色面左轉 90 度>橙色面左轉 90 度>綠色面旋轉 180 度>紅色面右

轉 90 度>橙色面左轉 90 度>黃色面左轉 90 度>藍色面旋轉 180 度>白色面右

轉 90 度>黃色面旋轉 180 度>紅色面左轉 90 度>綠色面右轉 90 度>白色面右

轉 90 度>藍色面左轉 90 度>紅色面左轉 90 度>解題完成再將上述動作轉換

成馬達控制指令後可藉由 PC 端藍芽無線模組將命令傳至 NXT 控制盒控制馬

達動作以達到實際解題的目的而圖 3-10(a)~3-10(s)為解題器的解題過程

(a) (b)

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 48: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

40

(c) (d)

(e) (f)

(g) (h)

(i) (j)

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 49: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

41

(s)

圖 3-8 解題器解題過程

(k) (l)

(m) (n)

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 50: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

由於機台設計的限制

動作和手臂夾住方塊旋轉方塊底面

旋轉多少度則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過

機器人動作以及方塊變化做一探討

圖 3

機器人動作

機器人的動作共有

機器手臂翻轉方塊一次

(反)轉 180度反轉

42

由於機台設計的限制機器人只能做方塊翻面的推動作與原地旋轉換面的轉

和手臂夾住方塊旋轉方塊底面為了配合解題器所產生的動作

則必須將該色面移至底面以進行夾住旋轉該色面的第一層

人的實際解題動作必須設計過以符合解題器解題過程的方塊變化

機器人動作以及方塊變化做一探討

圖 3-9 方塊六面位置定義

3-10 機器人的翻轉方塊與旋轉方塊

方塊平台正轉 90度正(反)轉 180度

機器手臂翻轉方塊一次二次三次手臂夾住方塊上二層正轉

反轉 90度根據目標轉動色面的位置來搭配以上的動作

機器人只能做方塊翻面的推動作與原地旋轉換面的轉

為了配合解題器所產生的動作如某色面

則必須將該色面移至底面以進行夾住旋轉該色面的第一層則機器

以符合解題器解題過程的方塊變化以下則針對

反轉 90度

手臂夾住方塊上二層正轉 90 度正

根據目標轉動色面的位置來搭配以上的動作

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 51: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

43

例如目標色面在方塊的頂面則手臂翻轉二次使該色面移至方塊的底面再

進行手臂夾住旋轉的動作或是目標色面在左面則需方塊平台反轉 90度

之後手臂翻轉方塊一次接著手臂夾住方塊旋轉

方塊色面變化

對於一個標準的魔術方塊來說由於內部軸心的設計使的方塊每一面的中心

小方塊無論方塊如何轉亂都不會轉動到它故此小方塊被用來判別魔術方塊

的色面同時這小方塊的另一面也會被固定例如白色面的對面必定是黃

色綠色的對面必定是藍色紅色面的對面必定是橙色如此只要知道三個

並非互為相對面的色面就可以知道方塊的六個色面位置若給予色面數字

編號來表示黃色為 1綠色為 2紅色為 3橙色為 4藍色為 5白色為

6則每個相對面的編號相加之和恰好為 7綜合以上各點可以方便於用數

字來表示方塊目前的狀態

現在取三個互不為相對面的色面之編號放入 1x3 的陣列之中在此取黃色

綠色紅色

1 2 3

其中元素 1 為方塊的底面元素 2 為方塊的前面元素 3 為方塊的右面

配合機器人的動作來觀看陣列的變化如平台旋轉和手臂翻轉可得到以下規律

其中 R 是指平台正轉 90 度L 是指平台反轉 90 度2R(2L)是指平台旋轉 180

平台正轉 90 度

1 2 3 1 4 2

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 52: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

44

原地旋轉並不會改變方塊頂面和底面的顏色所以元素 1 的內容不變前面

的顏色會被原本右面的相對面取代也就是7 column3右面的顏色會

被原本的前面取代則結論可知原本的column3被替換成 4然後

column2與column3互換如下所示

1 2 3 1 2 4 1 4 2

平台反轉 90 度

1 2 3 1 3 5 元素 1 的內容不變前面的顏色會被原本的右面取代右面的顏色會被原本

前面的相對面取代也就是7 column2則結論可知原本的column2被替換成 5然後column2與column3互換如下所示

1 2 3 1 5 3 1 3 5 手臂翻轉一次

1 2 3 5 1 3 底面被原本的前面之相對面取代也就是7 column2前面被原本的底

面取代翻滾的動作並不會改變右面與左面的顏色所以元素3的內容不變

則結論可知原本的column2被替換成 5然後column1與column2互換如下所示

1 2 3 1 5 3 5 1 3

而平台旋轉 180 度以及手臂翻轉二次三次可以由以上三種變化規律衍生

出來至於手臂夾住方塊旋轉的動作由於上二層被夾住固定不會動到位於第

二層的中心小方塊所以六面的顏色不會改變如以下所示其中 r 是指夾住旋

轉 90 度ℓ是指夾住旋轉-90 度2r(2ℓ)是指夾住旋轉 180 度

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 53: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

45

夾住正轉 90 度

1 2 3 1 2 3 夾住反轉 90 度

1 2 3 ℓ 1 2 3

綜合以上的變化規律以及機器人的解題動作可以列出一個較為完整的陣列

變化在此以解題器的步驟一為例而方塊的起始狀態定為1 2 3 1 2 3 1 4 2 1 5 4 2 1 4 2 1 4

其中由於機台的限制所以必須將目標色面轉至底面也就是元素 1 的內容

必須與目標面的顏色編號相同在步驟一中目標面位於前面所以機器人必須先

平台旋轉 180 度然後手臂翻一次面再夾住方塊正轉 90 度而目標面的可能位

置共有 6 種它們的機台動作與陣列變化如下所示為了簡化在此只列出目標

面A與相對面A其餘為X

case I目標面位於底面

A X X 夾住旋轉

無須旋轉翻面可以直接夾住旋轉

case II目標面位於前面

X A X X X A X A X A X X 夾住旋轉

先旋轉 180度再翻一次面然後夾住旋轉則可得知 case II的動作為RRT

case III目標面位於右面

X X A X A X A X X 夾住旋轉

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 54: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

46

先正轉 90 度再翻一次面然後夾住旋轉則可得知 case III 的動作為 RT

case IV目標面位於左面

X X A X A X A X X 夾住旋轉

先反轉 90 度再翻一次面然後夾住旋轉則可得知 case IV 的動作為 LT

case V目標面位於後面

X A X A X X 夾住旋轉

翻一次面然後夾住旋轉則可得知 case V 的動作為 T

case VI目標面位於頂面

A X X X A X A X X 夾住旋轉

翻二次面然後夾住旋轉則可得知 case VI 的動作為 TT

之後我們可以利用以上 6 種情況來設計機器人的動作並且配合解題器所產

生出的解題過程

最後可以發現雖然解題器的過程只有 15 個步驟但是由於機台的動作限

制換成機器人的動作可能會有大約 70 個步驟在此則設計了一個對應於解題

器結果的機器人動作對照程式將所有步驟的目標色面編號以及夾住旋轉多少度

列成陣列如下所示

2 1 4 2 3 4 1 5 6 1 3 2 6 5 3 目標色面

r ℓ ℓ 2r r ℓ ℓ 2r r 2r ℓ r r ℓ ℓ 旋轉度數

為了方便設計將旋轉度數的英文代號改以數字表示

1 3 3 2 1 3 3 2 1 2 3 1 1 3 3 旋轉度數

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 55: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

47

其中旋轉度數的 1 為正轉 90 度2 為旋轉 180 度3 為反轉 90 度再配合

先前的目標色面位置與機器人動作進行判斷以及各機器人動作的方塊色面變化

規律進行狀態更新可產生以下所示方塊的起始狀態為1 2 3

步驟一

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 1 4 方塊現在的狀態

步驟二

case II RRT

revolve right 180 平台旋轉 180 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 2 3 方塊現在的狀態

步驟三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 56: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

48

4 1 5 方塊現在的狀態

步驟四

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

2 4 6 方塊現在的狀態

步驟五

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

3 2 6 方塊現在的狀態

步驟六

case IV TT

turn twice 翻轉二次

catch and revolve -90 夾住旋轉-90 度

ind =

4 5 6 方塊現在的狀態

步驟七

case VI LT

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 57: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

49

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

1 4 2 方塊現在的狀態

步驟八

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 180 夾住旋轉 180 度

ind =

5 1 3 方塊現在的狀態

步驟九

case V T

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 5 3 方塊現在的狀態

步驟十

case IV TT

turn twice 翻轉二次

catch and revolve 180 夾住旋轉 180 度

ind =

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 58: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

50

1 2 3 方塊現在的狀態

步驟十一

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 1 2 方塊現在的狀態

步驟十二

case III RT

revolve right 90 平台正轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

2 3 1 方塊現在的狀態

步驟十三

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve 90 夾住旋轉 90 度

ind =

6 2 4 方塊現在的狀態

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 59: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

51

步驟十四

case V T

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

5 6 4 方塊現在的狀態

步驟十五

case VI LT

revolve left 90 平台反轉 90 度

turn once 翻轉一次

catch and revolve -90 夾住旋轉-90 度

ind =

3 5 1 方塊現在的狀態

由以上可以得到更完整的機器人動作資訊而這些動作都是連貫下來的並

且隨時更新方塊的目前狀態

起始位置到步驟四

1 2 3 2 1 4 ℓ 1 2 3 ℓ 4 1 5 2 4 6

步驟五到步驟九

3 2 6 ℓ 4 5 6 ℓ 1 4 2 5 1 3 6 5 3

步驟十到步驟十四

1 2 3 3 1 2 2 3 1 6 2 4 ℓ 5 6 4 ℓ

步驟十五

3 5 1

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 60: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

52

第四章第四章第四章第四章 結論與未來結論與未來結論與未來結論與未來研究研究研究研究

41 結論結論結論結論

本論文以 PC 為基礎設計解魔術方塊機器人並運用樂高積木組合成理想的

實驗機構樂高積木的組合具有多變化性以及塑膠材料的低成本特性可大幅減

少機構的組裝時間及成本的開銷接著是讓 PC取得魔術方塊的 6 面顏色資訊

這裡使用了網路攝影機為影像擷取裝置與 CCD 相較之下雖然畫素較低但具

有 USB 隨插即用的優點也不需安裝影像擷取卡同時設備成本也較低之後

利用 MATLAB 的影像擷取工具箱將網路攝影機的影像擷取至資料庫並透過影

像處理工具箱對擷取的影像進行灰階及二元化處理適當的去除影像的白點以求

得方塊的邊框座標如此便可得知九個小方塊的涵蓋區域再針對這九個小方塊

進行顏色的判斷最後利用魔術方塊解題器套入6個色面的色彩分佈進行解題

並將解題步驟轉換為馬達的控制資訊透過 NXT 與樂高積木組合成的機構將方

塊的各色面轉正整體實驗結合了程式設計與運用以及硬體設備的應用

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 61: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

53

4-2 未來未來未來未來研究研究研究研究

本論文設計的解魔術方塊機器人尚有許多不足的地方例如在未來的發展上

可以將 PC端的 MATLAB魔術方塊解題器之演算法則實現在 NXT 控制盒上

也可以增加 NXT基底的影像擷取模組如 NXTCam並且可以改善解解題器的

演算法試著減少解題步驟以達到快速解題的目的而機構的部分可以改善機器

手臂的架構論文中的機構只使用 2 個馬達對於某些翻面動作是較為不便的

可以試著加入更多的馬達來省去不必要的翻面動作

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 62: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

54

參考參考參考參考文獻文獻文獻文獻

[1] httpcnncnnctuedutwIMLabctrl_tech國科會控制學門

[2] httpwwwerobotcomtw貝登堡機器人學苑

[3] httpwwwrstorgtw台灣機器人學會

[4] httpwwwroboatorgtw台灣機器人產業發展協會

[5] httpwwwmoigovtwstatindexaspx內政部統計處

[6] httpworldhondacomASIMO本田企業 ASIMO網頁

[7] httpwwwparorobotscomParo介紹網頁

[8] httpprobovubacbeProbo介紹網頁

[9] http1401121470tchotnewshtm國立台灣大學機器人實驗室

[10] httpiralabeentuedutwrcluo羅仁權教授網頁

[11] httpwwwrobotworldorgtwindexhtmpid=8ampNews_ID=565機器人世界

情報網

[12] httpenwikipediaorgwikiLego_Mindstorms_NXTTechnical_specifications

維基百科 NXT介紹

[13] 陸嘉宏魔術方塊破解祕笈高寶出版社2007年

[14] 許技江魔術方塊高手制霸技采竹出版社2009年

[15] 陸嘉宏速解高手20秒解開魔術方塊高寶出版社2010年

[16] httpwwwdavidguoidvtwCube國立台灣師範大學郭君逸助理教授魔術

方塊網站

[17] httpwwwyoutubecomwatchv=bNAnUygqOYcampfeature=relatedYouTube

解魔術方塊機器人影片

[18] httpwwwyoutubecomwatchv=htnL1KTpaY8ampfeature=related YouTube

解魔術方塊機器人影片

[19] httpwwwyoutubecomwatchv=eaRcWB3jwMoYouTube解魔術方塊機器

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿
Page 63: ʭ Ѥ ) - chur.chu.edu.twchur.chu.edu.tw/bitstream/987654321/42964/1/098CHPI5442034-001.pdf · NXT. In the Matlab part, a CCD Web camber is used to obtain the color information of

55

人影片

[20] httpwwwyoutubecomwatchv=ylFb4pqAUd8ampfeature=related YouTube

解魔術方塊機器人影片

[21] httpwwwyoutubecomwatchv=9eXU83RQbOgYouTube解魔術方塊機器

人影片

[22] httpbricxccsourceforgenetBricxCC網站

[23] 曾吉弘謝宗翰侯俊宇機器人新視界 NXC 與 NXT藍海文化2009

[24] httpwwwterasoftcomtweduind6html鈦思科技

[25] Alasdair McAndrew數位影像處理高立圖書2005年

[26] httpdragoncubeorg今古庸龍魔方網站

  • 鮑柏年封面pdf
  • 鮑柏年摘要
  • 鮑柏年定稿