こんにちは。新人のYoです。
前回は機体のパラメータを調整し、16×16迷路を完走できるようにしました。
今回の内容は前回からマイクロマウス地区大会に出場までです。
サンプルプログラムの改造
サンプルプログラムのままでも完走させることは可能ですが、せっかく大会に出場するなら
速く走らせたいという欲があるので初心者の私ができる範囲で改造していきます。
今回は次の3つのファイルを改造することで Pi:Co Classic3 を速く走れるようしてみました。
- uROS_STEP8_micromouse.ino:ボタンでモード切替を行うメインファイル
- parameter.h:パラメータを定義しているファイル
- run.ino:直進や旋回用の走行パラメータを設定する関数のファイル
まずは、parameter.h の中身を改造していきます。
#define CON_WALL_KP 0.3 //ゲイン調整 float SEARCH_ACCEL = 1.5; float TURN_ACCEL = 0.3; int SEARCH_SPEED = 350; #define MAX_SPEED 1000 #define MIN_SPEED (MIN_HZ * PULSE)
#define で定義されている一部のパラメータを int型と float型に書き換えることで
メインファイル内で自由にこれらの値を変更できるようになりました。
続いて、uROS_STEP8_micromouse.ino にモードを追加します。
case 5: SEARCH_ACCEL = 2.0; TURN_ACCEL = 1.5; SEARCH_SPEED = 450; copyMap(); g_map_control.positionInit(); fastRun(g_map_control.getGoalX(), g_map_control.getGoalY()); rotate(right, 2); g_map_control.nextDir(right); g_map_control.nextDir(right); goalAppeal(); fastRun(0, 0); rotate(right, 2); g_map_control.nextDir(right); g_map_control.nextDir(right); SEARCH_ACCEL = 1.5; TURN_ACCEL = 0.3; SEARCH_SPEED = 350; break;
個人的には探索走行時の旋回速度も上げたかったので上記のように改造しつつ、
モード5に速度を上げた最短経路走行を実装しました。
117から119行目は変更した値を元に戻すために入れてあります。
この3行を入れる前は、モード5の後に元から入っていたモード3を実行したら、
機体の速度が速いままで驚きました。
基本はコピー&ペーストなので色々なパラメータでモードを追加できます。
最後に、run.ino の中身を少しだけ改造します。これにより大きく違いのなかった
旋回速度が大きく変わります。
g_accel = -1.0 * TURN_ACCEL; while ((getStepR() + getStepL()) < obj_step) { continue; } g_motor_move = 0; delay(150); }
書き換える場所は delay(300); という部分で、2か所あるのでその両方の値を半分にしました。
大会出場
今回は「第37回マイクロマウス東北地区大会」のクラシックマウス競技フレッシュマンクラスに
出場してきました。
初めての大会出場だったこともあり、フレッシュマンクラスでエントリーしました。
大会当日はこのような迷路が展開されました。
フレッシュマンクラスなのもあり、進入不可区画が多く袋小路区画のない良心的な迷路でした。
大会結果
結果は探索走行が45秒、最短経路走行が33秒、30秒と3走分は無事完走できました。
これで1ポイントを獲得したので序盤目標は達成です。
何気に1位だったのも嬉しかったです。サンプルプログラムに感謝です。
噂によると昨年のフレッシュマンクラスも1位は Pi:Co だったとか。
残りの2走は余裕があったため裏で実装していた拡張左手法のモードを試してみたものの、
緊張で最初の探索走行分の迷路情報を消去せずに開始してしまったため、既に探索済なので
これ以上探索できないというエラーを起こして失敗に終わりました。
大会の感想
先述の通り初めての大会出場だったこともあり、前日の試走会から緊張していました。
試走会では、いつも使用している迷路と会場の迷路とで環境が違い過ぎてセンサ値や
直進距離、旋回距離の値が大きくズレていて焦りました。
大会当日はセンサ値等の調整が不十分で完走できていない機体もそれなりにいたので、
試走会での調整の重要性を理解しました。
午後はフレッシュマンクラスが先に終了していたこともあり、エキスパートクラスの
機体や機体の動作をゆっくり眺めていたのですが、大きな経験の差を実感しました。
機体の独自性もさることながら探索走行時の工夫が見ていて勉強になりました。
多くの人が迷路の全区画を探索するという手法を取っていたように感じました。
機体の中では「吸引機構」というものが搭載されているものが特に印象的でした。
機体が小さく、最短経路走行が3から5秒台と目で追えないほど圧倒的な速さでした。
次回予告
次回は、先ほど少しだけ出てきた「拡張左手法」の実装について書いていこうと思います。