ETロボコン技術要素・キャリブレーション


●PID制御とキャリブレーションの復習
ETロボコンに参加して制御ソフトウェアを作成している方は光センサ(Ev3ではカラーセンサ)でラインの白/黒を明るさとして検出し、PID制御をしている事は知っていると思います。
その際、事前のキャリブレーションにて白い箇所での明るさ値、黒い箇所での明るさ値、そしてラインの境界(エッジ)上の明るさ値を調べているはずです。
このキャリブレーションで調べたエッジ上の明るさ値と走行中に光センサで取った明るさ値の差分(偏差)をエッジから離れた距離としてPID制御に渡してハンドルを切る量を算出し、ライントレースをします。

●部屋の明るさとカラーセンサで計測した明るさ値について
このカラーセンサで取った明るさはその部屋の明るさ(環境光)に影響されます。
下の表はカラーセンサのRGB値を部屋の明るさを変え、コースの白い部分の値を取得した時のデータです。

状態明るい 普通  暗い 
R927667
G1008770
B1129075

ここからわかる通り、同じ色でも明るい部屋では大きい値が、暗い部屋では小さい値になります。
なお、上の表でRGB値を取得しているのは、チームアイズではR、G、Bの各値を足した値を明るさ値として使用しているためです。

仮に明るい部屋で調べた時、黒=10、白=110、エッジ=60の明るさ値が取れたとします。
同様に暗い部屋で調べた時、黒=5、白=55、エッジ=30の明るさ値が取れたとします。
この場合、白い個所での明るさ値とエッジ上での明るさ値との差分(偏差)は明るい部屋では50。暗い部屋では25になります。
そして、カラーセンサの有効測定範囲は直径約15mmですので、エッジから白までの距離は7.5mmです。

つまり、明るい部屋ではエッジからの距離が7.5mmの時、偏差が50となり、暗い部屋ではエッジからの距離7.5mmの時、偏差が25となります。
明るい部屋の時を基準にすると、偏差が50の時にはエッジからの距離が7.5mm。偏差が25の時はエッジからの距離が3.75mmです。 暗い部屋の時、明るい部屋と同じ算出方法でエッジからの距離を求めようとすると白い個所の偏差は25なのでエッジからの距離は3.75mmとなります。

●部屋の明るさを補正するには
これではPID制御の設定値を調整しても明るい時と暗い時では動きが異なってしまい、調整が台無しになってしまいます。
これにはどのように対処すればよいのでしょうか?
明るい時と暗い時で、エッジからの距離として認識する値(偏差)が同じ値になれば明るくても暗くても同じ動きになるはずですよね。
では、明るくても暗くても偏差が-100~100になるように補正する処理を入れてみましょう。(補正後の偏差の範囲は幾つでも良いです)
  偏差 = 200 / (白の明るさ値 – 黒の明るさ値) * ( 現在の明るさ値 – エッジ上の明るさ値 )

この計算式で偏差を求めることで明るい時も暗い時もエッジからの距離に対応する偏差の値が同じになります。

このようにキャリブレーションで取得した値で光センサの値を補正することによって、部屋の明るさに関わらずに同じように走行体を制御する事ができるようになります。

●おまけ
昔の記事「ETロボコン技術要素・PID制御」ではD制御が充分掛からない問題点を上げていますが、本記事で対策に触れておきます。
記事での問題点はカラーセンサのGetBrightness()で取得した明るさ値の変わる範囲が狭い(分解能が荒い)事が原因でD制御の掛かる時間や量が少ないことです。
対策としては
①分解能の大きなデータを使用する。
②D制御ので比較する前回値をより前の時間の値(前々回、前前々回の値)を使用する。
等の方策があります。

①についてはカラーセンサをカラーモードで使用し、RGB値を取得する事で可能です。RGB値は各色それぞれが0~255の範囲を持ち、センサーで取得した値は0~120位の値となります。
EYESでは取得したRGB値の各色の値を合計する事で細かい分解能の明るさ値を得るようにしています。

本ブログの説明はチームアイズのロボットに実装している明るさ値補正処理について記述した物です。
本ブログの記載を元にETロボコンのモデル又はプログラムを作成した結果については(株)アイズ・ソフトウェアは一切の責任を負いません。
使用はご自身の責任で行ってください。


関連記事

TOP
CONTACT ACCESS LINE CALL