こんにちは、新一回生ソフト班のふとです。
先日部内で行われた一回生の新人戦の紹介と、新人戦当日までの自分の日記を書きました。
~新人戦(ソフト)ルール~
・ライントレースで指定されたコースを一周するまでのタイムを競う。
・コースは初級、中級、上級の3つがあり、自由に選択できる。コースは当日の一時間前まで発表されない。
・使う機体は自分の番の直前にランダムに選ばれる。
・機体がラインから外れる、進まなくなるなどが起こった際は、それが発生した地点まで手を使用して戻してよい。ただし、タイムが+5秒される。
・初級ではタイムが+30秒、中級ではタイムが+10秒される。上級はそのままのタイムとなる。
・当日、上級コースでは回る方向が矢印の方向限定となりました。後述のZ字カーブによって、時計回りのほうが難易度が高かったためです(図2)
~新人戦当日までの出来事~
4月
部活を見学しに行った日が入部締切日でした。危ない。
5月前半
ForteFibreではC++を主に利用しており、まず先輩からC++やgitなどの基礎的な知識の講習などを受けました。
第一回新人戦が6/5であることも最初で伝えられており、ソフトの一回生はこれを目標にしていくことになります。
図1 多い。
プログラムの制作中、センサの値がいくつかのみ振れ幅が小さかったりする機体があったことから、センサーの値をそのまま使わず比にする、キャリブレーションを常時行うようにしました。
ただ、この常時キャリブレーションを行うようにしたことで、ゼロ除算された値が保存されることで機体が動作しなくなっていました。この原因に気付くのに一週間ほどかかってしまい、コードを書く時間がほぼ無くなってしまいました。(5日前)
~当日~
当日、ソフト班の殆どは授業が無かったため、部室に集まって作業をしていました。
他の一回生が作った練習コースで、Z字カーブや十字路、途切れたラインなどがあったため、それらに対応できるよう調整を続けました。
本来、PID制御だけで機体が曲がり切れることが理想なのですが、自分の機体では、急カーブを通り越した際に例外処理としてカーブを曲がり切る動作を行わせていました。
しかし、Z字カーブで飛び出す瞬間にはラインの方向は取得できないこと、機体の角度がPID制御で毎回異なることから、旋回する方向を確実に成功できる機体は少なく、自分の機体も安定していませんでした。
そこで、Z字カーブで飛び出すまでに、折れ線部分が機体のどちら側にあったかの履歴をとることで解決しました。
また、そのためには急カーブ後に素早くライン中央に振れ幅も小さく戻ることができないと、履歴をとったとしても安定しないことに気付き、調整しました。
そして新人戦の時間となりました。
~新人戦~
当日は、普段利用している部室とは異なるホールで行われました。
照明の色や明るさも普段とは異なりますが、本番前にも基本的には問題なさそうに走っていました。
ただ、本番数分前に変数の値が普段よりあまりにも低い値であることに気付き、その場でコード内の値を調節したのですが、変更後のコードで試走することはできませんでした。
一回目では、直前の調整で値を打ち間違えたのか、普通に走ることができなかったためリタイアしました。
二回目では、本番直前に行った調整をすべて破棄して走らせることにしました。
部室で作っていた状態のコードで走らなかったとしても悔いはないと考え挑みました。
結果的にはコースアウトすることなく走り切り、そのタイムが一位となり、優勝となりました。

図2 後日撮影した上級コース。Z字でのコースアウトが頻発した。
~最後に~
次の大会はSummer Robot Contestとなります。
ライントレースでは、ソフト面での工夫の余地は少なかったと思いますが、この大会では自動機に加え手動機も扱います。また、ハードの方とチームを組むことになるので、ルールに合わせて作成した装置の利用もでき、やれることの幅が大きく増えます。
機体の装置のアイデア出しなども含めて、大会に向けた作業が楽しみです。