ししかわです。
社員研修の一環で、マイクロマウスキット「Pi:Co Classic3」を使ってマイクロマウスの大会に出場します。
全日本大会に向けて、マイクロマウスの「斜め走行」を実装中です。
ベースの部分が実装できたので、走っている様子の動画とともに紹介します。
斜め走行とは、図のように右旋回と左旋回が交互に連続する区間を斜めに直進する走り方です。
最短経路走行をより速く走るためには必須の課題です。
まずはうまく走れた動画を見てください!
※走る前にメロディを鳴らしているのはデバッグ目的です(走行パターンに応じて違う音を出しています)。
開始直後の右旋回→左旋回を斜め45度で走行できました。
斜め走行をするために、Pi:Coのサンプルプログラムを元に次の3つの実装を加えました。
- 走行パターンを最初にまとめて生成する処理
- 走行パターンを変換する処理
- 新しい走行パターン(45度旋回)について走行する処理
走行パターンを最初にまとめて生成する
Pi:Coのサンプルプログラムでは、ゴールまでの経路を逐次計算しながら「直進して左右どちらかに曲がるまでをループ処理」しています。
言い方を変えると、「曲がるまで次の経路がわからない状態」で走っています。
一方、斜め走行するためには「右旋回、左旋回、右旋回…」が交互に連続していることを先に知る必要があります。
そこで、ゴールまでにどのように走ればよいかの走行パターン情報を、最初にまとめて生成します。
簡単な例として、次のような一本道の迷路を考えます。Sがスタート、Gがゴールです。
この迷路の最短経路を「半区画直進」と「左右90度緩旋回」の走行パターンで表現すると次のとおりになります。
走行パターンを変換する
次に、生成した走行パターンを変換して、斜めを含む効率良い走行パターンに変換します。
たとえば「直進、右90度、左90度、直進」のパターンに一致した箇所を「右45度、左45度」に置き換えます。
このとき変換対象の前後に直進を含めているのがポイントです。
「右90度」の区画に入ってから斜めに曲がり始めても、マウスが斜め走行のセンターラインに乗らないため、半区画前から余裕を持って旋回を始めます。
右45度と左45度の間に直進を挟めば、斜め走行のパターンが完成します。
余談ですが、90度旋回も次のように「大回り90度旋回」に変換できます。
半区画前から曲がり始めることで旋回半径を大きくでき、その分スピードを落とさず曲がれます。
新しい走行パターン(45度旋回)で走行する
「45度旋回」や「大回り90度旋回」の走行パターンに対応する走行処理を実装します。
以前作ったスラロームシミュレータ(koraさんの記事を参照)を使って、目的の場所、角度へ向かって走るための角加速度などを算出します。
今回紹介した走行パターン以外にも、自在に斜め走行をするためには「斜め135度旋回」「斜め90度旋回」を追加する必要があります。
(こちらは未実装。大会までにがんばります。)
詳しくは「マイクロマウスで始めよう ロボットプログラミング入門」p.198 「斜め走行」を参照ください。
ここまでで最小限の斜め走行ができるようになりました。
これから大会までに、他の走行パターンの実装と調整を進めていきます。
目下の課題として、斜めに曲がるタイミングがかなりシビアです。
Pi:Coは元々機体が大きめなこともあって、少しでも曲がる位置がずれると柱にぶつかってしまいます。
これに対して旋回時や斜め直進時もセンサ値をもとにモータの制御をするなど考えられますが、
限られた時間で何を優先するかは悩ましいところです。
多分来週はブログ投稿無しで、大会向けの調整に集中します。
全日本大会でお会いしましょう!