Tag 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機器人可以用視覺感應器來進行研究與應用呢?!

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