ライントレースロボットを作ってみよう
インストール及びプログラムの実行の方法
ここではVS-WRC003というCPU基板を用います。これは
ヴイストン
という会社が開発販売しているCPU基板です。CPUにはルネサスエレクトロニクス社の製品で、36064という型番のものを採用しています。ソフトウェアの開発にはHigh Performance Enbedded Workshopというアプリケーションを用います。ここでは、基本的なC言語で開発します。
ロボカップJr2010
ロボットを動かす開発言語はC言語を用います。
インストール及びプログラムの実行の方法
二つ目のプロジェクト(新しいプロジェクト)を作る方法
モーターを動かしロボットを前進させる
モーターを動かしロボットを前進させる
センサーの値を読む
ラインセンサーはライントレースを行う時に必須のもので、白と黒を判別するためのものです。
半田面
センサー側
GNDはグラウンド(0V, ゼロV)、VCCは5Vに繋ぐのが当然ですが、3.3Vでも動作するようなので、ADコンバーター入力コネクタにある電源につなげます。OUTはADコンバーター入力につなげます。これはビスとナットを用いて配線します。
配線は隣とか異なるところに接触しないように絶縁テープなどで絶縁を必ずします。手を抜いて、裸の線をブラブラさせておくと、壊れます。
このセンサーからの信号は電圧で送られてきます。センサーの種類によって、白が大きい値だったり、黒が大きい値だったりしますから、それはプログラム側で判断しなければなりません。
A/Dコンバーターの値を読む
簡単なライントレースを行う
ラインセンサーを2つ用い、
楕円のコースを回ります。
簡単なライントレースをスムースに行う
厳密な意味では自動制御に用いるPID制御ではありませんが、それらしい制御をしてみます。
ラインセンサーを2つ用い、
比例制御で動かします。
ラインセンサーを2つ用い、
微分制御を加えます。
ラインセンサーを2つ用い、
積分制御を加えます。
難しいライントレースに挑戦する
ラインセンサーを4つ用い、コースの先行予測を行い周回するようにする。
基本的にライントレースは中心の2つのセンサーだけでできます。脇に置く2つのセンサーは事前にどのようなことが起こるか先行的にデータを検出するのが目的です。ですから、脇の2つのセンサーは中心の2つのセンサーより前に位置していなければ意味がありません。同じ位置でも、それなりに機能しますが、後ろだったらほとんど意味がありません。
また、旋回の時の終了条件を中心のセンサーを用いるとおかしくなるので、脇のセンサーを用いる必要があるかもしれません。
最近、付いていればなんとかなると考えているか、格好よくするためと考えているのかは分かりませんが、おかしな付け方をする人がいます。その場合は自己責任でプログラムを作ってください。少なくとも、中心の2つのプログラムが正常ならば、それなりに動きますから。
アルゴリズム
雑感
以前に正しく動いたのに、急にうまく動作しなくなったので、ラインセンサーの値を色々と変えている人が多いかと思います。これは考え方が間違っています。頭を使わなければいけません。何故動作しなくなったのか。以前と今では何が異なるのか考えてみます。天気が異なるのかもしれないし、温度も異なるかもしれない。ロボットの位置が異なるのかもしれないし、そもそもコースが異なるのかもしれない。従って、どんなコースでも対応出来るようにプログラムすべきなのです。まず第一に、天気、蛍光灯の光の強さなどでセンサーの値が異なることがあります。コースに用いられている紙質によっても反射率が異なります。異なる条件であるにもかかわらず、いつも同じ値を用いるのは間違いであることに気付いてください。
では、どうするか
すでに講義は終わっているので
これは例にすぎません。もっと超高速で回ったのもあります。
普通の駄円のコース
Video not playing?
Download file
instead.
難しいコース。これは数年間で一人か二人しか一周できていない。
余りに出来ないので、ちょいとプログラムを作ってみたらすぐに出来た。
難しいコース
Video not playing?
Download file
instead.