はじめに
こんにちは。アールティの加藤です。前回の記事では、Pi:Co Classic3 を組み立てて、迷路を走らせるところまで書きました。今回はサンプルプログラムにスラローム走行を追加し、16マス×16マスの迷路を完走するところまで書いてみようと思います。よろしくお願いします。

これが Pi:Co Classic3 です
サンプルプログラムの編集
Pi:Co Classic3 をさらに速く走らせるためにはサンプルプログラムを編集する必要があります。しかし、サンプルプログラムはたくさんのファイルに分かれていて、どこを編集すれば良いのか分からない方がいるかもしれません。そこで、ここでは、主に編集することになる7つのファイルを列挙しておきますので、参考にしてみてください。
- PiCoClassic3.c : ボタンによるモード切り替えを行うファイル
- search.c : 迷路の探索方法について記述しているファイル
- run.c : 直進や旋回などの走行方法について記述しているファイル
- fast.c : 最短経路の走行方法について記述しているファイル
- adjust.c : パラメータ調整を行うファイル
- parameters.h : パラメータを定義しているファイル
- glob_var.h : グローバル変数を定義しているファイル
また、編集することはおそらくありませんが重要なファイルとして static_parameters.h があります。このファイルでは迷路の大きさや一区画の距離などの定数が定義されています。ここで定義されている定数は Pi:Co Classic3 を制御するプログラムを書く際に必要になってくるので、覚えておくと良いと思います。
スラローム走行の実装
マイクロマウス競技におけるスラローム走行とは、ある程度の速度を保ったまま、円弧を描いて左右のどちらかに90度曲がることを指します。サンプルプログラムで使用されている超信地旋回は曲がる際に一度停止する必要がありますが、スラローム走行ではその必要がないため、走行時のタイムを短縮できる可能性が高いです。そのような理由から、マイクロマウス競技ではスラローム走行を実装する方が多いです。
スラローム走行についての詳しい情報は、以下の鍬形さんの記事から辿っていくと良いと思います。

今回、私は「等速円運動スラローム」と呼ばれている走行方法を実装しました。この走行方法は、左右の車輪に適度な速度差をつけることで、それぞれの車輪の進む距離に差を発生させて、円弧を描くように走らせるというものです。スラローム走行の実装については、以下のharaさんの記事を参考にしました。同じようなスラローム走行を実装したい場合はこちらの記事を参考にしてみてください。

以下のGIF画像は、私の Pi:Co Classic3 が実際にスラローム走行をしているときの様子です。速度を落としつつも停止することなく90度曲がっていることが確認できます。16マス×16マスの迷路では、何回も右折と左折を繰り返すことになるので、スラローム走行を実装できると、かなりのタイム短縮に繋がるので良いと思います。ぜひ実装してみてください。

等速円運動スラローム
パラメータ調整
マニュアルを参考にしながら、Pi:Co Classic3 のホイール径やドレッド幅、センサ値の閾値、比例制御のゲイン値などの調整を行いました。パラメータ調整はマイクロマウス研修においての最重要事項だと思います。というのも、パラメータを少し変えるだけで、綺麗に曲がれるようになったり、目標地点まで走れるようになったりするからです。パラメータ調整についての詳しい説明はマニュアルに書いてあるので、そちらをご確認ください。
また、センサの物理的な向きの調整も行いました。距離センサの向きを変えると、当然のことながら取得できるセンサ値は変化します。そして、迷路内の壁を適切に検知するためには、センサの向きを適切に調整する必要があるわけですが、この調整が意外と難しいです。距離センサの調整についてはマニュアルを参考に、距離センサの向きと感度の詳しい解説は以下の鍬形さんの記事を参考にしてください。

16×16の迷路を完走
スラローム走行を実装し、パラメータ調整も完了したので、実際に16マス×16マスの迷路を走らせてみました。以下の画像は迷路を走る Pi:Co Classic3 の様子です。無事に目標としていた16マス×16マスの迷路を走破することができました。ただし、探索時の速度は300[mm/s](スラローム走行時は150[mm/s])とかなりゆっくり走らせているので、改善の余地はまだまだあると思います。更なるタイム短縮を目指して頑張ります。

16×16の迷路を走る Pi:Co Classic3
16マス×16マスの迷路を完走したときの動画も載せておきます。
おわりに
スラローム走行の実装とパラメータ調整を経て、無事に16マス×16マスの迷路を完走できました。これにて、ひとまずはマイクロマウス研修の目標は達成できました。ロボット開発の基礎を体験することができて、とても有意義な研修でした。今後の課題としては、探索時の速度を上げることや、マイクロマウスの大会で完走することなどがあります。それに加えて、メカ設計や回路設計など、これからもまだまだ勉強することが多いので、Pi:Co Classic3 と共に頑張っていきたいと思います。それでは、また。