LoginSignup
10
14

Windows+Unity+Pythonで箱庭ロボットを強化学習できるようにするための手順書

Last updated at Posted at 2023-04-22

本記事は、Windows のパソコン上で、箱庭ロボットの強化学習をできるようにするための手順書です。

ベースとなる考え方/アーキテクチャやインストールの流れは、こちらの記事に記載されています。

ただ、TOPPERS/箱庭は、クロスプラットフォーム対応しておりますので、ご使用の OS によって若干インストール手順が変わります。ですので、Windows の方向けの手順書をこちらで整理することにしました。

事前準備

Windows版では、WSL2を利用しますので、事前にインストールをお願いします。
また、インストール完了後、端末上で以下のコマンドを実行して、ネットワークツール(routeやifconfigコマンド)をインストールしてください。

sudo apt install net-tools

また、事前にUnityおよび Blender のインストールもお願いします!

さらに、Unityプロジェクトを開く際に Windows の Git がインストールされている必要があります。Windows用のGitがインストールされていない方は、こちらの記事を参考にして、インストールおよび環境変数のセットアップをお願いします。

なお、環境変数設定後は、パソコンの再起動が必要となります。

インストール手順

本環境を利用するための最初の一歩は、hakoniwa-base の AI ブランチをクローンすることです。

git clone -b ai --recursive https://github.com/toppers/hakoniwa-base.git

※注意:クローンする場所は、WSL2内のディレクトリではなく、/mnt/cの配下に任意のディレクトリを作成して、クローンしてください

Python 実行環境のインストール

Windows版の場合、強化学習用の Python プログラムは、docker コンテナ上で実行しますので、以下の手順でイメージを作成します。

  • 補足
    • Windows版では、Docker Desktop for Windowsは利用しません。WSL2上のUbuntu環境に Docker Engine をインストールしたものを利用しますので、事前にご準備ください。インストール手順は、こちらです。

イメージを作成するディレクトリは、hakoniwa-base直下です。

cd hakoniwa-base

Dockerfileを以下のコマンドで作成します。

bash docker/template/make_dockerfile.bash runtime ai

成功すると、docker/docker_runtime/直下にDockerfile等、必要なファイルが作成されます。

$ ls docker/docker_runtime/
Dockerfile  env.bash  image_name.txt

WSL2の場合は、事前に以下のコマンドを実施ください。

sudo service docker start

ちなみに、dockerコマンドがないというエラーが出た場合は、こちらのインストール手順を参照して、インストールください。

あとは、docker イメージを作成するコマンドを実行します。(遅いと1時間くらいかかります…)

bash docker/pull-image.bash runtime

上記コマンドを実行すると、以下のようなエラーが発生する場合があります。

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=toppersjp%2Fhakoniwa-ai-runtime&tag=v1.1.0": dial unix /var/run/docker.sock: connect: permission denied

この場合は、/var/run/docker.sockにアクセス権限を与えてください。

例:

sudo chown tmori /var/run/docker.sock

成功するとこうなります。

v1.1.0: Pulling from toppersjp/hakoniwa-ai-runtime
846c0b181fff: Already exists
926155154545: Already exists
f05a15472990: Already exists
53f4d548dafb: Already exists
7146a00cd0f1: Already exists
8ada1c4d4d00: Already exists
466896f80f3c: Already exists
c3cc726e92d7: Already exists
233ebe6d53ab: Already exists
1b48cf0b8567: Already exists
f72eb56f56a5: Already exists
a8d3ad5ddf87: Already exists
d78b6291d9de: Pull complete
ce0b145408f9: Pull complete
28837015782f: Pull complete
1faeca461321: Pull complete
76eae063f731: Pull complete
bf1e75ac7168: Pull complete
6c796242ce3e: Pull complete
2ca15a4b2714: Pull complete
d4615d565d7f: Pull complete
779d46d60227: Pull complete
286cf632a6c5: Pull complete
3b70f2e8eb3c: Pull complete
b6dcfcf91fe7: Pull complete
9564277f649d: Pull complete
0ee98b65e6d1: Pull complete
Digest: sha256:b942d475b046b28b26e2e52a0b67dc041247dec63ec484ae92d1e0345e41cb1e
Status: Downloaded newer image for toppersjp/hakoniwa-ai-runtime:v1.1.0

Unity環境のセットアップ

次に、以下のリポジトリを hakoniwa-base と同じディレクトリ階層でクローンします。

現在、hakoniwa-base 直下にいる場合は、以下のコマンドで1個上のディレクトリに移動してこうなっていればOKです。

$ cd ..
$ ls
hakoniwa-base

この状態で、以下のようにクローンします。

git clone -b unity-asset --recursive https://github.com/toppers/hakoniwa-ros2sim.git

クローン後、こうなっていればOKです。

$ ls
hakoniwa-base hakoniwa-ros2sim

hakoniwa-ros2sim ディレクトリ直下で docker コンテナを起動します。

cd hakoniwa-ros2sim
 bash docker/run.bash 

成功すると、以下のようにログ出力され、 docker コンテナに入った状態になります。

