## 課題(メイン):1台のロボット ### (1) 以下にROSパッケージminigameを含むアーカイブがあります。 https://www.robot.soc.i.kyoto-u.ac.jp/roboprog/materials/minigame.zip ROSのワークスペース(~/catkin_ws/src/)に解凍し、catkin_makeでコンパイルしてください。 上記のパッケージからgame_single.launchファイルを実行してみてください。ロボットが四角い部屋にあるというシミュレーションが開始します。(シミュレーションがみたい場合は、game_single.launchファイルを開いて、引数guiをtrueにしてください。可視化すると重いので、あとでfalseに戻すのお勧めします。) サービス /start_game を呼び出したら、ゲームを開始し、部屋の中に赤いボールが現れます。(/start_gameはゲームのノードが提供するサービスです。自分のコードで処理する必要はありません。) ### (2) 新しいプロジェクト(robot4\_task\_名字)とノードを作成してください。 ロボットがボールを集めるという目的のゲームをやります。今までの演習で作成したコードが使えます。 変更点として、今回は利用できる唯一のセンサがロボットのカメラなので、コンピュータービジョンを使わないといけません。 ロボットがボールに十分近づいたら、ボールをキャッチしたということになります。その時、ボールが別のランダムな位置に移ります。ロボットが継続的にボールを探し、そこに向かって移動します。 ボールを5回キャッチしたら、ゲームが終了します(シミュレータを実行したlaunchファイルが実行終了します)。コンソールにはゲームの開始から経過した時間が表示されます。 ロボットができるだけ短い時間でボールを集めることを目指して、制御やセンシングを実装しましょう。 ### (3) 今回はビデオの提出は必要ありません。パフォーマンスが十分いいと思ったら、作ったパッケージの入ったアーカイブだけを提出してください。 テストはこちらで行います。ロボットが5つのボールを集めるまでの時間に基づいて評価します。ゲームを複数回繰り返して、平均時間を計算します。 目安としては、90秒以下で目標を達成すれば満点です。 ### 詳細な説明と注意点 - コードは、/robo0 とう名前空間で実行する必要があります。そのため、minigameパッケージ内のlaunchファイルrobot_control.launchを使用するのがお勧めです。 launchファイルを実行するときに、下記のように引数を使用してパッケージとノードの名前を指定できます。 ```bash roslaunch minigame robot_control.launch pkg:=自分のパッケージ名 node:=自分のノード名 ``` - `odom` トピックから現在のロボットの位置を読み取り、`cmd_vel`トピックに速度コマンドを送信します。今までの演習と似ていますが、トピック名の前に「/」を付けないように注意してください。これは、ロボットの名前空間内のトピック(つまり、`/odom`ではなく`/robo0/odom`など)にアクセスするためです。minigameパッケージのsrcフォルダ内のdummyRobot.pyに簡単なコード例(テンプレート)があります。 - /start_gameサービスを呼び出す前にはロボットは移動できません。また、ロボットの速度は制限されており、直線速度は最大0.25m/s、角度は最大0.5rad/sとなっています。より高い速度を送信しても、この値に制限されます。 - 現在の点数を確認したい場合は、`score`パラメーターを読み取ることができます。 - 画像を処理するとき、色を検出した後、OpenCV関数 cv2.findNonZero が便利な場合があります。ゼロ以外のピクセルのみを含むベクトルを返します。(関数の出力はnumpy配列ですが、numpyライブラリが使いたくない場合は、 tolist() メッソドを使えばリストに変換できます。) - ボールに対する実際の角度を計算するには実習と同じ方法が使えます。必要なカメラのパラメータは次のようになります:f = 265.23、u0 = 160.5。 (ただし、角度を計算せずに、違う方法でロボットの速度制御を実装しても構いません。) --- 今回提出するのはこの課題で作ったパッケージ (robot4\_task\_名字 フォルダ)が入った圧縮ファイルです。(動画は不要です) --- → [課題(大会)](v4_task_tournament.html) ← [実習その2](v4_2.html) ↑ [ホームページ](index.html)