佐倉です。日曜日なのでマイクロマウスのちょっとマニアックな話をしていきます。
どう作ると綺麗にまとまるのか。意外とごちゃごちゃになってしまうマイクロマウスのソフトウェアのシステムについて考えて行こうと思います。
さて、とりあえず前回出した図をもう一度載せます。
言葉をマイクロマウス版にした物を載せます。
こんな感じです。具体的なイメージが湧いてきたでしょうか。
まず、マイクロマウスでは処理の優先順位がはっきりしており、OSはただのボトルネックになってしまうため、使用しない物として話を進めます。
上の図の中で絶対に崩してはいけない部分があります。それは、中央のセンサ→フィルタ→制御→マシン→センサ…となっている制御ループです。制御ループが崩れた場合、マシンはどんな動きをするのか予想がつかない状態になってしまいます。なので、この部分はマイコンの割り込みルーチン内に記述すべきです。
ここで1つ問題が出てきます。制御ループはループですが、エントリポイントを決めなければなりません。これについては、センサの取得から行うのが定石です。A/D変換を行ったり、何らかの通信を行なってデータを得るセンサの場合、取得までの時間がかかるため、処理の真ん中に置くと待ち時間が生じてしまうためです。
面倒な場合の例
タイマからのトリガで開始した通信やA/D変換の終了の割り込みでフィルタ→制御 という流れを記述するのが良いと思います。
良い場合の例
一番重要な制御ループの組み方がわかったところで、同期と非同期 と分類してある事に注目してみましょう。
ここでいう同期と非同期は、制御クロックに対して 同期的か否か という定義です。
処理の組み方としては逆の感覚になると思います。たとえば、迷路情報を管理する部分はマシンがちょうどいい場所に来るまで(例えばループで)待つので、プログラムとしては同期的な処理に見えます。
同期しない2つの部分がある場合、それぞれの間でデータをやりとりするためにはバッファをもうけるのが一般的です。今回の実装例もそれにならいます。
今回の記事はここまで。次回はスケルトンコードを交えつつ、より具体的なシステム構築を目指します。
【関連記事】
マイクロマウスを研修に使う理由
【関連商品】
マウスショップページ |
Pi:Co Classic購入ページへ |
BeeClone購入ページへ |