i 崑山科技大學 資訊工程系 專題製作報告 隨身導覽機器人 學 生:鄭郁翰、郭冠佑、張家翔 指導老師:黃慶祥 中華民國一百年六月
i
崑山科技大學
資訊工程系
專題製作報告
隨身導覽機器人
學 生:鄭郁翰、郭冠佑、張家翔
指導老師:黃慶祥
中華民國一百年六月
ii
iii
隨身導覽機器人
學 生:鄭郁翰 Student: Cheng , Yu-Han
郭冠佑 Kuo , Guan-You
張家翔 Chang , Chia-Hshiang
指導老師:黃慶祥 Advisor: Ching-Shiang Huang
崑山科技大學
資訊工程系
專題報告
A Report
Submitted to Department of Information Engineering
Kun Shan University
in Partial Fulfillment of the Requirements
for the Degree of Bachelor
in
Information Engineering
June 2011
Tainan, Taiwan, Republic of China
中華民國一百 年六 月
1
隨身導覽機器人
學生:鄭郁翰、郭冠佑、張家翔
指導老師:黃慶祥
崑山科技大學資訊工程系
摘 要
隨身導覽機器人主要應用於博物館等展覽場合中,功能目的在於跟隨
在訪客身後,與訪客一同參訪博物館,當機器人偵測到於展覽物品附
近時,將會撥放相關的導覽影音檔案,對訪客進行講解說明。
本系統以開放原始碼套件「ARToolkit」作為實作之基礎,其原本於擴
增實境之應用上,本專題中取其標記辨識方式作為機器人追蹤定位之
基本,透過標記位置的辨識,使機器人能判斷出訪客的方位後,再進
行移動跟隨,達到「隨身」的目的;與此同時,機器人具備RFID讀取
感應器,隨時地偵測附是否有導覽物的存在,以提供訪客導覽服務。
有鑑於實際的展場應用,我們將影像標記的呈現方式,設計在一種簡
易的背心上,將標記印製在背心後方,讓訪客容易穿脫背心,並在穿
上後,就能帶著機器人參訪展館,有效的幫助使用上的便利。
2
目 錄
授權書 ............................................................................................................................. iii
摘要 ................................................................................................................................... 1
目錄 ................................................................................................................................... 2
第一章 緒論 .................................................................................................................. 4
1.1 研究動機與目的 ............................................................................................... 4
1.2 研究背景 ........................................................................................................... 5
第二章 相關研究 ........................................................................................................ 10
2.1 MICROSOFT .NET FRAMEWORK ...................................................................... 10
2.2 MICROSOFT VISUAL BASIC .............................................................................. 11
2.3 ARTOOLKIT ..................................................................................................... 13
2.4 無線射頻辨識技術 ........................................................................................ 14
第三章 系統架構 ........................................................................................................ 18
3.1 概述 ................................................................................................................ 18
3.2 標記辨識模組 ................................................................................................ 20
3.3 機器人移動之控制 ........................................................................................ 21
3.4 RFID導覽之架構 ........................................................................................... 22
第四章 系統實現 ........................................................................................................ 23
4.1 主控制程式 .................................................................................................... 23
4.2 標記辨識程式 ................................................................................................ 29
4.3 導覽影音檔配置 ............................................................................................ 30
4.4 標記背心設計 ................................................................................................ 33
4.5 RFID READER ................................................................................................. 37
4.6 控制板 ............................................................................................................ 37
4.7 電腦主機 ........................................................................................................ 38
4.8 主機電力來源 ................................................................................................ 39
3
第五章 成果 ................................................................................................................ 41
5.1 成品展示 ......................................................................................................... 41
5.2 程式開啟步驟 ................................................................................................. 44
第六章 結論 ................................................................................................................ 49
參考文獻 ....................................................................................................................... R-1
附錄A 主控制程式之程式碼 .................................................................................. R-2
4
第一章
緒論
1.1 研究動機與目的
目前世界各國對於研究接待用的導覽機器人正方興未艾,但是由於
現階段導覽機器人技術層面高,導致價格偏高,數量不多,許多也
以租用方式流通,而許多場合並不需要價格如此高昂的導覽機器人
進行,故如何降低成本,使之適合更多一般的展覽場合,進而更容
易普及於市場是相當重要的。
事實上,國內已經有不少展覽會場具備基礎的導覽裝置,例如
在許多博物館中都備有所語音導覽設備可供借用,透過Wi-Fi
Phone / PDA就可以在館中「自助式參觀」,另外也有展場中設置
了許多導覽資訊站設備,但其功能僅限於訪客在固定位置使用,其
主要之導覽系統仍然在於PDA上透過無線網路的應用;由此可見,
國內許多博物館雖然已經建置了導覽系統,提供訪客可以自助參
訪,但是多數仍然停留在訪客被動查詢的腳步,而不如實際的導覽
人員主動介紹,最後淪為資訊檢索的工具罷了。
5
有鑑於此,如何設置一個適合展場應用,能夠達到容易部屬、
價格適宜的導覽系統是需要重視的,但更重要得是,如何能夠使
其更加與訪客進行互動,使之能如同真實的導覽人員一般貼身導
覽解說,更是研究的最大重點與目標。
1.2 研究背景
儘管國內許多博物館目前建置的導覽系統多數仍處於無線網路
與手持裝置的搭配運用;但事實上,已經有不少實用化的導覽機器
人問世,有的更已經投入市場。
1.2.1 Rhino與Minerva
在 1990 年代期間,美、德兩國透過學術(包含馬里蘭大學、
波昂大學、阿亨大學)合作的方式,開啟了導覽機器人發展計
劃。
6
主要就是針對室內定位導航技術進行研究,以雷射掃描裝
置與超音波探測裝置為基礎,作為機器人判斷室內環境狀況、
知道自身位置的方式,使機器人具有辨識周邊靜態或動態障礙
物位置的能力,進而自主地建立環境地圖,並進行迴避或行進
路線規劃的判斷與執行。
1.2.2 Wakamaru
由日本著名汽車大廠三菱重工所開發,是以居家服務、導覽服
務為目的而設計的。
Wakamaru 以兩輪差動驅動方式進行移動,主要是以一部
全向式攝影機與一部前方攝影機作為探知周邊環境狀況的方
法,搭配紅外線與超音波感測器,檢知近距離障礙物的距離物
置。藉由影像辨識技術 Wakamaru 能認識所有者和家人的臉,
7
並主動打招呼,進行交流。外出時,也可以透過手機操作
Wakamaru,來觀察家中情況。
1.2.3 Enon
由富士通公司所開發,正在神奈川縣八千代市的某家購物中
心服務,擔任機器人店員的任務。
enon 以兩輪差動驅動方式進行移動,共計搭載了 6 台攝影
機,作為四周環境資訊的主要獲得方式。利用觸摸式 LCD 顯視
器,以視覺圖像提供眾多便於操作的訊息。在機器人的設計
上,安排了置物的空間,能夠載重 10kg 的重物。
1.2.4 PGR01與Jinny
韓國 ROBOTECH 公司的 PGR(Post Guide Robot)01 主要是針對
8
郵局內的使用需求來設計。Jinny 則由韓國科學與技術研究所與
Bonavision 公司智慧型機器人研究中心共同開發,針對博物館
的需求而設計,於 2004 年 9 月開始安裝在韓國國立科學博物
館中,進行導覽任務。
PGR01 機身前的觸碰螢幕可提供各種所需的資訊,如:尋找
區號、列印郵寄地址、以及提供相關資料等功能。Jinny 能夠與
遊客交流、回答遊客提出的問題,在行走、導覽的同時可以配
合動作和神情,同時能夠監測到障礙物並避開。
1.2.5 EMIEW
由日立公司所開發,適合進行餐廳的接待或旅館的搬運行李工
作,實際上 EMIEW 正在一些國際級飯店運作中。
9
EMIEW 採用倒立式二輪移動機構,以內藏的感測器計算重
心的傾斜角度,再配合控制車輪的驅動,達到安定地移動。且
藉由聽覺與視覺感測器的幫助,EMIEW 能夠在 1 公尺左右的距
離,朝向聲音的來源進行聲音的分析辨識與人臉的辨別,同時
EMIEW 具有各 6 自由度的雙腕,能夠進行提取物品或搬運物品
的動作
10
第二章
相關研究
2.1 Microsoft .NET Framework
.NET Framework 是由微軟開發,一個致力於敏捷軟體開發(Agile
software development)、快速應用開發(Rapid application
development)、平臺無關性和網路透明化的軟體開發平臺。.NET
是微軟為下一個十年對伺服器和桌上型軟體工程邁出的第一步。
NET包含許多有助於網際網路和內部網應用迅捷開發的技術。
.NET Framework是微軟公司繼Windows DNA之後的新開發平臺。.NET
Framework是以一種採用系統虛擬機執行的編程平臺,以通用語言
執行庫(Common Language Runtime)為基礎,支援多種語言(C#、
VB.NET、C++、Python等)的開發。
.NET也為應用程式介面(API)提供了新功能和開發工具。這些革
新使得程式設計員可以同時進行Windows應用軟體和網路應用軟體
以及元件和服務(web服務)的開發。.NET提供了一個新的反射性
11
的且物件導向程式設計編程介面。.NET設計得足夠通用化從而使許
多不同高階語言都得以被彙集。
2.2 Microsoft Visual Basic
2.2.1 概述
Visual Basic(VB)是由微軟公司開發的包含協助開發環境的事件
驅動程式語言。它源自於BASIC程式語言。VB擁有圖形使用者介面
(GUI)和快速應用程式開發(RAD)系統,可以輕易的使用DAO、
RDO、ADO連線資料庫,或者輕鬆的建立ActiveX控制項。程式設計
師可以輕鬆的使用VB提供的元件快速建立一個應用程式。
2.2.2 語言特性
VB的中心思想就是要便於程式設計師使用,無論是新手或者專家。
VB使用了可以簡單建立應用程式的GUI系統,但是又可以開發相當
複雜的程式。VB的程式是一種基於表單的視覺化元件安排的聯合,
並且增加代碼來指定組建的屬性和方法。因為預設的屬性和方法已
經有一部分定義在了元件內,所以程式設計師不用寫多少代碼就可
以完成一個簡單的程式。過去的版本裡面VB程式的效能問題一直被
放在了桌面上,但是隨著電腦速度的飛速增加,關於效能的爭論已
經越來越少。
表單控制項的增加和改變可以用拖放技術實作。一個排列滿控制項
的工具箱用來顯示可用控制項(比如文字域或者按鈕)。每個控制
12
項都有自己的屬性和事件。預設的屬性值會在控制項建立的時候提
供,但是程式設計師也可以進行更改。很多的屬性值可以在執行時
候隨著使用者的動作和修改進行改動,這樣就形成了一個動態的程
式。舉個例子來說:表單的大小改變事件中加入了可以改變控制項
位置的代碼,在執行時候每當使用者更改窗口大小,控制項也會隨
之改變位置。在文字域中的文字改變事件中加入相應的代碼,程式
就能夠在文字輸入的時候自動翻譯或者阻止某些字元的輸入。
VB的程式可以包含一個或多個表單,或者是一個主表單和多個子表
單,類似於作業系統的樣子。有很少功能的對話方塊窗口(比如沒
有最大化和最小化按鈕的表單)可以用來提供彈出功能。
VB的元件既可以擁有使用者介面,也可以沒有。這樣一來伺服器端
程式就可以處理增加的模組。
VB使用參照計數的方法來進行垃圾收集,這個方法中包含有大量的
物件,提供基本的物件導向支援。因為越來越多組建的出現,程式
設計師可以選用自己需要的擴充功能函式庫。和有些語言不一樣,
VB對大小寫不敏感,但是能自動轉換關鍵詞到標準的大小寫狀態,
以及強制使得符號表入口的實體的變數名稱遵循書寫規則。預設情
況下字串的比較是對大小寫敏感的,但是可以關閉這個功能。
13
VB使得大量的外界控制項有了自己的生存空間。大量的第三方控制
項針對VB提供。VB也提供了建立、使用和重用這些控制項的方法,
但是由於語言問題,從一個應用程式建立另外一個並不簡單。
2.3 ARToolkit
ARToolKit 是一個 C/C++ 語言編寫的函式庫,透過此函式庫可以
讓我們輕鬆的編寫擴增實境應用程式。擴增實境 (Augmented Reality)
是將電腦虛擬的影像覆蓋到真實世界畫面中,這個技術在工業、教育、
藝術方面都存在著極大的前景。
對於開發一個 AR 程式來說,最困難的部分在於即時 (real-time)
的將虛擬影像覆蓋到使用者的視覺,並且和真實世界中的物件精確對
齊。ARToolKit 以電腦圖學計算相機 (Camera) 和標記 (Marker) 之
間的相對位置,使開發者能夠將他們的虛擬物件依據標記在真實環境
上的相關資訊覆蓋到真實環境中。ARToolKit 提供快速和準確的標記
追蹤 (Marker Tracing),能使開發者快速的開發出許多有趣的 AR 程
式。
2.4 無線射頻辨識技術
無線射頻辨識即RFID(Radio Frequency IDentification,RFID)技術,
又稱電子標籤,是一種通訊技術,可通過無線電訊號識別特定目標並
讀寫相關數據,而無需識別系統與特定目標之間建立機械或光學接
觸。RFID標籤分為被動,半被動(也稱作半主動),主動三類。
14
2.4.1 RFID標籤的類別
被動式
被動式標籤沒有內部供電電源。其內部積體電路通過接收到的電磁
波進行驅動,這些電磁波是由RFID讀取器發出的。當標籤接收到足
夠強度的訊號時,可以向讀取器發出數據。這些數據不僅包括ID號
(全球惟一代碼),還可以包括預先存在於標籤內EEPROM (電可
擦拭可編程唯讀記憶體)中的數據。
由於被動式標籤具有價格低廉,體積小巧,無需電源的優點。目前
市場的RFID標籤主要是被動式的。
半被動式
一般而言,被動式標籤的天線有兩個任務:
1.接收讀取器所發出的電磁波,藉以驅動標籤IC
2.標籤回傳信號時,需要靠天線的阻抗作切換,才能產生0與1
的變化。
問題是,想要有最好的回傳效率的話,天線阻抗必須設計在「開路
與短路」,這樣又會使信號完全反射,無法被標籤IC接收,半主動
式標籤就是為了解決這樣的問題。半主動式類似於被動式,不過它
多了一個小型電池,電力恰好可以驅動標籤IC,使得IC處於工作的
狀態。這樣的好處在於,天線可以不用管接收電磁波的任務,充分
作為回傳信號之用。比起被動式,半主動式有更快的反應速度,更
好的效率。
主動式
15
與被動式和半被動式不同的是,主動式標籤本身具有內部電源供應
器,用以供應內部IC所需電源以產生對外的訊號。一般來說,主動
式標籤擁有較長的讀取距離和較大的記憶體容量可以用來儲存讀取
器所傳送來的一些附加訊息。
2.4.1 技術及性能參數
無線射頻辨識標籤是目前無線射頻辨識技術的關鍵。無線射頻辨識
標籤可存儲一定容量的資訊並具一定的資訊處理功能,讀寫設備可
通過無線電訊號以一定的數據傳輸率與標籤交換資訊,作用距離可
根據採用的技術從若干厘米到1千米不等。
識別標籤的外形尺寸主要由天線決定,而天線又取決於工作頻率和
對作用距離的要求。目前有四種頻率的標籤在使用中比較常見。他
們是按照他們的無線電頻率劃分:低頻標籤(125或134.2 kHz),
高頻標籤(13.56 MHz),超高頻標籤(868~956 MHz)以及微波標
籤(2.45 GHz)。由於目前尚未制定出針對超高頻標籤使用的全球
規範,所以此類標籤還不能夠在全球統一使用。而超高頻標籤的應
用目前也最受人們的注意,此類標籤主要應用在物流領域。頻率越
高,作用距離就越大,數據傳輸率也就越高,識別標籤的外形尺寸
就可以做得更小,但成本也就越高。目前面向消費者的識別標籤外
形尺寸需求,一般以信用卡或商品條形碼為準。
2005年初每標籤的價格仍在30歐分左右,大批量(十億個以上)生
產的無線射頻辨識標籤的價格可望在2008年降至10歐分以下。
16
鑒於標籤和讀寫設備之間無需建立機械或光學接觸,密碼技術在整
個無線射頻辨識技術領域中的地位必將日益提高。隨著無線射頻辨
識的普及,不同廠家的標籤和讀寫設備之間的兼容性也將成為值得
關注的問題。
此外,使用壽命、使用環境和可靠性也是重要參數。無線射頻辨識
技術還包括了一整套資訊科技基礎設施,包括:
無線射頻辨識標籤,又稱射頻標籤、電子標籤,主要由存有識別代
碼的大規模集成線路晶片和收發天線構成,目前主要為無源式,使
用時的電能取自天線接收到的無線電波中的能量;
無線射頻辨識讀寫設備以及
與相應的資訊服務系統,如進存銷系統的聯網等。
將射頻類別技術與條碼(Barcode)技術相互比較,射頻類別擁有許
多優點,如:
可容納較多容量。
通訊距離長。
難以複製。
對環境變化有較高的忍受能力。
17
可同時讀取多個標籤。
相對地有缺點,就是建置成本較高。不過目前透過該技術的大量使
用,生產成本就可大幅降低。
18
第三章
系統架構
3.1 概述
本系統主要分為三大模組,核心為「主控制程式」部分,為蒐集
RFID、影像辨識結果,進行機器人要執行的動作判斷,並發出動作指
令;實際各單元之架構如下。
19
標記辨識模組主要用於透過攝影機取得影像,判斷出目標物之相
對位置,而機器人控制模組則透過此訊號,計算出機器人應該如何移
動才能持續跟隨目標物。其機器人跟隨之運作流程如下圖所示。
20
3.2 標記辨識模組
本系統核心為辨識特殊標記來確認目標位置,進而達到跟隨之目
的;本模組使用開放原始碼套件ARToolkit作為實作之基礎,透過其
本身檢測標記之能力,我們將持續檢測的結果傳送到機器人控制模
組進行跟隨之應用。
21
3.3 機器人移動之控制
透過追蹤圖像所得之機器人與目標物之相對位置資訊,計算出機器
人應當如何移動才能持續跟隨目標物,並且依照其計算發出相對應
之控制訊號。
其控制方式主要優先權為先判斷機器人與目標物之距離,若在一定
距離之內則不再前進,其次才是判斷在一定距離之外時,若判斷目
標物於機器人正前方,則機器人直線進行,若為偏左或偏右,則執
行轉彎之動作。其具體控制方式,如下列出之程式虛擬碼。
Z:機器人與標記之前後距離(Z軸)
X:機器人與標記之左右距離(X軸)
if (Z<1000)則不動 (小於1公尺)
else{
if( Z >1000 And X/Z>2.6 And X/Z<-2.6) //(2.6與-2.6為自訂之門檻值)
{直行}
else if( Z/X < 2.6 And Z/X > 0)
{左轉}
else if (Z/X > -2.6 And Z/X < 0)
{右轉}
}
22
3.4 RFID導覽之架構
以超高頻RFID感應器辨識展覽物是否在附近,停下腳步進行語音導
覽,結束後繼續跟隨。以下為RFID導覽之架構圖
我們設計將導覽檔案以XML文件進行描述,當程式啟動時載入該文
件,文件中紀錄了該展覽品之RFID卡號、導覽檔存放位置等等,當
偵測到一個RFID卡片存在時,會先與該XML文件進行比對,如果於該
文件內代表為目標展覽物,並且取出該文件內所描述之導覽影音檔
案。
23
第四章
系統實現
4.1 主控制程式
本「隨身導覽機器人」之程式碼主要分為以ARToolkit為基礎的辨
識標記程式,以及RFID偵測程式與主要的控制程式,RFID偵測程式
目前已經編譯為DLL,於主控程式中呼叫使用。本主控程式主要處
理由標記辨識模組與RFID辨識所得之資訊,判斷如何控制機器人。
本程式以Visual Basic .NET 撰寫實作。
4.1.1 機器人移動控制
主控制程式將蒐集影像辨識之結果,進行移動方式的判斷;以下
副程式為與控制板進行連線的建立設定。必須先進行成功連接才
能繼續進行其他控制,例如前進、左轉、右轉等控制。
24
對於機器人的控制,實際是將訊號透過序列連接埠傳送到控制板
上,我們將不同的控制訊號寫在不同的副程式中,以下為左轉的
實作程式,一般會在目標物偏向攝影機左邊時被主控制程式呼
叫。
以下為右轉的實作程式,一般會在目標物偏向攝影機右邊時被主
控制程式呼叫。
25
以下為右轉的實作程式,一般會在目標物被判定於中間時會被主
控制程式呼叫。
以下為命令機器人停止的實作程式,一般會在偵測不到目標物或
距離與目標物過近等其他不需進行移動的狀況被呼叫。
26
。
4.1.2 程式初始化
本程式執行後,會先載入導覽檔案的設定檔(XML設定檔),並且進
行RFID以及機器人移動控制之通訊埠之連接。
27
4.1.3 依據標記控制機器人
程式中主要有兩個Timer控制項,分別為接受RFID訊號來進行導覽
以及接收ARToolkit辨識結果來控制機器人,用以處理標記辨識結
果之Timer控制項其關鍵程式碼如下:
由於辨識之程式目前是以剪貼簿之方式進行資料之傳遞,故Timer
每次觸發時都先取出辨識結果資料,在取出他的x,y,z值後,在進
行
設計出要進行左轉、右轉、直行、停止之條件。若沒有偵測到標記
將是停止不動(呼叫turnOff()方法)
28
4.1.4 依據RFID偵測進行導覽語音撥放
依據RFID偵測之結果,若為導覽品,則撥放相對應之導覽檔案。此
檔覽資料設定是在外部的XML檔案中,依據實際需求可做動態調整更
改。
以上程式碼片段中,AxWindowsMediaPlayer1.URL為設定導覽語音撥放
檔位置,Me.BackgroundImage為設定導覽圖片位置;其中變數MediaDir
為導覽檔放置位置,此變數為程式碼最上方宣告,可進行動態變更。
如下所示,預設為C:\MediaDir\
29
4.2 標記辨識程式
透過ARToolkit的偵測,我們可以取得目標物件之三維座標我們可從
從中取得與目標之間的距離(如下圖Z值),也可透過該目標位於相機
偏向左方或右方來判斷其與機器人的相對位置(如下圖Y值);再依據
此兩值來進行機器人的跟隨判斷資料,下圖為ARToolkit偵測目標標
記物之測詴程式。
以下程式碼片段為判斷標記是否為指定標記圖案之關鍵程式碼,若偵
測不為目標辨識之標記, 則直接拋出「null」字串表示無偵測到標
記(令主控制程式發出停止訊號)。
30
若有偵測到標記物,則將X、Y、Z軸之資訊傳至主控程式,本專題傳
遞之方式為透過系統剪貼簿方式。
4.3 導覽影音檔配置
本「隨身導覽機器人」之核心功能即為提供導覽服務,而導覽內容
也可能因為環境不同所變化,故本「隨身導覽機器人」將設定方式
31
以XML設定檔為之,未來依據實際應用場合,只需編寫其中設定,即
可在不需更動程式碼的狀況下變更導覽檔。以下為設定檔範例。
每一個List標籤均為一個導覽品。其設定格式如下
<item>
<title>導覽品的名稱(可隨意輸入)<title>
32
<path>導覽品資料夾名稱</path>
<rfidcode>RIFD卡號</rfidcode>
</item>
其導覽檔案放置方式詳見如下,程式碼中預設放在C:\MediaDir\
中,可動態變更主控程式的Media變數改變。
C:\MediaDir\底下之內容應該如下圖所示,每個資料夾是獨立放置
各個不同的導覽品介紹。也就是說,一個導覽品會有一個資料夾,
這個資料夾名稱就是用來設定XML檔案內的「path」屬性(導覽品資
料夾名稱)
33
打開每個導覽品資料夾後,會看到有兩個主要檔案;圖片應該被命
名為image.jpg,語音檔應該被命名為explain.mp3,程式才能正常
讀取。
所以,若要新增一個導覽品,只要在MediaDir內新增一個資料夾(名
稱自訂),並把導覽語音與圖片放進去(要把檔案名稱設定為
explain.mp3與image.jpg),然後將之新增在XML設定檔中即可。
4.4 標記背心設計
4.4.1 標記檔製作
ARToolkit標記為一黑色外框,其內放置圖案,程式判斷時先找
到黑色外框後,在判斷其內之圖案是否與所要找的目標標記相
同,此即該標記之「Mark ID」,該圖案上、下、左、右翻轉後
均不可相同(即不對稱),下圖為本系統所使用之標記。
34
隨身導覽機器人所辨識之標記是可以被更換的,程式運作方式為透
過攝影機抓取影像,先由影像中辨識出黑色方框後,在辨識方塊內
的圖案是否與程式設定的相同,而以下為黑色方框的範例。
將設計號的圖案置入黑框後,即可將其列印出來,透過ARToolkit
附屬的「mk_patt.exe」進行測詴與產生標記檔,「mk_patt.exe」
進入後將所列印的圖形放在攝影機前面,程式會自動辨識。如果有
辨識到,應該會與下圖一樣呈現紅色相間的外框。
35
辨識到後,在點擊視窗即可完成,並會於文字指令介面的視窗出現
「Enter filename」的輸入等待,此即表示程式詢問要將標記檔存
成什麼名稱,輸入欲儲存之檔案名稱並按下Enter即可。
36
4.4.2 實體背心製作
ARToolkit本身為透過辨識特殊之圖像標記確認出目標位置,例如可
以將之印在紙上、製成圖卡;但本系統為因應使用環境之不同需求,
特別設計一套解決方式-將標記印製於背心上,讓使用者只要穿上
背心,就能令機器人進行自動跟隨之行為。下圖為背心實際穿著使
用之實體照。
37
4.5 RFID reader
為了能夠偵測到附近的展覽物,機器人上設置了RFID reader,隱
藏於機器人前方妝飾內,可於機器人行進時偵測附近的環境是否有
展覽物的存在,以下為RFID感應器之實體照。
4.6 控制板
本專題利用攝影機抓取影像以ARtoolkit影像模組,再以三維座標計
算出機器人的移動方式,透過RS-232傳輸到控制馬達的微處理器
上,微處理器再執行相對應之控制程式,以下為控制板。
38
4.7 電腦主機
本導覽機器人之控制中心為一電腦主機,本專題之各項程式碼也運行
於此;為符合導覽機器人之需求,本專題使用之電腦主機為含有觸控
螢幕、揚聲器之All-in-One電腦,其部屬方式如下:
39
主機具備有觸控顯示器與揚聲器,可於偵測在展覽品時顯示導覽圖片
或展場資訊,及進行語音導覽。此主機雖內建有網路攝影機,但為求
偵測目標標記之精準度,我們以外接USB攝影機之方式來接收影像,其
攝影機之放置方式亦如圖中所示。
4.8 主機電力來源
本導覽機器人所用之電腦主機所需之電力電壓為19伏特直流電,我們
採用之電源裝置為將充電式電池置於機器人內部。其部署方式如下,
紅色所框圈處為電池置放處。
40
41
第五章
成果
5.1 成品展示
下圖為隨身導覽機器人正在與訪客講解說明有關展覽物的使用狀況。
(立牌模擬展覽物,藏有RFID卡片)
42
下圖隨身導覽機器人位於訪客身後,透過攝影機辨識訪客所穿著之標
記背心,進行跟隨。
下圖為特製標記背心。
43
下圖為導覽機器人整體拍攝圖。
44
5.2 程式開啟步驟
本章節說明「隨身導覽機器人」之PC端程式啟動方式,其操作前必須
先將控制板與電腦主機進行連接,並且將導覽影音正確置放與設定(依
展場需要設定)。以下為程式啟動之詳細步驟。
1.進入系統之裝置管理員,確認RFID reader與控制板與電腦主機串列
埠正確連接上,找到分別的COM連接埠;例如下圖之機器人為COM3,RFID
reader為COM5。
45
2. 開 啟 影 像 標 記 模 組 之 執 行 檔 程 式 ( rangeTest.exe )
,並設定其畫面撥放速率(建議調整為最高)與輸出大小,設定完後按
下確定
3. 成功開啟標記辨識程式,如下圖,將會出現一個攝影機擷取畫面。
(正常來說,如果在此畫面將標記放在攝影機前,標記在畫面中會顯
示被一個綠色框所包圍)
46
4.開啟主控制程式(robot.exe),先設定其機器人控制之COM埠(第一步
驟所記下的),輸入完畢後按下確定(第四步驟與第五步驟設定方式為
方便測詴或因應現場不同狀況所設,實際使用應將連接埠設定於程式
之中,讓程式開啟後即可馬上運作。
47
5. 設定其RFID之COM埠(第一步驟所記下的),輸入完畢後按下確定
48
6.在以上設定完後,出現以下畫面代表成功開啟。
若程式已成功進入如上之畫面,表示已經成功開啟,可詴著將標記放
在機器人前方(需距離一公尺以上),若機器人可正常前進,表示機
器人連接正常。
49
第六章
結論
本專題以ARToolkit為基礎搭配攝影機取得特殊標誌的三維座標
參數計算出距離與範圍,再送出控制指令來控制馬達,達到跟隨訪客
的目的,且機器人內配有超高頻RFID偵測展覽品,偵測到之後會替訪
客做展覽品文字與語音上的介紹。機器人的自動跟隨與RFID偵測,可
應用在各種展覽、博物館、美術館,透過機器人詳細的介紹,讓訪客
覺得如實體導覽員一般。
本導覽機器人並不僅只限制使用於展覽會場,由於本身具有跟隨
訪客的功能,若能將其延伸到購物賣場,只要將機器人加掛載貨箱,
能讓訪客將身上的行李放上,就能協助訪客放下肩上重擔,協助載運
行李。
R-1
參考文獻
1. ARToolKit Documentation , http://www.hitl.washington.edu/artoolkit/
2. “全球導覽機器人產品現況報導” , 機器人世界情報網 , 精密機械研究發展中
心 張昫揚 , http://www.robotworld.org.tw/index.htm?pid=10&News_ID=665
3. 維基百科 , http://zh.wikipedia.org/
R-2
4. 附錄 A
主控制程式之程式碼
Imports System
Imports System.IO.Ports
Imports System.Data
Imports System.Xml
Imports YuHanLib
Imports System.Net
Public Class Form1
Dim port As Integer = 0 '232 無回應警告
Dim system_init As Boolean = False '系統初始化狀況
Dim rs232_data_in As String = ""
Dim RFIDtag As RFIDreader
Dim ds As New XmlDocument
Dim xn As XmlNodeList
Dim MediaDir As String = "C:\MediaDir\"
Dim bgimg As Image = Image.FromFile("bgimg.jpg")
Dim saveCode As String = ""
Dim saveCount As Integer = 0
Dim pwd As String
Dim z_num As Double = 1000
Dim rfid_port As String
R-3
Dim robot_port As String
Private Sub Form1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Click
AxWindowsMediaPlayer1.Ctlcontrols.stop()
RFIDtag.GetTagIDTable()
Me.BackgroundImage = bgimg
Timer3.Enabled = True
Timer2.Enabled = True
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
End
Me.Close()
End Sub
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Down Then
back()
ElseIf e.KeyCode = Keys.Up Then
straight()
ElseIf e.KeyCode = Keys.Right Then
turnRight()
ElseIf e.KeyCode = Keys.Left Then
turnLeft()
R-4
ElseIf e.KeyCode = Keys.End Then
turnOff()
ElseIf e.KeyCode = Keys.A Then
If Timer1.Enabled = True Then
Timer1.Enabled = False
Else
Timer1.Enabled = True
End If
ElseIf e.KeyCode = Keys.R Then
If Timer2.Enabled = True Then
Timer2.Enabled = False
Else
saveCode = ""
saveCount = 0
Timer2.Enabled = True
End If
ElseIf e.KeyCode = Keys.B Then
Dim tempa As Integer = CDbl(InputBox("設定 Z 值最小距離(單位:
公厘)"))
If tempa > 1 Then
z_num = tempa
End If
End If
End Sub
R-5
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
MaximizeBox() = False
Me.BackgroundImage = bgimg
ds.LoadXml(My.Computer.FileSystem.ReadAllText("ItemList.xml"))
xn = ds.SelectNodes("/list/item")
system_init = True
robot_port = "COM3"
rfid_port = "COM5"
RobotConn(robot_port, "9600")
While chack_232() = False
SerialPort2.Close()
SerialPort2.Dispose()
RobotConn(robot_port, "9600")
End While
RFIDtag = New RFIDreader(rfid_port, "57600")
Timer2.Enabled = True
R-6
'setSpeed(4)
End Sub
Sub RobotConn(ByVal port As String, ByVal baudrate As String)
Dim clr As String
Try
If SerialPort2.IsOpen = False Then
SerialPort2.PortName() = port
SerialPort2.BaudRate() = baudrate
SerialPort2.Open()
port = 0
clr = SerialPort2.ReadExisting() '清除暫存
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Function chack_232() '檢查是否正常連上機器人
Dim ST(5) As Byte
ST(0) = Val("&H01")
ST(1) = Val("&H03")
ST(2) = Val("&H53")
ST(3) = Val("&H54")
ST(4) = Val("&HFF")
R-7
SerialPort2.Write(ST, 0, 5)
port = 0
While (1)
port = port + 1
If SerialPort2.BytesToRead >= 4 Then
Dim ch As String = SerialPort2.ReadExisting
If ch.StartsWith("EVST") Then
Dim STOK(7) As Byte
STOK(0) = Val("&H01")
STOK(1) = Val("&H05")
STOK(2) = Val("&H53")
STOK(3) = Val("&H54")
STOK(4) = Val("&H4F")
STOK(5) = Val("&H4B")
STOK(6) = Val("&HFF")
SerialPort2.Write(STOK, 0, 7)
'Button13.Enabled = True
'Button1.Enabled = False
'MsgBox("連 線 成 功")
port = 0
Dim cls As String = SerialPort2.ReadExisting
If SerialPort2.IsOpen = True Then
Timer1.Enabled = True
End If
Return True
End If
R-8
ElseIf port >= 32760 Then
'MsgBox("回 應 時 間 閒 置 過 久")
'SerialPort2.Dispose()
'Button1.Text = "系 統 連 線"
'Button1.ForeColor = Color.Green
'ComboBox1.Enabled = True
'ComboBox2.Enabled = True
Return False
End If
End While
Return False
End Function
Private Sub SerialPort2_DataReceived1(ByVal sender As Object, ByVal e
As System.IO.Ports.SerialDataReceivedEventArgs) Handles
SerialPort2.DataReceived
If SerialPort2.IsOpen = True Then
If SerialPort2.ReadByte = Val("&H02") Then
rs232_data_in = ""
For i As Integer = 1 To Val(SerialPort2.ReadByte)
rs232_data_in = rs232_data_in & Chr(SerialPort2.ReadByte)
Next
If rs232_data_in.StartsWith("XYZ") Then
RS_xyz = rs232_data_in
ElseIf rs232_data_in.StartsWith("XY") Then
RS_xy = rs232_data_in
R-9
ElseIf rs232_data_in.StartsWith("CO") Then
RS_co = rs232_data_in
ElseIf rs232_data_in.StartsWith("EN") Then
RS_en = rs232_data_in
ElseIf rs232_data_in.StartsWith("UL") Then
RS_ul = rs232_data_in
End If
End If
End If
End Sub
Private Sub turnLeft()
If system_init = True Then
If SerialPort2.IsOpen = True Then
Dim UPASLT(9) As Byte
UPASLT(0) = Val("&H01")
UPASLT(1) = Val("&H07")
UPASLT(2) = Val("&H55")
UPASLT(3) = Val("&H50")
UPASLT(4) = Val("&H41")
UPASLT(5) = Val("&H53")
UPASLT(6) = Val("&H4C")
UPASLT(7) = Val("&H54")
UPASLT(8) = Val("&HFF")
SerialPort2.Write(UPASLT, 0, 9)
Else
R-10
MsgBox("系 統 尚 未 連 線")
End If
End If
End Sub
Private Sub turnRight()
If system_init = True Then
If SerialPort2.IsOpen = True Then
Dim UPASRT(9) As Byte
UPASRT(0) = Val("&H01")
UPASRT(1) = Val("&H07")
UPASRT(2) = Val("&H55")
UPASRT(3) = Val("&H50")
UPASRT(4) = Val("&H41")
UPASRT(5) = Val("&H53")
UPASRT(6) = Val("&H52")
UPASRT(7) = Val("&H54")
UPASRT(8) = Val("&HFF")
SerialPort2.Write(UPASRT, 0, 9)
Else
MsgBox("系 統 尚 未 連 線")
End If
End If
End Sub
Private Sub turnLeft_退後版()
If system_init = True Then
If SerialPort2.IsOpen = True Then
R-11
Dim DNASRT(9) As Byte
DNASRT(0) = Val("&H01")
DNASRT(1) = Val("&H07")
DNASRT(2) = Val("&H44")
DNASRT(3) = Val("&H4E")
DNASRT(4) = Val("&H41")
DNASRT(5) = Val("&H53")
DNASRT(6) = Val("&H52")
DNASRT(7) = Val("&H54")
DNASRT(8) = Val("&HFF")
SerialPort2.Write(DNASRT, 0, 9)
Else
MsgBox("系 統 尚 未 連 線")
End If
End If
End Sub
Private Sub turnRight_退後版()
If system_init = True Then
If SerialPort2.IsOpen = True Then
Dim DNASLT(9) As Byte
DNASLT(0) = Val("&H01")
DNASLT(1) = Val("&H07")
DNASLT(2) = Val("&H44")
DNASLT(3) = Val("&H4E")
DNASLT(4) = Val("&H41")
DNASLT(5) = Val("&H53")
R-12
DNASLT(6) = Val("&H4C")
DNASLT(7) = Val("&H54")
DNASLT(8) = Val("&HFF")
SerialPort2.Write(DNASLT, 0, 9)
Else
MsgBox("系 統 尚 未 連 線")
End If
End If
End Sub
Private Sub straight()
If system_init = True Then
'前進
If SerialPort2.IsOpen = True Then
Dim UPSY(7) As Byte
UPSY(0) = Val("&H01")
UPSY(1) = Val("&H05")
UPSY(2) = Val("&H55")
UPSY(3) = Val("&H50")
UPSY(4) = Val("&H53")
UPSY(5) = Val("&H59")
UPSY(6) = Val("&HFF")
SerialPort2.Write(UPSY, 0, 7)
Else
MsgBox("系 統 尚 未 連 線")
End If
End If
R-13
End Sub
Private Sub back()
If system_init = True Then
If SerialPort2.IsOpen = True Then
Dim DNSY(7) As Byte
DNSY(0) = Val("&H01")
DNSY(1) = Val("&H05")
DNSY(2) = Val("&H44")
DNSY(3) = Val("&H4E")
DNSY(4) = Val("&H53")
DNSY(5) = Val("&H59")
DNSY(6) = Val("&HFF")
SerialPort2.Write(DNSY, 0, 7)
Else
MsgBox("系 統 尚 未 連 線")
End If
End If
End Sub
Private Sub turnOff()
'停止
If system_init = True Then
If SerialPort2.IsOpen = True Then
Dim HLT(6) As Byte
HLT(0) = Val("&H01")
HLT(1) = Val("&H04")
HLT(2) = Val("&H48")
R-14
HLT(3) = Val("&H4C")
HLT(4) = Val("&H54")
HLT(5) = Val("&HFF")
SerialPort2.Write(HLT, 0, 6)
Else
MsgBox("系 統 尚 未 連 線")
End If
End If
End Sub
Private Sub setSpeed(ByVal speed As Integer)
Dim SP(6) As Byte
SP(0) = Val("&H01")
SP(1) = Val("&H04")
SP(2) = Val("&H53")
SP(3) = Val("&H50")
SP(4) = speed + 49
SP(5) = Val("&HFF")
SerialPort2.Write(SP, 0, 6)
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
Try
If SerialPort2.IsOpen = True Then
Dim clipboardTemp = My.Computer.Clipboard.GetText()
If clipboardTemp <> "null" Then
R-15
Dim cam_value As String() = clipboardTemp.Split(",")
Dim x As Double = CDbl(cam_value(0))
Dim y As Double = CDbl(cam_value(1))
Dim z As Double = CDbl(cam_value(2))
Dim aaa As Double = 4
If x <> 0 Then
If z >= z_num And (z / x >= aaa Or z / x <= aaa - aaa * 2)
Then
straight()
ElseIf z / x < aaa And z / x > 0 And z >= z_num Then
turnRight()
ElseIf z / x > aaa - aaa * 2 And z / x < 0 And z >= z_num Then
turnLeft()
Else
turnOff()
End If
Else
If z >= 1000 Then
straight()
End If
End If
Else
'停止
turnOff()
End If
End If
R-16
Catch ex As Exception
turnOff()
End Try
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer2.Tick
If AxWindowsMediaPlayer1.playState <> 3 And
AxWindowsMediaPlayer1.playState <> 6 And
AxWindowsMediaPlayer1.playState <> 9 Then
Dim dt As DataTable = RFIDtag.GetTagIDTable()
If dt.Rows.Count > 0 Then
For i As Integer = 0 To dt.Rows.Count - 1
Dim temp As String = dt.Rows(i).ItemArray(0)
For Each node As XmlNode In xn
If temp.Equals(node("rfidcode").InnerText) Then
AxWindowsMediaPlayer1.URL = MediaDir &
node("path").InnerText & "\" & "explain.mp3"
Me.BackgroundImage = Image.FromFile(MediaDir &
node("path").InnerText & "\" & "image.jpg")
AxWindowsMediaPlayer1.Ctlcontrols.play()
' turnOff()
saveCode = temp
R-17
saveCount = 0
Timer2.Enabled = False
Exit Sub
End If
Next
Next
End If
End If
End Sub
Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As
Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent)
Handles AxWindowsMediaPlayer1.PlayStateChange
If AxWindowsMediaPlayer1.playState = 1 Or
AxWindowsMediaPlayer1.playState = 2 Or
AxWindowsMediaPlayer1.playState = 10 Then
RFIDtag.GetTagIDTable()
Me.BackgroundImage = bgimg
Timer3.Enabled = True
Timer2.Enabled = True
End If
End Sub
Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer3.Tick
If saveCount > 60 Then
R-18
saveCount = 0
saveCode = ""
Timer3.Enabled = False
Exit Sub
Else
saveCount += 1
End If
End Sub
End Class