河原林研究室 >> RoboCep Rescue Virtual Robot Memo? >> Ruby
目�
c:\pro\guiのところにあるbot7.rbというのが最新ファイル(2009年3月2日現在)
まずサーバを立ち上げるサーバは
c:\UT2004\USAR_Maps_Files\RunServer?の
DM-ValidationTest_250.batのファイルを起動、しばらく待つ
その後コマンドプロンプトで
cd c:\pro\guiと打ってエンターを押す
その後 ruby bot7.rbと入力、実行すればプログラムが起動します
なおロボットを見るためにc:\UT2004\SystemにあるUT2004.exeと言うファイルを実行
JOINGAMEをクリックし上のほうにあるLANを選択する。
次の画面内にDM-ValidationTest_250という文字があるのでそれをクリックすると画面が変わる。
bot7.rbというプログラムの場合はROOM B にロボットがいる。
自作コントローラは簡易マッピングを備えている(最新情報は卒論の4.5にあります)
ロボットを動かすとマップをセンサ情報を元にマップを描画する。
現在使用しているセンサはソナーセンサF4を使用(センサが壁などを3m以内の場所に感知した場合に描画)
プログラムとしては以下のようになる
@cv2.setBrush($black) #色を黒に指定(Brush) @cv2.setPen($black) #色を黒に指定 (Pen) if $f4 < 3 @cv2.fillRect(346+$y+$byousyayou_f4*sin($houkou),246-$x-$byousyayou_f4*cos($houkou),349+$y+$byousyayou_f4*sin($houkou),249-$x-$byousyayou_f4*cos($houkou)) end #↓最描写の範囲 r = [0, 0, 700, 500].pack('LLLL') InvalidateRect.call(@panel2.hWnd,r,1) #マッピング部分に描写する(範囲は↑に準じる)マップを描画する部分を決めるのはif 〜 end の部分である。
fillRectは四角形を描くコマンドである。
fillRect内の346や246はマシンの初期位置である
fillRect(x1,y1,x2,y2)の場合だと
x1、y1は四角形の左上の座標をしめしx2,y2は四角形の右下の座標をしめし、その間を塗りつぶす。
なおXは右にいくほど値は大きくなり、Yは下にいくほど値が大きくなる(マイナスではないことに注意)
このプログラム内のfillRectの範囲について説明する
現在のプログラムでは描画の範囲は700,300である
$x$yははじめの場所からどれだけ動いたかを表す。
基準の位置(最初に出る場所)からの変位を25倍している。
25倍にしたのは変化を分かりやすくするためである
場所はロボットが返す情報"Location"(ロボットの位置)より算出
$yを例にあげるとロボットを生成後まっすぐ進むと"−"になる。
$byousyayou_f4はソナーセンサのF4の値(最大5)を25倍したものである。
$houkouは初期の方向を0or2πとし、そこからどのぐらい回転しているか
以上の値を使い描写点を決定している。
その点を考慮すると点を打つ点は下のようになる
なお実際に点が打たれるのはセンサF4が捕らえた壁の位置である。
引いたり、足したりするの部分がおかしいと思うかも知れないが
"Location"が取り出すXとYの位置はマップによって違うのでマップごとに考慮する必要がある