PDCAサイクルをしっかり回すことができるのが組込みのプロです。
関東大会本番で1周すらできずにリタイアした原因を、じっちゃんの名に賭けて33分で推理してみせます。^_^;
動画
今回、関東大会に出場したプログラムではステアリング(舵)の角度によって、通常区間走行とツインループ区間走行を切り替えて(遷移させて)います。
右カーブを大きく曲がるところでツインループ区間走行に遷移し走行スピードを落とします。逆に直線走行に入ったところで通常区間走行に遷移し最大スピードで走行します。
通常区間走行では最大スピードで走行するためマーカーの誤検知の心配がありました。そこで通常区間走行ではマーカーの検知を無視し、スピードを落としたツインループ区間でのみマーカー検知を有効にしてライントレースのエッジ切り替えを行っていました。
通常区間走行とツインループ区間走行で速度を変えることでマーカーの検知は完璧になるはずでした。ステアリング角度の計算は完璧なはずでした。
ところが、ところがです。いざ本番で走らせてみると、ツインループの中で加速したではないですか。オイ、コラ、まだツインループの中を走っているのに・・・ ツインループ区間走行している間は、ダミー区間走行を設けて万一マーカーの検出に失敗しても、2度目、3度目のマーカー通過でループを脱出させる工夫がしてありました。でも、最大速度で走り始めた通常区間走行ではマーカーは全て無視します。この瞬間、リタイアが決まりました・・・ ^_^;;;
では、なぜツインループの中を周回しているにも関わらず直線走行に入ったとプログラムは誤認したのでしょうか?
そのヒントは午前中の試走データにありました。
ステアリングの角度が大きく振れるところで、データが不自然な変化をしています。
試走の段階でログデータの異常には気づいていました。でもログが壊れているだけでステアリング角度の計算に誤りがあるとまでは疑っていませんでした。(疑っている余裕もありませんでした・・・)
ステアリング角度は、モータでステアリングを左右に駆動した時間を積分(積算)して計算しているのですが、大きな角度で振ると計算途中で変数がオーバーフローしていました・・・
EXCELを使ったシミュレーションでは上手くいっていました。ミニコースでのテストでも大きく、かつ長時間、ステアリングを振ることがなかったので、変数のオーバーフローエラーに気がつきませんでした。ガーン。
データがこれだけ乱れているのに、よりにもよって直線走行だと誤認するなんて・・・
ということでブログをご覧の皆さん、お楽しみいただけましたでしょうか?
すねいるのETロボコン2008への挑戦はこれにて終了しましたが、「なんやかんや」でブログの更新は続く予定ですので、ご期待ください。 ^_^;