手を叩くと、「ワン」と応答して音源の人へ向かって駆け寄るデモンストレーションです。4つのマイクロホンで受信した音の到達時間差を使用して、音源位置推定を行っています。計算上は音源の位置を求めることが可能ですが、ここでは受信精度が足りず音源方向のみ求めて使用しています。
ポテンシャル法みたいな方法(ベクトル法)を使って、経路生成と障害物回避をやりました。ポテンシャル法は目標地点への引力と障害物との斥力を計算して合力の方向に向かう手法です。極小にハマったときはハマったところに仮想障害物を置いて下がって再びゴールに向かうことで抜け出します。コンセプトのカエルさんはあまり意味がありません。
L302からD307へお使いするロボットを考えました。 L302からD307へ行く最も簡単な方法はと考えると、左の壁に沿って進むことです。そのため、左の壁を沿って走行するプログラムを作成しました。使用した外界センサはURGのみです。最大50cm/sで走行し、旋回速度に応じて減速します。残念ながらD棟の廊下に散らかっている靴で成功率は低いです。あと、D307に到着したかどうかの認識まで作れなかったので止まらないです。ひたすら壁沿い走行します。本番では、部屋の中とすぐ外の廊下で、壁沿いの性能だけを披露しました。
URGからの2次元データを擬似的に3次元として(OpenGLで)表示する。ホスト側のプログラムでロボットを動かしたい場所をマウスでクリックするとロボットがその場所まで移動し、途中に障害物がある場合には障害物を回避して目標の場所まで移動する。ホストとクライアント間はTCP/IPで無線通信している。
ロボットは速度を速くしたり遅くしたりしながら、移動している障害物(静止障害物も含む)を回避します。環境全体の動きを推定し、ロボットの動作可能な動きの範囲で、3秒先まで0.1秒ごとにどのように動くのがそれなりに最適かを計算しています。計算量が膨大すぎて、この方法はイマイチでした。。。
ロボットはSpeeGo、センサは反射板のみ検出する特別なRapid-URGを用いました。 SpeeGoはRapid-URGが検出した反射板に向かっていきます…が、検出された反射板が偶数個あると近づいてくるどころか後ずさりを始めてしまいます。実は、反射板の数が奇数個の時だけ、その中で一番近い反射板に向かって進んでいくのです。ゴールにSpeeGoを誘導するチームとお邪魔チームに別れてゲームをしましょう!反射板を常に奇数個になるように、お邪魔チームは複数個になるように(^O^)