PR

【PythonでmBot2プログラミング】クアッドRGBセンサーの使い方

Python
この記事は約12分で読めます。

今回は、mBot2プログラミングシリーズ(Python編)の第5回です。

前回は、クアッドRGBセンサーを活用したライントレースプログラムについてご紹介しました。
今回は、前回紹介しきれなかった、クアッドRGBセンサーで自己定義の色を認識させる方法や、キャリブレーション方法をご紹介します。

かにロボ
かにロボ

ライントレース用の黒色ラインの作成には、反射の少ない黒色マスキングテープがお勧めです。
(黒色マジックペンでは、反射してセンサーが黒色を認識しないことがあります)

この記事で分かること

  • クアッドRGBセンサーとは何か?
  • 以下のPython API
    • フィルライトの発光方法
    • 色を認識する方法
    • キャリブレーション方法
  • 各APIを使ったプログラミング例

クアッドRGBセンサーとは

クアッドRGBセンサーに関する説明は、前回の記事をご覧ください。

クアッドRGBセンサーの使用用途を次の6つに分類して、前回は1~3のライントレースでの使い方を解説しました。

今回は、残りの4~6について解説します。

  1. 【初級】L1とR1(中央の2つのセンサー)でライントレースする場合
  2. 【中級】4つ全てのセンサーでライントレースする場合
  3. 【上級】『偏差』を用いてライントレースする場合
  1. フィルライトを発光させる場合
  2. 色を認識させる場合
  3. キャリブレーションする場合

APIとは

API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。

cyberpiライブラリをインポートすることで、CyberPiや、mBot2センサーなどの各機能を簡単に利用できます。

フィルライトを発光させる場合

フィルライト発光に関するAPI

quad_rgb_sensor.set_led(color = "white", index = 1)

フィルライトの色を設定します。

colorの設定値略称表示される色
redr
yellowy
greeng
cyanc藍紫
blueb
purplep
whitew
blackk

quad_rgb_sensor.off_led(index = 1)

フィルライトを消灯します。

色を認識させる場合

色のRGBとは

色の認識には、RGBの数値を用います。

RGBは光の三原色で、赤(Red)緑(Green)青(Blue)の3つの値を組み合わせて色を作ります。
各値は0から255の範囲で指定します。

色認識に関するAPI

色検出のセンサー値

mbuild.quad_rgb_sensor.get_white_sta(position, index = 1) #白の検出
mbuild.quad_rgb_sensor.get_red_sta(position, index = 1) #赤の検出
mbuild.quad_rgb_sensor.get_yellow_sta(position, index = 1) #黄の検出
mbuild.quad_rgb_sensor.get_green_sta(position, index = 1) #緑の検出
mbuild.quad_rgb_sensor.get_cyan_sta(position, index = 1) #藍紫の検出
mbuild.quad_rgb_sensor.get_blue_sta(position, index = 1) #青の検出
mbuild.quad_rgb_sensor.get_purple_sta(position, index = 1) #紫の検出
mbuild.quad_rgb_sensor.get_black_sta(position, index = 1) #黒の検出
mbuild.quad_rgb_sensor.get_custom_sta(position, index = 1) #自己定義色の検出

指定したセンサー位置における、色の検出結果を返します。

  • position:検出するセンサー位置
    • “middle”:L1,R1
    • “all”:L2,L1,R1,R2
  • 戻り値:0000から1111までの2進数に対応する0~15の範囲の整数
    • 0:色を識別しない
    • 1:色を識別する
センサー値2進数線の検出状態
000
101
210
311
“middle”を指定した場合
センサー値2進数線の検出状態
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001
101010
111011
121100
131101
141110
151111
“all”を指定した場合

色の検出判定

quad_rgb_sensor.is_line(ch, index = 1)  #線の検出判定
quad_rgb_sensor.is_background(ch, index = 1)  #背景の検出判定
quad_rgb_sensor.is_color(color = "white", ch, index = 1)  #指定色の検出判定

指定したセンサーで、線/背景/指定色が検出されたかを判定します。

  • ch:指定するセンサー
    • “any”/”L2″/”L1″/”R1″/”R2″/”l2″/”l1″/”r1″/”r2″/4/3/2/1
  • 戻り値
    • True:検出した
    • False:検出されない
colorの設定値略称検出する色
redr
yellowy
greeng
cyanc藍紫
blueb
purplep
whitew
blackk

色の値の検出

以下に紹介するAPIの引数の意味は次の通りです。

  • 引数
    • ch:指定するセンサー
      • “L2″/”L1″/”R1″/”R2″/”l2″/”l1″/”r1″/”r2″/4/3/2/1

quad_rgb_sensor.get_gray(ch, index = 1)

指定したセンサーが検出したグレースケールを取得します。
グレースケール値は、光を反射する程度を値で示します。

  • 戻り値:0~100

quad_rgb_sensor.get_color(ch, index = 1)

指定したセンサーが検出した色の16進数値(カラーコード)を取得します。

  • 戻り値:0x000000~0xFFFFFF

これは、赤・緑・青(RGB)の順でRGB値をつなげた値です。
例えば、色の光度が、赤:0x24、緑:0x68、青:0xA0の場合、カラーコードは0x2468A0となります。


quad_rgb_sensor.get_color_sta(ch, index = 1)

指定したセンサーが検出した色の名前(文字列)を取得します。

戻り値(文字列)検出した色
red
yellow
green
cyan藍紫
blue
purple
white
black

quad_rgb_sensor.get_light(ch, index = 1)

指定したセンサーが検出した周囲光の強度を取得します。

  • 戻り値:0~100

RGB値の検出

