はじめに
こんにちは、槇原です。前回はハーフマウスを始めますというブログでしたが、今回からは具体的な製作過程についてまとめていきます。はじめは今回作製するマウスの仕様について書いていきます。
要求定義
最大の目標は「16×16の迷路を完走する」ですが、完走するために必要な機能と、それ以外にデバッグ機能など、一度マウスを作ってみた経験から盛り込みたい要素を上げていきます。
- マイクロマウス競技のルールに従うこと競技規定
・当然ですが競技のルール内でマウスを作ります - 自立走行で迷路を探索しながらゴールまで到達できること
・こちらも一番目標である研修課題です - 探索走行により迷路情報を作成すること
・いわゆる最短走行をするために必要です。また後述する迷路情報を保持してクラッシュしても最短走行等の競技を続けられるようにします - 迷路情報から最短経路を導出すること
・最短走行をします。これがないと最大速度を出すことができないため必須です - 最短走行で斜め走行をできるような機体にすること
・実際に斜め走行をするか分かりませんが、少なくとも機体サイズの制約を考えるときに考慮することにします - 機体単体でパラメータ設定をできるようにする
・調整時に毎回プログラムを書き込まなくても調整をできるようにする。大会の競技中に速度を変えたりパラメータをいじれるようにします - 迷路情報をフラッシュに保存できるようにする
・走行失敗したときに迷路情報を失わず競技を続行できるようにします - 音を出すことで走行中の機体の状態が分かるようにする
・走行中はリアルタイムにプログラムの状態を見ることができないので音でデバッグできるようにします - 電源電圧を監視してバッテリー電圧が下がった際にエラーを出し動作を停止すること
・バッテリーの過放電を防ぐため電圧監視をします。また電源電圧を計測することで電圧が落ちてきても同じ電圧をかけられるようにします - 壁に激突した際などでエラーを出す 走行中に衝突したらモード選択状態に戻ること
・壁に衝突した場合走行を続行できないので衝突を検知できるようにします - 迷路アルゴリズムをPCでも実行できるようにする
・ハードウエアに関係ない部分は切り分けられるようにしておくこと。前回板Pi:Coで作った解析部分を流用します - ゴール座標・最大速度加速度・探索速度加速度を機体単体で変更できるようにする
・競技の際ゴール座標設定をできるようにして事故を回避できるようにします
・競技中走行の様子をみて速度などを変えられるようにします - どのモードからでもモード選択状態に戻ることができるようにする。また下記のモードを搭載すること
- 探索モード
- 最短モード
- 低電圧モード(エラー状態)
- パラメータ設定モード(最短、探索の速度パラメータ指定、ゴール座標の指定etc)
- デバッグ走行モード(走行関数のテスト用など自由に走行できるモード)
- 走行テストモード(n区画直線,n回転)
- センサチェックモード
- 宴会芸モード
- ログ出力モード
要件定義
要求定義の方で決めた実現したいことを実現できるような項目を設定します。
- 寸法は斜め走行が可能なサイズ以下にする
・8.4 cm x 8.4cmの迷路で斜め走行するためには8.4/sqrt(2)=5.9 cm以下の横幅にします - 重量は 25g以下とする
・HM-StarterKitよりも速く走れるようにするために質量はこれ以下とします - 最高速度は1 m/s 最大加速度は2 m/s/sを出すことができるようにする
・モータが上の条件+αを満たすようなトルクが出せること
・必要なトルクが出せるような電流を流せること
・減速機が必要な場合上の条件を満たすような減速比になっていること - 車輪の速度が測定できること
・目標の最大速度を上で決めているので車輪の速度が1m/s+αまで測定できるようにします - 機体の角速度、加速度が測定できること
・角速度は、並進速度1m/s、旋回半径(45-10)mmなので29rad/sが測定できること(区画の半分45mm-直線区間10mm)
・加速度は2m/s/sが測定できて、かつそれ以上の加速度であるときには衝突したとみなすのでそれ以上のレンジまで必要です - バッテリー電圧が測定できること(バッテリー電圧はLiPoの1or2セル)
- パラメータをフラッシュに保存できること
- 壁センサによって壁の有無、壁までの距離が測定できること
・距離は1cm~10cmくらい見れるようにします(壁制御~1区画壁なし) - 走行中にブザーを自由な周波数で鳴らすことができること
- UARTデバッグをできるようにすること
- モード切替用のインターフェースを搭載すること
・物理スイッチを1つ以上搭載するします。エンコーダ、加速度センサなどをUIとすることも可能ですが、シンプルな実装が可能なスイッチを使うようにします - 壁の有無をLEDで表示する
・走行中にLEDを見れるようにすることで壁の読み飛ばしなどを確認できるようにする - 選択されているモード、パラメータをLEDで表示する
- 電源のON/OFFを物理スイッチで切り替えられるようにすること
- ブザーの音量を調整できること
・開発中にブザーをずっと鳴らしているとうるさいため音を小さくできるとよい - デバッガを使って開発できること
特にハードウエアについて搭載すべき要素は後から修正するのは手間がかかるのでここで決めた方針に従います。ということで、以上の項目を満たすように設計を進めていきます。