2012-06-14

樂高機器人的彩色感應器(顏色感應器)9694




 


NXT樂高機器人的彩色感應器比較

探奇 邱信仁 2012.06



NXT 樂高機器人9797內附光源感應器Light Sensor,只能根據反射光線的強弱辨識顏色,例如紅,藍等。如果是相近的顏色就無法辨識,例如藍跟綠。特別是這次WRO比賽,所有競賽項目都需要辨識 顏色,(足球賽也可能需要辨識綠色地板的深淺),這時只好依賴彩色感應器。



目前適用於NXT樂高機器人的彩色感應器(Color Sensor,顏色感應器)有兩款,

一顆是樂高官方的9694 Color Sensor

另一顆是HiTechnic公司的NXT Color Sensor V2 (NCO1038)

兩顆感應器的比較可以參考Philo先生的文章,探奇也發文介紹過,

請參考探奇舊文章:Plilo先生的精彩文章--NXT彩色感應器的比較

同時探奇也利用彩色感應器進行軌跡車的測試,請參考探奇舊文章:NXT彩色感應器軌跡車

以下我們來看看彩色感應器還有哪些其他的用法。

LEGO官方彩色感應器(顏色感應器) 9694


在NXT-G的命令方塊中,彩色感應器能夠偵測六種顏色,黑藍綠黃紅白,

根據Xander文章介紹,這顆樂高官方的彩色感應器只有LED跟光電晶體,

(請參考探奇舊文章:『樂高機器人8547的彩色感應器』大解剖)

紅綠藍三種光輪流發光,瞬間取得光電晶體的數值。

也就是發出紅光時,所得到的就是被測物體反射紅光的光電晶體讀值。

相同原理,當LED發出藍光,綠光時,也能得到相對應的讀值。

綜合三原色的讀值,就能判斷被測物體的顏色。


Team Hassenplug的Color Range Block

樂高官方的彩色感應器是類比式感應器,也就是直接利用類比數位轉換


電線的訊號,得到數值。目前我手邊並沒有資料顯示NXT主機是由電線的哪些腳位得到讀值,加上因為Color Sensor Block的限制,我們只能讀取顏色值,而非紅藍綠光的個別讀值。

    幸好Team Hassenplug解決了這個問題,他們提供了一個第三方命令方塊,Color Range Block,可以分別讀取發出紅綠藍三種顏色的光感應器讀值,甚至還包含Ambient讀值(是指不發光模式下的讀值?)

LED發光模式


使用彩色感應器的Color Mode偵測顏色時,三色LED燈用肉眼觀看,看起來似乎是同時點亮的。不過亮度並沒有像三種顏色單獨點亮時來的高,再加上Philo先生文章的敘述,我 想應該是三種光輪流點亮,或是以『紅光-->綠光-->藍光-->全滅』的順序快速輪動。



雖然沒有高速攝影機,但是我想還是可以透過數位相機鏡頭,試著找出LED輪流點亮的證據。順手寫了一段程式,配合拍攝,推測結果應該是對的,三色LED燈是輪 流點亮,從下面的影片中可以看到,點亮單色光時,拍攝到的光是比較亮的,當切換感應器為Color Mode時,拍攝到的光是相對較暗,而且有彩色光點閃動。




實驗測量分析


上圖:距離0.5公分





上圖:距離1.3公分(示意圖,數值沒有更新)




探奇使用Color Range Block撰寫程式簡單記錄RGBA的數值,測試對象是樂高積木,挑選黑藍綠黃紅白六種顏色的積木。探奇發現樂高積木顏色比較鮮豔,彩色感應器很容易偵測 出正確的顏色,如果拿一般印刷品(例如雜誌)進行測試,就不一定能偵測正確的顏色。同時我也利用其他積木架設測試台,固定測試積木的距離,盡量減少變因。



下面是測試結果:

顏色    距離    R          G        B     A


黑    0.5 cm    188    194    191    70


黑    1.3 cm    139    158    147    80


藍    0.5 cm    265    312    433    76


藍    1.3 cm    191    252    373    86


綠    0.5 cm    204    381    243    71


綠    1.3 cm    144    316    200    85


黃    0.5 cm    591    479    259    79


黃    1.3 cm    517    423    230    103


紅    0.5 cm    559    269    237    85


紅    1.3 cm    458    213    179    95


白    0.5 cm    611    577    535    89


白    1.3 cm    522    500    459    94



R表示Red;G表示Green;B表示Blue;A是Ambient。




上面的測試大致符合我的推測,例如測試紅色積木時,R數值提高,GB數值下降;白色積木的結果則是RGB都呈現高數值;黃色則是RG數值較高,B數值較低的結果。



距離遠近也是正常的,距離比較遠(1.3公分)的確得到比較低的數值。




探奇發現每次測試,數值仍然會有些許差異,或許這個測試還可以更進一步以多次測試處理平均值,期望得到更可靠的實驗結果。



至於A讀值,實在是有點怪怪的,符合黑色較低,白色或高亮度較高的定義。但是也同時出現一些奇怪現象,例如103,高於100的數值;以及近距離(0.5cm)反而比遠距離(1.3公分)較低。這些需要再思考問題何在。


積木顏色量測

原本進行實驗時想試試System Brick(無洞)與Technic Brick(有洞)的差異,因為直覺認為空洞也會影響光線的反射,但是試測後發現完全沒有差別,我想是因為樂高積木的品質太好了。



根據彩色感應器的原理,我想有下列因素會影響顏色的偵測:



1. 感應器與待測物距離:根據說明,一般需要將感應器保持在1-1.5公分的範圍,才不會偵測錯誤。如果距離太遠,沒有足夠的反射光線,那麼當然都是判斷為黑色。

2. 環境光的影響:周遭光線太亮,造成反射光過多,也會誤判。

3. 主機電壓:這只是我的推測,在不足的電壓下,發出的LED光源強度可能比較弱,接收的光電晶體也可能出現不同讀值。雖然不清楚Color Sensor Block內部的運算方式,但是極有可能影響判斷結果。這點還需要測試。

最後的疑問

   
    有了Color Range Block,應該可以補足Color Sensor Block的不足。以三色光線的讀值來判別顏色,也許還能分辨顏色的深淺。

    不過還有個疑問,NXT主機是如何接收三種色光分別的讀值呢?

是透過不同的接線腳位?需要三條接線?(有點複雜)



還是依照時間順序接收?(這樣就不太可能達到2.5ms的反應)


還請大家一起討論!