記事の概要
このたび、私たちのロボットが学校の文化祭で展示されることになりました。 *** そこで、改めて私たちのロボットの機能の紹介などをしていきたいと思います。
改めて自己紹介
私たちは3人とも、物理研究会に所属しています。 ロボット班所属で、普段からロボットを作っています。 *** そして、ロボカップという大きなロボット大会にに出るためにライントレースのできるロボットを作っています。
ロボカップレスキューについてはこちらをお読みください。
簡単に説明すると、ロボカップとは、RJCロボカップ日本委員会主催の、大規模なロボットの大会です。
私たちが出場予定なのは、レスキュー部門という、ライントレースをしてボール(被災者ということ)を拾い上げるレスキューを行い、ポイントを競う競技です。
ロボットの仕組みの解説
ロボットの移動の仕組み
ロボットのライントレースの、移動の基本中の基本は、「左右のカラーセンサーの反射光の強さの差」です。
今回のロボットでは、今の時点ではEV3純正のカラーセンサーを使用しています。 このセンサー、現在は廃版なのでArduinoを使って自作カラーセンサーを組んでいます。((普通に廃版にしなくていいと思う
このセンサーで、センサーの反射光の強さを0(暗い)から100(明るい)の値で知ることができます。
例えば、
① : 直線のとき | ② : 左に曲がるとき | ③ : ずれたとき | |
---|---|---|---|
左のカラーセンサー | 白(100に近い) | 黒(0に近い) | 灰色(50程度) |
右のカラーセンサー | 白(100に近い) | 白(100に近い) | 白(100に近い) |
進む角度 | 100-100 = 0度 | 0-100 = -100度(左に100度) | 50-100 = -50(左に50度) |
備考 | 0度なので、まっすぐ進みます。 | 黒がある方向に曲がります。 | 微妙な色だと、曲がり具合が少しになります。 |
このように、左右の明るさの差に応じて進む角度を決めることで、おおよそ制御をすることができます。 しかし、これではどうしても精度の面で限界があります。そこで考え出されたのが、
PID制御と呼ばれる実際にも産業面などで広く使われている制御手法です。
1. PはProportion、「比例制御」のことで、うえで紹介した制御方法のことです。私たちのロボットも基本はこれで動いています。
2. IはIntegral、「積分制御」のことで、簡単に言うと、この場合できるだけロボットの目標の角度に近づくように制御し続ける制御方法です。過去何回か分のカラーセンサーのデータを保存しておき、それを使って積分をして、P制御の値に足し合わせる値を決めます。
3. DはDifferential、「微分制御」のことで、PI制御だと対応できないような変化の具合、例えば直角などのときに、変化の大きさに比例した値を足し合わせて、変化が大きいほどよく曲がるようにするための制御方法です。
これら3つを組み合わせてPID制御と呼びます。
(詳しくはこちら)Wikipedia - PID制御
ロボットの緑色検知の仕組み
EV3のカラーセンサーは、R, G, B の3つの値のデータを取得できます。これは、光の三原色であるRed,Blue,Greenの3つがどのくらい混ざっているかで色を表す方法です。
単純にその値をそのまま使ってもよいのですが、より正確に、誤作動なく緑色を検知できるようにするためにHSVから色相、彩度を使って判定していきます。
次の画像のような色相環を見たことはないでしょうか。
(出典 : https://hirotama.blogspot.com/ フリー素材【色相環】Hue circle, 2021)
そして、この色相のどの位置にいるかの角度と、色の鮮やかさである彩度と、色の明るさである明度で色を指定する方法がHSV、Hue-Saturation-Valueです。
色相環の赤色を0度として、緑色は120度、青色は240度の位置になります。これにより、角度の指定だけで緑色かどうか判定することができます。
また、黒い線を濃い緑色だと勘違いしてしまわないように、色の明度の判定を加えて、ある程度明るくないと緑と判定されないようにしています。
参考までに、R、G、Bの値からHSVを導き出す式をのせておきます。(今回判定に使ったのは色相と明度です。)
R、G、Bのうち、最も大きな値をMAX、最も小さな値をMINとする。
RがMAXならば、色相 H = 60 × ((G - B) ÷ (MAX - MIN))
GがMAXならば、色相 H = 60 × ((B - R) ÷ (MAX - MIN)) +120
BがMAXならば、色相 H = 60 × ((R - G) ÷ (MAX - MIN)) +240
R、G、Bがすべて同じ値ならば、色相 H = 0
色相Hが負の数ならば、色相Hに360を足す。
------
彩度S = (MAX - MIN) ÷ MAX
------
明度V = MAX
これからのロボットの展望
・ 先ほども少し書いたように、自作のカラーセンサーの回路を完成させて、ロボットに搭載する
・ ロボカップでは、黒い線の奥に緑色があっても、手前にある時のように曲がってはいけないというルールや、両側が緑色ならばUターンして引き返さなければならないというルールなどがあるため、それらに対応したプログラムを作る。
などなど、11月のロボカップに向けて頑張ります!
読んでいただきありがとうございました。