Author Archives: 賴 偉民

淺談Arduino機器人與機器視覺(二)

在上一篇淺談Arduino機器人與機器視覺(一)的文章中,我們談到Arduino機器人結合機器視覺的可行性,並在最後點出了Arduino在硬體上無法即時回傳影像(圖片)的問題. 如果有朋友點進此文章觀看,也建議您從上一篇開始看起以免遺漏某些精彩的討論內容.

而雖然我們解讀說是硬體上的速度不夠快,但其實各方面多少會彼此影響. 我們能保證調整攝影機中影像的大小後,它更新影像的速度仍是30FPS嗎??   我們能保證Arduino要同時控制機器人動作又要讀取感應器,速度上不會受到影響嗎??  這些可能都是必須考慮進去的問題,而其中兩個裝置之間的資料要能互相傳遞勢必要建立好兩者的通訊.

其中在Arduino上有支援的通訊方式有I2CTTL兩種,根據不同的通訊方式,資料傳輸的速度也會不同.

基本傳輸

既然有這麼多因素會影響,而大家又希望可以將機器人與機器視覺相結合來創造更多有趣的應用與研究,也因此大家對硬體的要求也會相對的增加.  我們會希望控制板有像電腦般的運算能力,我們希望官方提供如同電腦般多的資源與Open Source等. 像是DSP.FPGA.ARM等等的控制板是大部份人的選擇,除了具備媲美電腦的運算能力與通訊周邊,更擁有較大的記憶體空間並能使用Arduino所沒有的平行處理功能來加快運算的速度.

然而Arduino的熱潮在這幾年席捲各個領域的Maker們,甚至是一躍成為主流的控制板,很多人說不定在還沒聽過8051.PIC前已經先聽到Arduino的名號了. 雖然Arduino無法單獨做到上述談論的事情,但有許多研究單位與Maker們願意憑著對它的熱愛找出合適的方法放手一搏,而大家其實最常使用的方法不外乎就是四個字~~

硬體分工

圖片1

在前面我們已經提過Arduino硬體本身的運算量無法達到我們的要求,那麼最好的方法就是把機器人必須完成的各種任務根據運算量的大小來決定硬體分工的標準.而根據硬體的功能不同,分工的方式也會有所差異,但其實主要的型式是一樣的,以下偉民老師將主流的硬體分工方式分成兩種進行介紹:

 

一.電腦(筆電)與Arduino控制板的硬體分工

方法一

在結合視覺的機器人控制中,影像處理所需要的運算量算是較高的,而我介紹的第一種方法是電腦與Arduino控制板的硬體分工. 想當然之,最麻煩的影像處理工作我們會希望是由電腦來幫我們做,畢竟電腦本身的資源最多,像是OpenCV.Matlab.Labview.Processing等等. 也因此我們不用再將整個圖片傳送到Arduino控制板造成運算量不足的問題,只要將處理的結果像是像素.座標.特徵點.目標位置等資訊傳輸給Arduino即可.

其中為了提高機器人的機動性,大部份的玩家選擇使用無線訊號傳送資料,像是WIFI.ZigBee.Bluetooth等. 這時可能會有人想問這樣速度不會太慢嗎??  當然不會,因為資料不再是整張圖片,而是處理完的結果.

優點: 電腦本身運算量大且資源豐富,在使用較深入的影像演算法較易實現且不易有運算延遲的問題.

缺點: 不論是使用無線訊號或是訊號線連接兩裝置,都會使機器人的機動性受到無線訊號接收範圍或訊號線長短的影響.

講到這裡或許有人會不同意我的說法,如果機器人的馬達夠力空間夠大,那我就直接把筆電放在機器人身上不就解決機動性不足的問題了嗎??

沒錯,我完全同意這個說法,因為我的碩士論文也是這樣做出來的!!! (有興趣的朋友可以看一下,雖然還沒開放. 實驗的結果在這裡)  這也是為什麼現今有很多機器人仍然那麼大台的原因,畢竟很多困難的演算法還是必須有電腦等級的運算量才能做到!!

 

二.視覺控制板與Arduino控制板的硬體分工

方法2

除了上述的方法外,方法二-使用視覺控制板與Arduino控制板的硬體分工可以說是方法一的簡化版. 其實方法一是過去大部份玩家選擇的方法,甚至是在8051與PIC當紅的時候的做法. 然而有許多的科技公司開始想說我何不把視覺感應器與處理影像的控制器相結合變成一塊視覺控制板呢?! 也因此開始有這樣的產品出現在市面上了.

其中最有名的是SparkFun公司出產的CMUcam,目前已經研發至第四代的CMUcam4了. 如有興趣也歡迎向CAVE團隊購買此產品(連結在此).

