発生する問題に対して的確な対策を行う事は難しいものです。
例えばRCJサッカーで起こる以下の問題は、ある程度経験を積んだ方々には認識されていると思います。
・”サッカーフィールドの四隅はアウトオブバウンズになり易い”
・”練習中は完璧なのに本番(試合中にアウトオブバウンズしてしまう)に弱い”
これを
”状況の分析” → ”仮説設定” → ”仮説検証” → ”仮説の確からしさ評価”
の手順で根本原因に迫って見ましょう!
1.状況の分析
頻度の高い隅っこは直近にある壁が2面、近接するロボットは3台、時々起こるシチュエーションでは直近にある壁が1面、近接するロボットは2台、ザックリ発生頻度を大中小と設定すると下表の様になります。
2.仮説設定
近接するロボットの数と発生頻度が相関していることが分かります。
超音波センサで左右の距離を測定して、広いほうが内側と判定するアウトオブバウンズ処理をしているとすれば、問題の発生は距離測定のエラーと言う事になります。
距離測定のエラーだとすると
・壁側の距離測定結果が実際より長くなる
・内側の距離測定結果が実際より短くなる
の何れかの発生、もしくは両方の発生による可能性があります。
ここで超音波センサが距離を測定する”しくみ”に基づいて考えて見ましょう。
非常に短い音をスピーカーから出して対象物に反射して帰ってくる音をマイクで拾うイメージです。音出しからマイクが音を拾うまでの時間から距離を算出します。
最大測定距離3mのセンサは距離の2乗に反比例して弱くなる音をマイクで拾える強さで音出しをしていますので1.5mの壁からの反射音はセンサにとっては充分過ぎる強さと言えます。
当然ながら隣のロボットが出した音も余裕で拾える事になります。
もし、センサが音出しした直後に、隣のロボットのセンサが出した音を拾ったら対象物の距離より短い測定結果になります。
センサは最初に音を拾ったタイミングで測定を完了するので近接するロボットのセンサがノイズ源であればエラーは短くなる方向にのみ発生します。
”壁側の距離測定結果が実際より長くなる”ことは無いと言うことになります。
3.仮説検証
近接するロボットの超音波センサがノイズ源で、これにより距離が短い方向に誤った距離になると仮定したので、検証実験を行います。
3個の超音波センサを並べて1m先に壁を置いて測定を行います。
1個は距離測定結果をシリアルアウトし、残りの2個は別のマイコンボードで独立して繰り返し同じ測定間隔で動作させます。
1台 | 3台 |
100 | 33 |
100 | 100 |
100 | 30 |
100 | 33 |
100 | 100 |
100 | 30 |
100 | 36 |
100 | 100 |
100 | 29 |
100 | 34 |
御覧の通り1台単独動作では10回測定の結果は全て100cmですが、3台稼働では29cmに見えることがあります。
注意して頂きたいのは、今回の実験において3台の測定繰り返し間隔が正確です。
実際には各ロボットの繰り返し周期は異なりますし、各々が非同期ですので実験の様に規則正しく3回に1回は正しい値が得られると言う訳でも在りませんし、タイミング依存ですので最小測定距離の3cmに見える事もあり得ます。
4.仮説の確からしさ評価
実験結果は練習中の様な1台では距離測定のエラーが起きない
複数台時に超音波センサの距離が短く見える測定ミスが発生する。
” 内側の距離測定結果が実際より短くなる”為に内側距離<壁側距離となってアウトオブバウンズを起こす。
仮説に矛盾はなさそうです。
前後の超音波センサが稼働していると隅っこに居る時に2枚の壁の多重反射が拍車をかける可能性もありそうですね。
ノイズ除去で真っ先に思いつくのは平均化(複数回測定して平均値を求める)ですが、この場合は”複数回測定して最大値を求める”手法が適切です。
センサの測定原理を理解して適切な精度向上の工夫を行う事例として見て頂ければ幸いです。
出典:PING Ultrasonic Distance Sensorデータシート