ロボットを持っていなくても無料で参加できるロボカップ

はじめに
======

ロボカップの@ホーム実機リーグのシミュレーション競技（Simulation DSPL）の参加募集が開始しています。

この競技では、HSRを使った片付けタスクを行うのですが、オープンソース版のHSRシミュレータで無料で開発環境が手に入り、「新規参加チームは無料」という条件を組み合わせることで完全に無料でロボカップに参加できてしまいます。
![スクリーンショット 2020-11-06 16.09.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8035/9d5920ae-8377-708b-5d4c-1434477be6c5.png)

以下、参加方法です。

参加方法
======

ロボカップ日本委員会のページから参加登録する
-------------------------------------
以下のページから参加登録しましょう（11月6日が参加登録締切と書かれていますが、延長される見込みとのことです＞11月27日まで延長されました）。
http://www.robocup.or.jp/japanopen2020b/news/entry-182.html

シミュレータをダウンロードする
---------------------------
以下のREADMEを読んでHSRシミュレータをセットアップしましょう。
https://github.com/hsr-project/tmc_wrs_docker/blob/master/README_ja.md

READMEはLinux上にシミュレータをインストールする手順が書かれていますが、同様の手順でDocker for WindowsやDocker for Mac上でも動きます。

Docker for Windowsの場合、内部ではWSL2が用いられるのですが、デフォルトでは利用プロセッサ数が少ないので、コマンドプロンプトで以下のコマンドを入力し、

```shell
notepad %UserProfile%\.wslconfig
```

メモ帳が開いたら以下の内容をコピー・アンド・ペーストしてセーブしてください。

```
[wsl2]
processors=2
swap=0
```

processorsにはWSLに割り当てたいCPUコア数を指定します。大きめの値を設定するとシミュレーションが早くなります。

レポジトリを作成する
---------------------
サンプルプロジェクトが以下のURLで公開されています。ここからコピーを作成します。
https://github.com/devrt/wrs2020-robocup-challenge

「自分のアルゴリズムを公開しながら競技に参加しても良いぞ！」というツワモノは「fork」ボタンを押してレポジトリをforkしてください。

アルゴリズムを競技中はプライベートにしておきたい場合は、同名のプライベートレポジトリをgithub上に作成してください。その後、以下のコマンドでレポジトリをコピーします。

```
$ git clone --bare https://github.com/devrt/wrs2020-robocup-challenge.git
$ cd wrs2020-robocup-challenge.git
$ git push --mirror https://github.com/[あなたのユーザ名]/wrs2020-robocup-challenge.git
```

アルゴリズムを採点サーバに登録する
---------------------
アルゴリズムは採点サーバ上で自動採点されます。
以下のURLからビルドサービスにレポジトリを登録してください。

https://github.com/apps/devrt/installations/new

「Repository access」にはセキュリティが気になる場合は、アルゴリズムのレポジトリのみを登録してください。セキュリティを気にしない場合は、「All repositories」を選択してください。

アルゴリズムを開発する
---------------------

HSRシミュレータのWebIDE（ http://localhost:3001/ ）を開いてレポジトリをcloneしてアルゴリズムを開発しましょう。

サンプルプロジェクトでは「wrs_challenge/scripts/move.py」にシンプルな移動のアルゴリズムが書かれていますので、これを書き換えることから始めましょう。

HSRシミュレータにはjuypyter notebook形式の学習教材もついているので、まずは教材で学習を進めながらアルゴリズムを書き換えてみましょう。

アルゴリズムをレポジトリにgit pushすると、ソースの変更が検知され、自動で得点計算のためのシミュレーションが実行されます。

得点計算について
================
今年のSimulation DSPLでは、WRS2020のルールに従って得点計算されます。

ルールの詳細については、以下の公式ルールブックを読んでください。
https://worldrobotsummit.org/wrs2020/challenge/download/Rules/DetailedRules_Partner_EN.pdf

Task1
------
お片付けタスクです。
長机の上や下に散らばったおもちゃや台所用品をトレイや収納ボックスに片付けましょう。
ルールブックで指定された種類のおもちゃや台所用品を指定された場所に片付けるとボーナスポイントが加算されますが、まずは好きなところに片付けて通常ポイントを目指しましょう。
![スクリーンショット 2020-11-06 16.10.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8035/78618ddd-dd55-66dd-c8ac-00a5c52528d4.png)

