## 課題(大会):複数台ロボットのゲーム大会
- 大会で使うコードは12月26日の10:00までPandAで提出してください
- 大会は第5週の12月26日の午後に行う
- 2人(または3人)でグループを組む([グループ](v4_groups.html))
- (コードの提出はグループの代表者1人のみでお願いします。全員が提出する必要はありません。)
---
一つ試合に4台のロボットが同時に参加します。試合に勝ったグループが次のステージに進みます。最後の試合で1位から4位が決まります。(最高位のグループは、演習の採点に追加する点数がもらえます。)
大会は大学のPCで行います。
#### 試合の実行
試合は自分の環境で行うことができます。
ゲームはlaunchファイルgame.launchを使用して起動できます。いずれかのロボットを制御したい場合は、rX_dummy引数をfalseに設定する必要があります。ここで、Xとはロボットの番号です。たとえば、ロボット1と2を制御する場合は、次のように実行します。
```bash
roslaunch minigame game.launch r1_dummy:=false r2_dummy:=false
```
robot_control.launchを使用して制御ノードを実行できますが、制御するロボット(robo0からrobo3)を指定する必要があります。例えば。ロボット番号1および2の実行の場合:
```bash
roslaunch minigame robot_control.launch robot:=robo1 pkg:=package1 node:=node1
roslaunch minigame robot_control.launch robot:=robo2 pkg:=package2 node:=node2
```
(複数のロボットに同じ制御コードを使用できます(package1 == package2およびnode1 == node2))。
課題(メイン)と同様に、サービス/start_gameを呼び出すことによってゲームが開始します。(これはゲームのノードが提供するサービスです。自分のコードで処理する必要はありません。)
いずれかのロボットが5つのボールを集めたら、試合は終了します。
#### 呪文
大会ではロボットが呪文を唱えることができます!唱えた呪文は、ロボットの正面から3メートル、ロボットの中心軸(X軸)から±30度の場所にある他のロボットに当たります。これは、カメラの視野にほぼ対応します。
使用できる呪文は、「かめはめ波」と「ペトリフィカス」の2つです。かめはめ波は、当てられたロボットは唱えたロボットと逆方向に押しのけられます。 ペトリフィカスはロボットを5秒間フリーズさせます。また、呪文がボールに当たると、ボールが位置を変えます。
呪文を唱えるためにはクレジットが必要です。試合が開始したときにはクレジットが0です。自分以外のいずれかのロボットがボールを拾うとクレジットが1点増えます。クレジットは、ROSパラメーター「spell」(「/」なし)を読み取ることで確認できます。
呪文を唱えるには、「/kamehameha」または「/petrificus」サービス(グローバル名なので、「/」で始まります)を呼び出します。
#### その他の注意点
- グループ内で誰が何をやるかは自分たちで決めてください。以下は、作業を分割する方法の1つの提案です。
1. センサ関連部分の担当
2. 移動と呪文の担当
- 各ロボットには次のように独自の色があるため、ボールと区別することができます。以下はロボットの色のRGB値です。
- robo0 → 青 (0, 0, 255)
- robo1 → 紫 (255, 0, 255)
- robo2 → ターコイズ (0, 255, 255)
- robo3 → 緑 (0, 255, 0)
- 他のロボットを考慮したり、呪文を使用したりする必要はありません。課題(メイン)の1台のロボットと全く同じコードを使用しても構いません。
- ROSはゲームを開発するためのプラットフォームではありません。ズルをする方法はいくつかありますが、しないでください。
- ゲームロジックのコードがminigameパッケージのscripts/game_logic.pyに入っています。今まで学んだROSの機能だけを使っているので、内容は全部理解できると思います。興味があれば見てみてください。(間違いを見つけたら、教えてください。)
---
← [課題(メイン)](v4_task.html)
↑ [ホームページ](index.html)