Unable to find image 'toppersjp/hakoniwa-ros2sim:v1.1.4' locally
v1.1.4: Pulling from toppersjp/hakoniwa-ros2sim
675920708c8b: Pull complete
7cf19bc0e0d1: Pull complete
ff483ca449e2: Pull complete
077f60b8d79e: Pull complete
c152c32a5dfa: Pull complete
f6e812731a44: Pull complete
430ce07703bc: Pull complete
1890f880d76a: Pull complete
6d1250a90908: Pull complete
67e10b955d67: Pull complete
7586ba8a5351: Pull complete
eb755f666a22: Pull complete
300c9890b2ce: Pull complete
6255f065a4c1: Pull complete
2f7b7f67ac87: Pull complete
91b397254f1b: Pull complete
9523e9a1b772: Pull complete
468c589c4d42: Pull complete
5bc814b1466b: Pull complete
dbbc7427638a: Pull complete
23569c6c3f51: Pull complete
522d18578c32: Pull complete
Digest: sha256:5c34e2185b39363a5e53df7e852dec88677ce57477120be52f62b840833df5a8
Status: Downloaded newer image for toppersjp/hakoniwa-ros2sim:v1.1.4
root@LAPTOP-FHREG47I:~/workspace/hakoniwa-ros2sim/ros2/workspace#

次に、以下の手順で必要なUnityモデルなどをインストールします。

bash hako-install.bash opt all

なお、上記コマンドでは、Unityと箱庭間の通信用のIPアドレス(WSL2向けの仮想IPアドレス)を自動設定します。Windows/WSL2の場合、パソコンを再起動しますと、IPアドレスが変わってしまいますので、再起動された場合は、上記コマンドを再実行していただく必要があります。

Unity環境の起動

いよいよ、Unityを起動していきます。

まずは、Unity Hub を起動して、「開く」ボタンをクリックしてください。

image.png

hakoniwa-ros2sim をクローンしたディレクトリ内のhakoniwa-ros2sim\ros2\unity\tb3を選択して、「開く」ボタンをクリックしてください(数分かかります...)。

image.png

  • 補足
  • この際、Unityバージョンが異なる旨のメッセージが出る場合があります。異なるバージョンであってもUnityがいい感じで変換してくれますので、問題ありません。

起動すると以下の画面が現れます。

image.png

強化学習の実行手順

解説長かったですが、強化学習の実行手順をご説明しましょう。

強化学習プログラムを編集する

強化学習プログラムは、先ほどクローンした hakoniwa-base の以下のファイルを直接編集します。

  • workspace/dev/ai/ai_qtable.py
  • workspace/dev/ai/hako_robomodel_ev3.py

なお、プログラム編集環境は、VSCode がお薦めです。

左側のビューでディレクトリ構成を一覧で見れますし、下側にWSL2のターミナルを開くこともできちゃいます!

image.png

箱庭環境を起動する

WSL2 のターミナル上で、hakoniwa-base 直下に移動し、以下のコマンドで箱庭環境を起動します。

 bash docker/run.bash runtime

起動成功すると、以下のログが出力されます。

INFO: ACTIVATING HAKO-MASTER
INFO: ACTIVATING :dev/ai/ai_qtable.py
create_channel: id=0 size=196

Unityのシミュレーションを開始する

Unityエディタの画面左下にある「プロジェクトビュー」の「Assets/Scenes/Transport」を選択すると、画面下に「Simulation」というシーンがありますので、これをダブルクリックしましょう。

image.png

以下のようにコースが表示されていれば成功です。

image.png

この状態で、Unityエディタの再生ボタンをクリックしましょう。

image.png

成功すると、以下のようにロボットが現れます。

image.png

この状態で、「開始」ボタンをクリックです!

image.png

成功するとロボットが動き出します。

なお、強化学習中に、終了状態になった場合は、強制リセットがかかり、最初から学習をやり直しますので、学習状況が見えて楽しいですよ。

トラブルシューティング

docker 起動時にエラー発生する

docker 起動時に以下のようなエラーが出る場合があります。

$ bash docker/run.bash
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
 * Starting Docker: docker                                                                                              waiting for docker service activation..
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create?name=hakoniwa-ros2sim": dial unix /var/run/docker.sock: connect: permission denied.

原因は、/var/run/docker.sock にアクセス権がないためですので、以下のコマンドでアクセス権を与えることで直ります。

例:ユーザ名が tmori の場合

sudo chown tmori   /var/run/docker.sock

シミュレーション開始したけど、ロボットが動かない

考えられる原因として、Unityの通信がWindowsのセキュリティでブロックされている可能性があります。

Windows Defender で、以下の2点をご確認ください。

  • 詳細設定
  • Windows Defenderファイアウォールを介したアプリまたは機能を許可
    image.png

詳細設定

受信の規則を参照して、下図のように Unity Editor が赤になっている場合は、ブロックされています。
image.png

プロパティを表示して許可してください。

image.png

Windows Defenderファイアウォールを介したアプリまたは機能を許可

「許可されたアプリおよび機能(A):」を参照して、Unity Editor が下図のように、チェック入っていない場合は、ブロックされています。

image.png

設定変更して、チェックを入れてください。

10
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
14