(み)
この記事は「マイクロマウス Advent Calendar 2024」 13日目の記事です。
現在の時刻は、12/13の24:55です。。。(ごめんなさい)
12/12の記事は、H.S.さんの「2024年に創った作品の紹介と開発・展示で感じたこと」でした。
H.S.さんのマインドや行動力を見習って頑張りたいと思います。
どうすればスラロームができそうかを考えてみると、はじめに思いつくのは「円弧で走ればよさそう」かと思う。 直進しながら角速度を与えればなんかできそうだ。
しかし、実際のマウスは慣性があるので角加速度を与えても瞬時に目標の角速度には上がらず、徐々に角速度を上げるしかない。
つまり、すぐに円弧で走行できるわけではなく、直進から円弧になる間には何かがある。
スラロームはそんなに単純なものではなかったようです...。
この間の状態がなにかわからないので、スラローム開始から終了までを整理するために状態を考えていきたいと思う。
つまりスラローム中の状態は角加速、円弧、角減速の3つがあり、4つの条件とそれに伴うアクションをする。これを状態遷移モデルで整理すると図のようになる。
半径Rの左90度のスラロームを考える。 スラローム終了位置を座標原点として、図ような座標で考える。
状態0:スラロームコマンドに入り、スラロームを開始する前
条件01:なし(すぐに次の状態に遷移する)
アクション01:座標変換をして、角加速度を与えて角加速をはじめる
角加速度を与えて角加速し始めると、徐々に角速度が上がる。
はじめは小さな角速度なので、旋回半径の大きな走行をしている。
角速度が上がると徐々に旋回半径が小さくなるので、ちょうど良い半径になったところで円弧状態に移行すればいい。
ちょうど良い旋回半径とは、図のように軌道の円弧がx軸に接するときであり、そのときに旋回半径rとyが等しくなる。
このときに角加速度を0にして角加速をやめて円弧で走行すればいい。
状態1:角加速している
条件12:現在の角速度で走行したときの旋回半径rとyが等しい(実際には完全に等しいときはなく、旋回半径rがyよりも小さいとき、になる)
アクション12:角加速度を0にして角加速を終了し、円弧状態になる
状態2→3以降はマイクロマウス(2) Advent Calendar 2024の12/23の記事として更新予定です。
人に伝わる文章を書くって大変ですね。
金沢草の根の帰り道、理論はわかるがプログラムが書けないんです、と言った私にN社長がおっしゃった、
「言語化できないとプログラムは書けない」
が深く刺さります。
精進します!