quad_rgb_sensor.get_red(ch, index = 1)  #R値の取得
quad_rgb_sensor.get_green(ch, index = 1)  #G値の取得
quad_rgb_sensor.get_blue(ch, index = 1)  #B値の取得

指定したセンサーが検出した色のR値/G値/B値を取得します。

  • ch:指定するセンサー
    • “L2″/”L1″/”R1″/”R2″/”l2″/”l1″/”r1″/”r2″/4/3/2/1
  • 戻り値
    • センサーが検出した色(R/G/B)の値
      • 範囲:0~255

色の自己定義

quad_rgb_sensor.set_custom_color(r, g, b, tolerance, index = 1)

0~255の範囲で、色をRGB値で定義します。

  • r,g,b:自己定義する色のRGB値
  • tolerance:自己定義色の許容値
許容値=10とした場合RGB
設定2555050
RGB値の上限2556060
RGB値の下限2454040

特定の色を認識するプログラム

mBot2のセットに付属されているコースには、赤・黄・緑・青のポイントがあります。
これらを認識するためには、以下のようにプログラムします。

from cyberpi import quad_rgb_sensor

while 1:
    if quad_rgb_sensor.is_color("red", "any", 1) == True:
        #どれかのセンサーが「赤」を検出したときの動作
        
    elif quad_rgb_sensor.is_color("blue", "any", 1) == True:
        #どれかのセンサーが「青」を検出したときの動作
        
    elif quad_rgb_sensor.is_color("yellow", "any", 1) == True:
        #どれかのセンサーが「黄」を検出したときの動作
        
    elif quad_rgb_sensor.is_color("green", "any", 1) == True:
        #どれかのセンサーが「緑」を検出したときの動作

センサーの場所を "any" に設定することで、4つのセンサーのうちのどれかが指定した色を検出すると、任意の動作をさせることができます。

自己定義の色を作成するプログラム

自己定義の色を作成するといっても、そもそも定義させたい色のRGB値が分からなければ、自己定義できません。
ここでは、定義する色のRGB値をセンサーで読み取った後に、そのRGB値で定義するプログラムをご紹介します。

from cyberpi import quad_rgb_sensor, event

@event.is_press('b')
def callback():
    #RGB値の検出
    r = quad_rgb_sensor.get_red("L1",1)
    g = quad_rgb_sensor.get_green("L1",1)
    b = quad_rgb_sensor.get_blue("L1",1)

    #色の自己定義
    quad_rgb_sensor.set_custom_color(r, g, b, 20, 1)  #許容差±20

定義させたい色の上にmBot2(このプログラムではセンサーL1)を置き、Bボタンを押すことで色を定義できます。

例題:自己定義した色でmBot2を動作させる

  • 例題
  • 解答例

任意の色のRGB値をクアッドRGBセンサーで読み取って、その値を自己定義してみましょう。
自己定義した色を認識して、mBot2を動作制御するプログラムを自由に作ってみましょう。

自己定義した色のRGB値はCyberPiのディスプレイに表示させてみてください。

from cyberpi import quad_rgb_sensor, event, table, mbot2

@event.is_press('b')
def callback():
    #RGB値の検出
    r = quad_rgb_sensor.get_red("L1",1)
    g = quad_rgb_sensor.get_green("L1",1)
    b = quad_rgb_sensor.get_blue("L1",1)
    
    #色の自己定義
    quad_rgb_sensor.set_custom_color(r, g, b, 20, 1)  #許容差±20

    #ディスプレイ表示
    table.add(1,1,"R値")
    table.add(2,1,"G値")
    table.add(3,1,"B値")
    
    table.add(1,2,r)
    table.add(2,2,g)
    table.add(3,2,b)

色の自己定義プログラム』は例で示したプログラムに、CyberPiディスプレイへの表示処理を追加しています。

@event.is_press('a')
def callback():
    while 1:
        if quad_rgb_sensor.get_custom_sta("middle", 1): #自己定義色の検出
            mbot2.EM_stop("all")
        else:
            mbot2.forward(50)

自己定義した色での動作プログラム』は、L1,R1が「自己定義した色」を検出したらmBot2を停止させます。

検出した地面のRGB値

キャリブレーションする場合

キャリブレーションとは

キャリブレーションとは、センサーが正しい値を計測できるように調整する作業のことです。

クアッドRGBセンサーの性能は、周囲光、背景、対象物との距離などによって大きく影響を受ける場合があります。
したがって、センサーを使用する条件でキャリブレーションを実行すると、検出精度を向上させることができます。

キャリブレーションに関するAPI

quad_rgb_sensor.adjust(index = 1)

クアッドRGBセンサーのキャリブレーションを行います。

キャリブレーション方法

  1. 強い光ではなく、一般的な部屋の光の場所で行ってください。
  2. mBot2を白紙(mBot2ライントレースマップの白い部分)に置きます。
  3. 以下のプログラムを実行して、キャリブレーションを開始します。
from cyberpi import quad_rgb_sensor

@event.is_press('b')
def callback():
    quad_rgb_sensor.adjust(1)
  1. キャリブレーションが完了すると、CyberPiのディスプレイに完了した旨のメッセージが表示されます。

まとめ

今回は、クアッドRGBセンサーのフィルライトの発光や、色の自己定義、キャリブレーション方法を解説しました。
これらは、基本的なプログラミングでの使用頻度は少ないかもしれませんが、応用的なプログラムを作成する際には、覚えておいて損のない内容です。
必要に応じて使用できるよう覚えておいてください。

mBlockを使ったmBot2のプログラミング方法を丁寧に解説していておススメです。

CyberPi単体でもプログラミング教育に非常に役立ちます!

タイトルとURLをコピーしました