ETロボコン関東予選で華々しく散った「すねいる」ですが、暴走の原因をほぼ特定しました。
こんなふうにストロボや太陽光の外乱の影響で一時的に光センサの値が飛んだときは、その値を無視するようにプログラミングしてありました。しかし、この「無視」がバグの原因でした。まさにストロボのように一時的な例外値であれば無視することで、過ぎ去ってくれるのですが、コースの段差などに躓いて、やはり光センサの値が急激に変化したことを無視すると、そのまま復帰できないプログラムになっていました。(だって、ローカルな試走コースはカーペットの上に広げていたので、段差なんてないんです・・・)
コースアウトを検知すると緊急停止するように設計してありましたが、外乱は無視するんですね・・・ だって、コース外の白ではなく、外乱を検出したと最後の瞬間まで思い込んでいるのですから・・・
敗戦直後は、メモリリークや変数のオーバーフローも疑ったのですが、詳細に検討した結果、白でした。ということで、コースアウト直後に RCX のプログラムが暴走していたのは、落下の物理的衝撃が原因だったみたいです・・・ ~_~;
ということで、この「思い込み」という一点で、我がすねいるのプログラムは設計者のDNAを受け継いでいることが証明されたのでした・・・