CMUCAM4

CMUcam4的函式庫能完全支援Arduino與Basic Stamp控制板,此外它的接腳能與Arduino控制板直接相結合,實在是太方便了!!

cmucam4-robot-vision-system-sensor-1-large

另外還有一款視覺控制器Pixy,其實它就是CMUcam5(後來才發現><).

它能用更簡單的方式與Arduino結合,此外它影像的更新速率是50FPS耶!!

f632fc55649ac27a0624e1fa95e7c6e3_large

如果將Pixy用USB與電腦連接,能直接使用官方提供的軟體PixyMon查看影像處理之後的結果~~真是太厲害了!!

pixy5

有了這樣的設備,便能將方法一的設備簡化,並能根據Arduino現有的通訊方式直接與視覺控制板溝通.

優點: 大大的提升Arduino機器人的機動性,並使機器人尺寸有縮小的可能性.

缺點: 如需使用深入的影像演算法在撰寫上以及視覺控制板的運算上可能較難做到即時處理.

圖片1

現今市面上有販售的Arduino都能使用上述兩種方法進行視覺機器人開發,除此之外!!! 科技真的是一直在進步,偉民老師在前面說過如果控制板有電腦等級的運算量那就好了,是的!! 在今年年底前,我已經聽到有3款電腦等級的Arduino要準備出現了,只是現今還沒開始販賣!!! 下面向大家概略介紹~~

1. IntelGalileo

第一款是Intel公司與Arduino合作開發的Intel Galileo開發板,最近在網路上炒的很兇,我想應該很多人知道這件事.

它的核心IC是以Intel Quark SoC X1000 Application Processor為主,本身可安裝作業系統,甚至是在Arduino的官網都大力介紹此控制板.

官方介紹連結   中文介紹連結

Intel_Galileo-Arduino_610x415

2. 86duino

第二款是Roboard公司今年極力在開發的86duino,過去Roboard公司的開發板本身已能安裝作業系統,如今Arduino熱潮將至,為了使其開發板能多元化,在新開發的86duino上能相容Arduino的開發程式. 雖然板子還未上市,但在這一年也開辦多場研習不斷推廣這塊86duino,並介紹如何使其相容Arduino的程式,有興趣也可至官網FB留意研習的資訊.

86duino

此外,Roboard公司做了一個很貼心的設計,為了使玩家能更容易進行電路設計與學習,特別開發了86duino的外殼EduCake,除了可直接從外殼連接開發板接腳外,外殼上方即是麵包板,在連接電路上實在非常方便.

IMG_0319

3. UDOO

最後一款是UDOO開發板,如果你沒聽過它應該有聽過Raspberry pi吧!! 沒錯,raspberry pi本身已是一台小型電腦了,過去也已經有使用它進行影像處理與機器人開發的例子(CAVE團隊也有做一台喔!!就是在淺談Arduino機器人與機器視覺(一)的封面照片,如果有興趣可以來公司看看).

udoo_quad_01_1

而UDOO是4塊Raspberry pi與Arduino DUE結合而成的,可想而知,它的功能必定更加強大. (在此不多做介紹,如有興趣可至此連結觀看)

UDOO

介紹了這麼多東西後,我想大家應該也跟我想的一樣,Arduino真的是越來越強大了,難怪大家對它愛不釋手,能做到的事情也越來越多樣了.

偉民老師也很期待拿到其中任何一塊來試試看喔!!!

淺談Arduino機器人與機器視覺(一)

近年來隨著自動化科技逐步提升,機器人的產業也相對的被帶動了起來。

其中當我們在賦予機器人感覺,也就是讓機器人取得外界資訊的時候,勢必需要使用到感應器(感測器)。

而近幾年大多數研究的學者選擇使用視覺感應器做為機器人資訊取得的主要來源. 為什麼呢??

主要原因是視覺感應器可取得資訊遠比其它感應器來得多,一個可以抵十個不同種類的感應器使用(有點誇張了!!).

次要原因是視覺感應器應用於機器人的技術目前尚未成熟,其具備的研究價值以及可發展的空間仍然讓許多老師與研究生紛紛投入此領域之中。

但單純只有感應器是沒辦法完成一台機器人的,我想大部份的玩家也知道機器人的組成主要可以分成下面三個部份(這應該不需要我多提)。

機器人組成

而偉民老師今天想要談的是以Arduino做為機器人控制器的同時,是否能擷取視覺感應器的資訊進行影像處理並做為機器人控制所使用??

我想在這邊告訴大家~~ 

 辦不到!!

 噗~~辦不到的話,我今天寫這篇文章不就打自己的臉了嗎?!

___________________________________________________________________________________________________________________________

但我還是要說~~是真得辦不到!!

