## 課題(メイン):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)