Task2a
------
移動タスクです。
隣の部屋に移動するのですが、移動経路に小さなオブジェクトが転がっており、当たるとペナルティです。
移動に支障が出るほどの大きなオブジェクトではないので、まずは当たってでも突破してしまいましょう（隣の部屋に進入できるとボーナスが貰えます）。
![スクリーンショット 2020-11-06 16.11.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8035/66356569-de74-ebc1-5997-2b04429f50fb.png)

Task2
-----
ヒューマンサポートタスクです。
人のリクエスト（シミュレータ上では、「/message」ROSトピックに内容がpublishされます）を聞いて、リクエストされたオブジェクトを棚から持ってきてあげるとポイントがもらえます。
これも片付けタスク同様、間違えたものを持ってきても部分点がもらえるので、まずは部分点を目指しましょう。
![スクリーンショット 2020-11-06 16.14.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8035/398979a0-aad0-30e9-47fd-6adbea909e99.png)

採点サーバの仕組み
-------------
採点サーバはGitHubのwebhookを使ってレポジトリに加えられた変更をモニタしています。
レポジトリに変更が加えられると、レポジトリのトップフォルダにあるDockerfileを使ってDockerイメージをビルドし、そのビルドされたDockerイメージをシミュレータに接続して実行します。
アルゴリズムの実行が完了すると、実行後のスコアがスコア表に反映されます。

![systemoverview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8035/4edb4378-f90c-f001-1d33-d0156a7915c0.png)

アルゴリズムの実行に必要なライブラリ等は、Dockerfileを編集することでインストールできます（サンプルプロジェクトでは、package.xmlに記述された各依存パッケージとbio_ikをインストールする設定が書かれています）。
また、アルゴリズムを実行するコマンドは、Dockerfileの最後に書かれたCMD行を変更することでカスタマイズできます。

採点結果の公表
-------------
オブジェクトの配置はランダムで変更され、その配置で動作させたアルゴリズムのランキングが毎週発表されます（このランキングはあくまで参考です）。

得点計算はすべてのgit pushに対して行われますが、ランキングはレポジトリのデフォルトブランチ（mainまたはmaster）のアルゴリズムを対象に計算されます。実験的な開発はデフォルトブランチ以外を使って行いましょう。

最終的な順位は、2020年12月19日（土） - 20日（日）に開催される大会当日直前に計算され発表されます。

出場者向け情報
-------------

当日の日程は以下のタイムテーブルを参照してください。
https://github.com/RoboCupAtHomeJP/AtHome2020/blob/master/timetable/TimeTable2020.pdf

Sim-DSPLは19日の9時から12時に本番シミュレーションと順位発表を行います。

アルゴリズムは前日18日の日本時間午後10時までアップデートできます。
それ以降はアップデートしないでください。

本番シミュレーションでは、アルゴリズムの平均的な能力を評価するため、Round1, Round2, Round3の計3回のシミュレーションを行います。オブジェクトの配置は各ラウンドで変化し、Task1で配置されるオブジェクトの数も変化します。最終的な順位は3回の平均得点で決定します。

本番シミュレーションの実行と得点計算は自動で行われますが、アルゴリズムの実行に異常があった場合、競技参加者は1回だけシミュレーションのリスタートを要求することができます。ただし、リスタート後の得点が低かったとしても記録は上書きされますので、注意して権利行使してください。また、19日の9時から12時の時間外のリスタートのリクエストは受けられませんので、リスタートする可能性がある場合は、競技当日のZoom会議に必ず接続してください。

シミュレータ（得点計算プログラムを含む）は競技発表以降アップデートされていますので、以下のコマンドを入力してdockerイメージをアップデートしてください。

```
docker-compose down
docker-compose pull
docker-compose up
```

得点計算はWRS2020のルールを再現しています。ただし、task1のオブジェクトを落とした場合のペナルティとtask2の周囲のオブジェクトを動かした場合のペナルティは適用されません。

WRS2020のルールではtask1に15分、task2に5分の時間が与えられており、合計20分が競技時間となります。
シミュレーションについても20分をしばらく過ぎると強制終了しますので、時間をうまく使って得点を稼いでください。