こんにちは。koraです。
今回は、迷路探索プログラムにスラロームを追加します。
現在のプログラムのターン
前回までに作成した探索のプログラムでは、次の手順でターンしています。
①光センサから壁情報を更新
②歩数マップを更新して進行方向を決定
③半区画前進して90度回転
④半区画前進
③で一旦停止するのでゆっくりとした探索になってしまいます。③と④を一つのスラロームにまとめてしまえば、迷路探索を大幅にスピードアップできるはずです。
幸い、速度と角速度を指定すればそれに追従するようなプログラムはすでに実装しています。
シミュレータの作成
ただし、単純に円弧の軌道で旋回しようとすると、直進から旋回に移行する瞬間に角加速度が無限大になってしまうため、上手く追従できません。
そこで、スラロームの始めと終わりに角加速区間と角減速区間を設けることで、マウスが追従できるようにします。
角速度が一定にならないのでスラローム終了時の座標の調整が難しくなってしまいますが、これは表計算ソフトでシミュレータを作ることでカバーします。
このシミュレータでは最初に「速度・角加減速区間の角加速度・各区間の区切りとなる角度」を指定します。
後は単純に1msごとの角速度、角度、X座標、Y座標を計算し、X座標とY座標をグラフに描写して軌跡を表示します。
なお、実際の迷路では、歩数マップの更新に時間がかかるため更新中に数ミリほど惰行してしまいます。
そのため、スラローム開始前とスラローム終了後に直進区間を設け、ズレを吸収できるようにオフセットすると安定します。
テスト
run.cファイルに新たな関数を追加して、「オフセット分直進 -> 角加速 -> 等角速度 -> 角減速 -> オフセット分直進」を実行できるようにします。
シミュレータでわかった値をもとに、何度かパラメータを調整すると、スラロームで90度曲がれるようになりました。