ETロボコンでは、ライントレース走行を行います。
ラインは通常黒色ですが、途中に目印としてマーカーと呼ばれるラインの色を変えたエリアが存在します。
マーカーは2018年までは灰色が使用されてきましたが、2019年は青色に変更されました。
倒立サンプルプログラムはev3_color_sensor_get_reflect()
を使用していますが、
この反射光モードでは、カラーセンサーをラインの中央に静止させた状態でようやく黒色と青色の違いが分かる程度の差しかありません。
マーカー検出のために色を見てみたいので、ここは素直にev3_color_sensor_get_rgb_raw()
を使うことにします。
RGB各々で値の範囲が異なりますので、黒色~白色が-50~50の値になるように正規化を行って、各色のレンジを揃えて変化を確認してみます。
コースから取得したRGB三色の変化から次の方法で制御を行うことにしました。
- R赤でライントレース
- B青でマーカー検出
- G緑は使わない
R赤はライントレースで使用する黒色と青色で近い値が出るため、マーカーでコースアウトしない安定したライントレースが期待できます。
B青は青色マーカーをライントレースしている時に値の変化をしっかり認識できそうです。
動かしてみた
会場都合で動画が残ってないですが、ガレージインを青色マーカー検出で行った制御ログになります。
R赤でライントレースを行っているため、赤いラインが左軸の0付近にあります。
B青がマーカー部分で大きく変化していることが確認できます。
G緑は使用していません。
黄色いラインが右軸の相対距離で、マーカーの長さ150mm区間を検出できていることが確認できます。
#最後に
RGB Raw値を使うということになると、アドバンストクラスのチームがやっているようなカラーブロックを判別する処理を実装しないといけないのか?と思われる方もいらっしゃると思いますが、プライマリークラスでやりたいことはライントレースと青色マーカー検出だけ(2019年競技規約)ですので、そんなに手間を掛けなくてもできるよということで参考にしてみてください。
このやり方が正解だというわけではありませんがCSモデルを見た中では、ID:260 平成デロリアンさんが同様のことを行っているようですので、ETロボコン2019参加者の方はモデルをチェックしてみてください。