2016.10.29ETロボコン・デベロッパーズ部門プライマリークラスは基本的にはコースに引かれたラインをトレースして走る競技です。自己位置については1次元的に走った距離がわかっていれば位置がわかります。チームアイズでは少しでもタイムを縮めるために、急カーブや複合カーブではラインをはずして走るという戦略をとりました。最初はバランスコントロールライブラリに渡す"ターン値"を決めて曲がるという事を試しましたがロボットの速度、バッテリー残量等の違いで常に同じ弧を描いて曲がるという事が出来ませんでした。考えたのが仮想の円をライントレースするという方法です。内側が黒、外側が白の仮想の円を描き、そのエッジをPID制御でライントレースして走行させていると考えてください。この仮想円は中心の座標と半径で決まります。あと、ロボットの座標がわかれば、ロボットが仮想円のエッジ(半径)からの距離が計算できます。この距離を明るさの差分に当てはめ、PID制御でライントレースします。この案の実現の為、ロボットの自己位置推定処理を実装しました。ETロボコンのロボットで自己位置推定の為に使用できるのは左右の車輪モーターから取得できる回転角度だけです。車輪の進んだ距離が算出できます。ロボットが一定期間の間に図1のように走ったとします。進んだ距離と曲がった角度を計算する為に、図2のように変形させます。図2よりロボットを取り除き、計算に必要な記号等を追加したのが図3です。進んだ距離と曲がった角度は下記の式で計算できます。atan((R-L)÷W)進んだ距離と曲がった角度より新しい座標を求めます。この座標と角度を始点として上記の計算を繰り返して自己位置推定をしています。自己位置推定の結果をエクセルで座標にプロットしたのが図4です。コースは2010年版のコースです。クリックでエクセルをダウンロード図1から図2への変形でわかるとおり、この自己位置推定処理は誤差を含んだ計算となっています。長く走るほど誤差が累積していきます。その為、遠くまで正確にコースを走るにはコースの何らかの印を検出し、位置情報を補正する処理が必要となります。本ブログの説明はチームアイズのロボットに実装している自己位置推定処理を説明したものです。本ブログの記載を元にETロボコンのモデル又はプログラムを作成した結果については(株)アイズ・ソフトウェアは一切の責任を負いません。使用はご自身の責任で行ってください。ラインに沿ってゴールまで走らせる競技です。ロボットはラインをどの様に見てラインの何処を走っているのでしょう。ロボットには足元に光センサ(EV3ではカラーセンサ)がついており、これでラインを見ています。この光センサは明るさしか見ることが出来ません。ロボットが白い部分にいる時は明るい事を示す値。黒いラインの上にいる時は暗い事を示す値が取れます。白と黒との境にいる時はその中間の値になります。ロボットはこの白と黒の境を(以降エッジと云います)走ることでライントレースを行います。簡単な走り方はロボットがエッジの明るさより白い色の個所を走っている時にはライン側へハンドルを切り、逆にエッジの明るさより黒い色の個所を走っている時にはラインの外側へハンドルを切って走る方法です。この様に光センサの明るさで、ハンドルを右左に切るのはON/OFF制御と云います。ロボットがエッジの上にいる時にはハンドルはまっすぐでいいですよね。ON/OFF制御を改良して光センサの明るさでハンドルを切る量を調整すれば、エッジの上ではハンドルがまっすぐになります。これを比例制御と云います。比例制御ではエッジに近づくとハンドルを切る量が小さくなりますが、エッジを超えるまでハンドルは白->黒、または黒->白の方向へ切っています。車を運転する人は分かると思いますが、これではハンドルを切るのが遅くてラインに沿って走れません。そこで、エッジから遠ざかったらハンドルを切り増しし、エッジに近づいたらハンドルを逆へ切るようにします。この「エッジに近づいたら」というのは光センサの少し前の明るさと現在の明るさを比べて判断します。これを微分制御といいます。上記の比例制御と微分制御を組み合わせた制御では、エッジに近づけようとする比例制御とハンドルを逆へ切る微分制御がぶつかり合い、エッジから少し離れたところをトレースする場合があります。それに対応してエッジに近づけている制御を行う積分制御という制御方式がありますが、チームアイズでは使用していない為、説明は省略します。ここまでに説明した比例制御(以降P制御)、微分制御(以降D制御)、積分制御(以降I制御)をあわせて一般的にPID制御と呼びます。チームアイズのロボットは上記のうちのP制御とD制御を使用してライントレース走行を実現しています。I制御についてはエッジから少し離れて走っても問題ないので、採用していません。◆EV3への実装についてETロボコンで使用するPID制御プログラムについては省略します。◆PID制御の実装と調整ETロボコンのロボットのハンドル制御はロボコン参加者が共通で使用するバランスコントロールライブラリの引数に“ターン値”として設定します。ターン値は上で説明したPID制御によって求めます。その際、明るさの値をそのままPID制御に掛けて出たターン値でロボットを走らせてもうまく走りません。明るさの値を適切なターン値を決める為の係数が必要なのです。その係数はP制御、D制御にそれぞれ必要です。EV3のカラーセンサは明るさを0~100の値として出力します。これがそのまま白と黒の値になるわけではありません。そこで、ロボットが白の上にいるときの光センサの値とラインの上にいるときの光センサの値を事前に調べてみました。