このプロジェクトはロボカップレスキューシミュレーションを用いた実験の再現性を担保するために,シミュレーション環境をDocker上で動作させるものです.ロボカップレスキューシミュレーションでは,サーバとエージェントをそれぞれ設定,動作させる必要があります.このプロジェクトでは,一つの実験条件に対して一つのenvファイルを記述し,envファイルを切り替えることで,それぞれの実験を実現できるようにしています.
なお,このプロジェクトは開発者が実験に使用しているJavaエージェントをさまざまな災害シナリオのもとで動作させるために作成しています.そのため,現在開発環境が提供されているadf-pythonや今後展開される可能性のあるインフラシステムへの対応は現在考えていません.
このプロジェクトではDockerを使用します.事前にDockerをインストールしておいてください.
任意のディレクトリにこのリポジトリをクローンします.もし,エージェント開発をしているディレクトリがある場合には,そのディレクトリと同階層にこのリポジトリをクローンすることを推奨します.
git clone https://github.com/NONONOexe/rcrs-docker.gitDockerイメージをビルドします.次のdocker compose upコマンドの--buildオプションで,ビルドしてもよいのですが,ロボカップレスキューシミュレーションでは,サーバとエージェントの起動において,時間差が大きいと,うまく通信できないことがあるため,事前にビルドしておきます.
docker compose builddocker compose upコマンドでサーバとエージェントを起動します.サーバはイメージの段階でGitからダウンロードしていますが,エージェントは適宜開発することを想定し,バインドマウントしたものを用います.どのディレクトリをエージェントのディレクトリとしてマウントするかは,compose.yamlに設定されているため,適宜変更してください.デフォルトでは,このリポジトリと同階層のait-rescueをマウントするようにしています.
# コンテナの起動・シミュレーションの開始
docker compose --env-file [任意の実験条件に対応するenvファイル] up server agent-custom
# コンテナの削除(必要に応じて)
docker compose downまた,サンプルエージェント(adf-sample-agent-java)を動作させたい場合には,次のように実行できます.agent-sampleはあらかじめサンプルエージェントを含めたイメージとして用意しています.
docker compose --env-file [任意の実験条件に対応するenvファイル] up server agent-sample
他にも,エージェントを用意したい場合には,同様にして,Dockerfileのステージやserviceを追加してください.
シミュレーション結果はresultsディレクトリに各実験ごとに保管されます.この結果はringo-viewerを用いて可視化できます.ringo-viewerはロボカップレスキューシミュレーションの結果をウェブブラウザ上に可視化するツールです.シミュレーション内で動作するそれぞれのエージェントの振る舞いや知覚情報を確認できます.
# ringo-viewerによる結果の可視化(Ctrl+Cで終了)
docker compose --env-file [任意の実験条件に対応するenvファイル] up ringo実験条件として現在設定できるのは,次の項目です.それぞれをenvファイルにより設定します.実験条件ごとに.env.[実験条件名]として管理することを推奨します.
EXPERIMENT_NAMEには,実験名を設定します.この名前はサーバのログディレクトリに用いられます.
MAP_NAMEには,災害シナリオの名称を設定します.rcrs-serverで用意されたシナリオ,あるいは自身で用意したシナリオの名称を指定します.rcrs-serverのシナリオはmaps配下にあるシナリオで,以下のものを利用できます.
berlin(ドイツ,ベルリン)eindhoven(オランダ,アイントホーフェン)istanbul(トルコ,イスタンブール)joao(ブラジル,ジョアンペソア)kobe(日本,神戸)montrial(カナダ,モントリオール)ny(アメリカ,ニューヨーク)paris(フランス,パリ)sakae(日本,名古屋市,栄)sf(アメリカ,サンフランシスコ)test(テスト用シナリオ)vc(仮想都市)
また,自身で用意したシナリオは,rcrs-server/custom-maps配下にシナリオ名のディレクトリを作成し,その中にmapとconfigディレクトリを作成して,それぞれにマップデータと設定ファイルを配置します.
RUN_TYPEには,事前計算(precompute)か,本シミュレーション(comprun)かを選択します.実際には,事前計算と本シミュレーションを連続で実行したい場合が多いため,このリポジトリで用意している.envファイルでは,設定せず,バッチスクリプトを用意して,その中で設定しています(comprun.batを参照).
このプロジェクトでは,以下のディレクトリ構成となっています.実験条件を管理するenvファイルは,configディレクトリの直下で保管しています.また,各コンテナへマウントするディレクトリはそれぞれのコンテナ名と対応したディレクトリにまとめています.
rcrs-docker/
├── compose.yaml
├── Dockerfile
├── config/ # 設定ファイル用ディレクトリ
├── rcrs-server/ # サーバ用ディレクトリ
│ ├── launch-server.sh # サーバ起動スクリプト
│ └── custom-maps/ # カスタムマップ用ディレクトリ
├── rcrs-agent/ # エージェント用ディレクトリ
│ └── launch-agent.sh # エージェント起動スクリプト
├── ringo-viewer/ # ringo-viewer用ディレクトリ
│ └── launch-ringo.sh # ringo-viewer起動スクリプト
├── rcrs-agent/ # エージェント用ディレクトリ
├── results/ # 結果(ログ)保存用ディレクトリ
└── README.md # この資料このプロジェクトはMITライセンスに基づいています.なお,rcrs-serverは修正BSDライセンスに基づいています.利用時はそれぞれのライセンスに基づく取り扱いをお願いします.