雖然辦不到,可是我們要知道辦不到的原因在那裡!!

從軟體方面來分析

目前Arduino官方的指令中並無提供給影像編輯與處理的函式庫,但如果你想用Arduino進行圖形介面編輯與設計的話,可以考慮使用Processing

Processing也是一個開放原始碼的程式語言開發環境,主要是提供給需要對影像,聲音,動畫進行程式編輯的工作者. 當然此程式可以在Arduino控制板上執行。

它的開發環境從下圖可以看到,幾乎跟Arduino的一模一樣,甚至是說你在寫Arduino程式人家都不會懷疑。

Processing_2.0(圖片來自維基教科書)

目前看來在影像的程式編輯上是有跡可循的,很明顯問題不是出在這!!

從硬體方面來分析

當我們要使用控制器擷取感應器的資料來進行機器人控制,此時資料的精度以及傳輸的速度將會影響機器人的動作。

舉個簡單的例子,如果你將一筆5.2654的資料採用整數的型態傳送的話,不管是用四捨五入或是無條件捨去法都會使資料產生誤差。

此外,機器人今天是一直在活動的一個狀態,我想現今我們對機器人下達的命令大部份一定都是達到目的或完成任務才會停止,那我們可以想像一下 一台在高速狀態行駛的車子,它主要根據前方裝置的超聲波感應器來偵測前方是否有障礙物,然而這個感應器每2秒才傳輸一筆資料,請問這台車遇到 障礙物時來得及停下來嗎?!  我想結果可想而知了。

從上述的例子可以知道控制器硬體的好壞會大大的影響機器人動作與結果,那我想大家應該會好奇從視覺感應器取得一張影像有多少的資料量?!

一張電腦上的圖片主要是由多個小方格也就是所謂的像素(Pixel)所構成,就以我們CAVE的Logo來說好了,它是由474×491個像素點組成,因此可以將它分割成右邊的數個方格。

圖片格式

然而我們知道色彩主要是由紅(Red),綠(Green),藍(Blue)三原色所構成,由於CAVE的Logo是一張彩色圖片,因此它的每一個像素點可以以RGB色彩  空間來定義,如下圖所示。

圖片讀取格式

1張圖片資料大小=8bit (一個像素點) x 3 (RGB分開定義) x m x n (像素點數目)

其中RGB每一個都必須給予8bit(0~255)的資料空間進行定義,由此可知,一個像素點需要3個8bit的資料空間,而CAVE的  Logo有474×491個像素點. 但請不要忘記一件很重要的事,市面上大部份的視覺感應器(攝影機)傳輸速率為30FPS(Frames per Second),也就是1秒鐘傳輸30張圖片,亦即1 張圖片傳輸時間約為0.033毫秒。

我想問題已經呼之欲出了,Arduino有辦法在這麼短的時間內接收如此大筆的資料嗎? 過去偉民老師曾經在一場活動中看過一位Maker使用Arduino Uno接收攝影機傳輸過來一張50×50 (Pixels)的圖片,結果是接收完成超過1分多鐘!! 可想而知現今的影像最低要求是640×480(Pixels),這對Arduino而言已是一大考驗!!

既然Arduino硬體無法即時取得必需的影像資訊,那為何現今有那麼多Arduino機器人可以用視覺感應器來進行研究與應用呢?!

偉民老師下星期為您揭曉,敬請期待!!

當Arduino遇見Matlab

當大家正在埋頭使用Arduino官方提供的平台撰寫著程式的時候,有沒有想過還有那些程式語言可以在Arduino控制板上執行的呢!!

其中一個即是我們CAVE教育團隊正在大力推廣的Labview for Arduino

書籍也即將要出版囉!! (OS:這樣會不會炒作的太嚴重了)

Qrlg1kBS8_.AFHhaU5YXPA

而另外一個是在幾年前Arduino剛在台灣掀起風潮,也是偉民老師剛開始接觸Arduino的時候略有耳聞的. 那就是Matlab for Arduino

Continue reading

Arduino線上電路與程式模擬軟體-123D Circuits

你有聽過可以繪製電路的軟體嗎?   有啊! 一大堆!!

你有聽過可以進行程式模擬並執行結果的嗎?  Matlab算吧!!

那你有聽過可以同時進行電路與程式模擬,並指定以Arduino為主要控制器的軟體嗎??  過去有聽過一個,不過要錢!!

對於那些想玩Arduino但想省下一筆開銷的朋友們有福囉!!

偉民老師在這邊跟大家分享一個很棒的免費線上軟體-123D Circuits。

Continue reading

感應器連接的好幫手-使用Arduino

我想大家在拿到一個新的感應器時,應該有跟我一樣的困擾, 那就是 “這東西怎麼用?” “這東西好用嗎?” “這東西怎麼跟我的控制器連接?”

 

