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

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *