BROKEN's Advanced Vehicle Laboratory

プロジェクト / Basic Mouse 2003

6.大会を終えて

今回の結果は、リタイアだった。最初の直線は走行できたが、角を曲がることができず、行ったり来たりしてしまい、2回目の走行でリタイアを宣言して終了した。 原因が特定できたのは、大会が終わって帰ってきてからだった。

この不具合は会場の調整用迷路で初めて発生したもので、自分の部屋の4×6区画の調整用迷路や16×16区画のシミュレータでは発生していなかった。そのため、原因は会場の光源のせいでセンサが誤検知しているものだと思っていた。しかし、実際の原因はプログラムサイズのダイエットを行った際にポテンシャル(歩数)をカウントするカウンタ変数の型を int から unsinged char に変更したため、ポテンシャルが 255 までしかカウントできず、ポテンシャルマップを正しく生成できなくなっていたことにあった。(16×16区画では、最大16×16 = 256 までカウントできる必要がある。)

この不具合が入り込んだ背景には、ROM領域の枯渇をなんとか避けるために安易なプログラムサイズのダイエットを行ったことがある。シミュレータではこの変数は int で宣言されており、移植後にこのバグが入り込んだと考えている。

今後のために、このようなバグを未然に防ぐための方法をいくつか挙げて置く。

  1. ROM領域が十分にあるCPUを使う。
  2. マウスに実装するプログラムのソースをそのままシミュレータでも実行できるようにしておき、シミュレータで動作を検証する。
  3. エラー処理をこまめにいれて、不正な処理が発生した場所を特定しやすくする。
  4. テスト手順を決めておき、リファクタリング後はテストが100%通ることを確認する。

不具合の真の原因はリファクタリングの失敗にあったわけだが、センサのキャリブレーションの必要性やその方法、センサ値の使い方等は(能登屋さんや澤さんにアドバイスをいただいて)大変勉強になった。

次回は今回作ったソフトをベースにしつつ、CPUを強化、ハードウェアを小型化、電池本数を減らしたマウスを新しく作って大会に臨みたい。

最後になりましたが、ソフトウェア分析・設計に関して丁寧なアドバイスを下さったまつぞのさんをはじめ、BBS等で応援くださった皆様にお礼申し上げます。

(プロジェクトBM03 終わり)