有時我們在選擇感應器的時候,往往會有一些無法達到自身要求的狀況, 因此在購買感應器前會多方挑選,甚至先看過該產品的Datasheet進行比較, 然而有一些則是必須配合公司指定的感應器使用。

 

當我們拿到一個新的感應器時,往往會先將該產品的Datasheet詳細閱讀, 並且看看產品的介紹網頁上是否還有那些參考資料可提供下載(Sample Code. IC設計圖. 官方GUI測試程式…等)。

然而網頁上較少提供非官方指定控制器的參考資料,除非此控制器是當今時下最熱門最多人使用的。

偉民老師平時最常使用的控制器即是Arduino,我想有許多人也跟我一樣。

其強大的地方即是容易與其它非Arduino的周邊產品連接,然而大部份人會選擇自行摸索,或是根據官方提供的範例程式進行改寫。

偉民老師在前面實在講太多廢話撲梗了,在這邊提供一個好網站給大家分享, 之前我也曾將此網頁分享在CAVE的FB粉絲專頁,不知道是否有人看到。

如果你想要尋找任何感應器的Arduino範例程式,可以到jrowberg的網頁 來碰碰運氣

在jrowberg的網頁中主要是以IC名稱來進行分類,然而市面上的感應器有很多都是以IC為主體進行模組化, 讓人們可以更方便使用.以下我以一個簡單的例子進行搜尋:像是Roboard公司 出產的RM-G144中的加速度感應器是以HMC5843 IC為主體構成。

RM-G144

這時我們可以至jrowberg的網頁中找尋此IC的型號

RM-G144-1

點選入內便可看到此IC的相關指令檔案

RM-G144-2

而在Example中的即是Arduino的範例程式.很簡單吧~~!!

之後如果有使用任何感應器,不彷先到此網頁碰碰運氣,也許就可以少花一些時間囉!!

[課程紀錄]雙人彈珠台PK賽 – 使用NXT-G

最近偉民老師抽出一點時間把過去上課的照片與影片拿出來整理,看著兩年前學生的照片與現在相比,就可以看出他們已經成長茁壯。在與學生的相處過程中,也發現到學習程式語言的小朋友在邏輯思考上有很大的進步,甚至具備了獨立思考的能力,我想這也是CAVE教育團隊透過樂高教學最主要的目的。

然而,在教學的過程中有許多有趣的主題,當與一些風趣的學生碰撞在一起的時候,往往會變成一門充滿笑聲的課程;也因此老師我除了用照片保存回憶之外,也會將一些有趣的上課內容用影片的方式紀錄下來。最近想將這些影片分享出來讓大家看看充滿笑聲的上課內容,為了能完美呈現,老師我使用”繪聲繪影”影片編輯軟體進行後制,以下是影片的內容:

主題是使用NXT-G完成的雙人彈珠台PK賽,上課的學生完成作品後比賽的搞笑內容。

[App Inventor 教學]我與Taipei 101距離多遠

我相信有看過本團隊於2012年出版的 Android手機程式超簡單-App Inventor入門卷 的朋友,對這個題目一定不陌生,加上鄉親朋友對本系列書籍的支持,讓這本書在銷售上有不錯的成績。也因此本團隊針對許多朋友對該書籍提出的建議以及小錯誤進行整理並修改,其中在使用LocationSensor定位的範例程式主要是由我-偉民老師負責,最近本人也針對此範例的距離計算失準問題進行修改。

在使用Google大神多次搜尋下,發現計算兩點經緯度的最短距離不再是使用畢氏定理這麼簡單,主要原因是經緯度的計算不是平面座標而是球面座標。在兩點經緯度已知的情況下,過去有學者提出兩種不同的方法來計算兩點的最短距離,分別是:

1. Great Circle Distance Method

http://en.wikipedia.org/wiki/Great-circle_distance

2. Haversine Method

http://en.wikipedia.org/wiki/Haversine_formula

本人主要是以Great Circle Distance Method為主進行程式的撰寫,該方法公式如下:

d = R x arccos(sin(a1)sin(a2)+cos(a1)cos(a2)cos(b2-b1))

其中d為兩點最短距離,R為地球半徑=6371Km,(a1,b1)和(a2,b2)為兩地經緯度,a為緯度,b為經度。

剛好本人最近有時間可以趴趴走,因此每到一個地方就用這個新程式進行測試,下圖是在永和成功路一段的位置進行的測試結果。之後本人會將修改完成的最終版程式上傳至App Inventor中文學習網(http://www.appinventor.tw/)的檔案庫中供大家下載測試,檔名為LocationSensorVer2,也請大家將測試的結果留言分享給我知道。