今日から会社の研修でロボットを使ったC言語の組み込みが始まった。

ロボットと言っても市販されているかたつむり型のロボットで、

ツクモとかで簡単に手に入る。


で、ライントレースって言っても、

センサが一つしかなくて、しかも、明るさで白黒を判断してるので、

線から外れたときの状態とかはまったく得られず、

それで効率よく走らせるって考えると結構難しい。


最初に考えたのが、線のふち(外側)を辿る方法。

白いところにいるとき、前進しながら黒に近づき、

黒に乗ったら、その場で白から離れるように旋回。

それを繰り返せば、線のふちを辿って進める。

メリットはカーブがそこそこスムーズ。

デメリットは、直線でスピードが出ないこと、

十字路で、直進が最短ルートのとき、遅いルートを辿ってしまう。

時計回りか反時計回りか、どちらか一方しか進み方がない。


次に考えたのが、線の上を辿る方法その1。

黒の上にいる間直進し、白に乗ったら、

右30度、左60度、右に90度と言った具合で旋回し、

前方にある黒を探し、黒に乗ったらまた直進する。

メリットは直線が速いこと。

デメリットは、行き止まりに行ったとき、逆を向くのに時間がかかる。

十字路ではほぼ直進しか出来ない。

カーブであまりスピードが出ない。


で、今作ってたのが、線を辿る方法その2。

フラグを使い、右曲がり前進・左曲がり前進を交互に行う。

右曲がり前進中にコースから外れたら、左に旋回してコースに戻り、

次は左曲がり前進を行う。コースアウトしたら右旋回し、

コースに戻ったら右曲がり前進。これを繰り替えす。

メリットは、直線もカーブもそこそこ早い。

デメリットは、丁字路や十字路ではどこに行くか運次第。

急カーブ・直角カーブなどでは、目的と逆方向に旋回する事がある。


と言った感じで、今一番実用的なのが、2番目のやつ。

明日は旋回や、曲がり前進の半径を求めたり、

直進のスピードや時間、

曲がり前進の直進時のコースアウトまでの時間

なんかをテストして出して、

それに合わせて細かい調整の出来るようにしようと思う。


とりあえず、木曜までに作って、

金曜に5グループで競争とプレゼンして、

一番速いチームと、プレゼンの良いチームに賞金が出るらしいので頑張ります。