• Awesome!

    太酷了! 可以用在飛行器、& 氣艇上 (漂浮魚 etc.) 嗎?   這在多花點力氣整合一下,搞不好可以做救災和海防偵蒐用呢? 

  • Qq

    氦氣球+小引擎+燃料酬載= 飛空艇機器人 (市區快遞)

    Ps. Bad guy 應用,,,便宜lowtech 巡弋飛,,,

  • Qq

    假設個人移動裝置的無線信號特徵,可以被辨認和追蹤 (透過 3G, WiFi signal strength 等apps), 藉此終端制導不知道可不可行? Good guy; 裝置停泊指引,Bad guy; “personalized" cruise missile….

分享本文至 E-mail 信箱
學術引用格式
MLA
APA
EndNote(.enw)

Google Map 路徑追蹤機器人

2011/12/16 | | 標籤:

文/曾吉弘、李卿澄(CAVE教育團隊 http://www.cavedu.com)
如何讓機器人走到指定的地點?這可真是個大哉問。首先我們必須了解我們人類與機器人在看待這個世界上,所存在之本質上的差異。

機器人是活在絕對(absolute)的世界裡,事事要求精準。但我們人類卻是以相對(relative)的概念來與周遭環境互動。舉例來說,當要走出房間時,我們不需要知道與房門的實際距離是多少公分或公尺,更不需要知道與房門的方位角是幾度,一切都只要有個概略就可以了。機器人就不行了,由於機器人行進的距離是由輪胎直徑與馬達編碼器來決定,因此機器人需要處在一個相對單純的環境中才能正常運作。如果地表材質改變(例如從柏油路移動到爛泥巴地)使得摩擦係數改變,那機器人的行進效果一定會和原本的設定不一樣。

有的朋友可能會建議「幫機器人裝個攝影機當作眼睛不就好了嗎?」可惜的是,機器視覺領域尚在發展階段,機器人所收到的攝影機影像實際上是一張張的圖片,要讓機器人從二維圖片中發展「深度」與「空間」的概念,非常地不容易。再者,要能從影像中辨識物體是透過計算畫面中特定形狀或顏色的像素集合來達成的。例如追蹤紅球時,如果畫面左側中紅色像素比例較高,代表紅球位於攝影機的左前方,機器人需左轉修正。另一方面如果紅色像素占整體畫面比例提高,代表紅球與機器人的距離縮短了,反之則代表紅球愈來愈遠了,快點前進找球吧!以下為一個讓機器人隨著紅色物體左右搖擺的影片(使用MindSensors公司的NXT-cam攝影機)。

影片:

圖1 Android裝置上姿態感測器三軸向示意圖

有興趣的讀者可參考筆者另一篇MAKER專文<淺談智慧型手持裝置結合機器人的應用?Android + 樂高NXT>

在開始移動之前,機器人必須先了解「我在那裡(起點)?」接著延伸到「我要去的目標在那裡(終點)?」其中又包含了「目標有多遠(距離)?」、「目標在我的那一個方向(方位角)?」以及「如何移動(路徑規劃)?」測量距離可使用簡易的超音波感測器即可達到一定的效果,或著您可改用高精度的雷射測距儀(Laser range finder)即可取得更精確的距離量測結果。讓機器人了解當下所面對的方向需使用指南針感測器(compass sensor),但現在的智慧型手機都有三軸的姿態感測器(compass sensor),這時候只要將姿態感測器值平放於機器人頂端就可將姿態感測器Z軸軸向變化做為機器人指向參考。

最後也是本專案的關鍵,兩點之間最近距離是直線沒錯,但這條直線路徑事實上不存在。我們必須考慮到現實環境,所以機器人真實的移動路徑必然是曲曲折折(請您試著出門直直走不轉彎,看看多久會撞到牆)。Google Map可說是目前最強大的地圖資訊,有強大的導航與街景功能(現在連亞馬遜河雨林都有「街景」囉…)。透過Google Map 所規劃的路線,機器人就能了解要到達目標點所需經過的折點以及相關距離與轉角資訊。如果能讓機器人跟著Google Map所規劃出來的路線行走的話,那麼機器人應該會更聰明也更能貼近我們的需求才對。

綜合以上的想法,筆者決定寫一個Android程式來整合Google Map與機器人控制,讓機器人可以接收手機所計算完成的距離與方位角並順利沿著Google Map規劃路線移動。我們將這個程式命名為NXT Navigation,圖1為程式主畫面。

圖2 NXT Navigation程式主畫面

以上就是本專案的初始想法,接著讓我們來看看整體的思考流程:

1.取得Android裝置當下座標設為起點,或在Google Map中自行選定起點。

圖3 選定起點

2.在Google Map中選定終點。

圖4 選定終點

3.將起點與終點座標送出給Google Map進行路徑規劃。收到路徑之後取得各折點座標,並計算各折點之間的距離與方位。

圖5 路徑規劃完成

圖6 計算各折點之間的距離與方位

4.與機器人連線,同時將距離與方位轉換為樂高機器人馬達轉動圈數。出發!

圖7 輸入NXT機器人主機名稱即可連線

技術限制

1.手持式裝置GPS晶片定位精度並不高,約在30至50m左右(對!您沒有看錯)。換言之,您的Android裝置在十字路口兩端所取得的座標基本上沒有太大的差異。

2.不同經緯度地區中,座標計算方式也不同。本專案機器人只放在台灣台北市的街道中,且機器人行進範圍和其他交通工具相較之下非常小,因此不考慮經緯度差異。本專案中使用了Android中Location類別中的bearingTo()以及distanceTo()等指令來計算機器人應轉動角度以及移動距離。

3.假設地表材質不改變,摩擦係數變化不大,因此不考慮機器人打滑問題。本專案機器人第一版使用輪胎(直徑5.6公分),但效果不佳所以改為履帶。請看下三圖為機器人機構設計改進過程:

圖8 後輪支撐點容易卡在縫裡

圖9  改用履帶後,抓地力顯著提升

4.之所以使用樂高機器人是因為可透過NXT Direct Command來直接控制機器人動作,樂高機器人支援NXT Direct Command這套特殊的資料傳輸格式,機器人只要接收到正確的格式就能執行對應的動作,例如讀取主機/感測器資訊、控制馬達或強制關閉電源等等。換句話說我們可以不用編寫機器人端程式就能控制機器人!有時候您甚至得為此多學一套程式語言,NXT Direct Command真的為您省下不少功夫。

5.在程式中使用Google Map API需自行申請Key並匯入您的Android專案,詳細申請辦法請參閱本文末相關連結之<如何取得Maps API Key >。

設備需求

  1. 樂高NXT機器人,請組成基本雙輪車即可,機器人需根據場地實地狀況進行修改。
  2. Android裝置一台,手機或平板電腦皆可。本專案使用HTC Desire,Android 版本為2.2(2.0以上皆可)。
  3. 開發環境:Eclipse 搭配 Android SDK,需具備Java程式設計基礎。
  4. 一顆火熱的心。

相關連結

Android開發者網站,需由此下載Android SDK

http://developer.android.com

如何取得Maps API Key

http://code.google.com/intl/zh-TW/android/add-ons/google-apis/mapkey.html

如何計算兩個GPS座標點之間距離

http://4rdp.blogspot.com/2008/05/gps.html  (研發養成所)

http://4rdp.blogspot.com/2011/09/great-circle-sailing.html  (研發養成所)

http://www.movable-type.co.uk/scripts/latlong.html

LEGO® MIDSTORMS 官方網站之NXT Direct Command文件

請下載藍牙開發套件(Bluetooth Developer Kit),解壓縮後的「Appendix 2-LEGO MINDSTORMS NXT Direct commands.pdf」。

http://mindstorms.lego.com/en-us/support/files/default.aspx

影片

索取

如需本專案原始碼,請寫信至service@cavedu.com索取。

本文章刊登於《ROBOCON》國際中文版01。更多出版資訊請上《ROBOCON》國際中文版01

「空虛寂寞覺得冷會傳染嗎?」「為什麼人看到可愛的東西就想捏?」「為什麼蚊子喜歡叮穿深色衣服的人?」

科學從不只是冷冰冰的文字,而是存在世界各個角落熱騰騰的知識!不論是天馬行空的想像或日常生活的疑問,都可能從科學的角度來解釋。

本月的泛科選書 《不腦殘科學2》是泛科學作者編輯團隊嘔心瀝血的超級鉅獻!不只能滿足大人與小孩的好奇心,更將拓展你的視野,帶領大家發現一個嶄新的世界!

泛科限時優惠79折(含運),現在就帶一本回家

關於作者

馥林文化是由泰電電業股份有限公司於2002年成立的出版部門,有鑒於21世紀將是數位、科技、人文融合互動的世代,馥林亦出版科技機械類雜誌及相關書籍。馥林文化出版書籍http://www.fullon.com.tw/