Robot
Chainer
OpenAIGym
chainerRL
roboschool

Roboschool を ChainerRL で使ってみる

この投稿は、Chainer/CuPy Advent Calendar 2018の22日目の記事です。

ChainerRL良いですよね! 強化学習ってなんだか難しいですが、ChainerRLを使えば、強化学習できる気分を味わえます。

でも、別にAtariのゲームを学習させても面白くない!どうせなら、強化学習でロボットを動かしたい!ということで、OpenAIが公開しているOSSのMuJoCoライクなロボットシミュレーション環境 Roboschool を ChainerRL から使ってみたいと思います。


TL;DR


  • nvidia-docker2を使う場合


    • $ docker run --runtime=nvidia -it --name robo -p 6080:6080 ikeyasu/reinforcement-learning:latest

    • 別のターミナルを開く


    • $ docker exec -it robo git clone https://github.com/ikeyasu/roboschool_chainerrl.git

    • $ docker exec -it robo /bin/bash -c 'cd roboschool_chainerrl && python3 train.py --gpu 0 --steps=2000000 --minibatch-size=8 --env=RoboschoolAnt-v1 --render'



  • CPUの場合


    • $ docker run -it --name robo -p 6080:6080 ikeyasu/reinforcement-learning:cpu

    • 別のターミナルを開く


    • $ docker exec -it robo git clone https://github.com/ikeyasu/roboschool_chainerrl.git

    • $ docker exec -it robo /bin/bash -c 'cd roboschool_chainerrl && python3 train.py --gpu -1 --steps=2000000 --minibatch-size=8 --env=RoboschoolAnt-v1 --render'



  • ブラウザで http://localhost:6080 を見る

screen.gif


Roboschoolとは

Roboschoolというのは、Open AI が公開している強化学習用のロボットシミュレーション環境です。同様のものとしては、MuJoCoが有名で、強化学習の論文は、MuJoCoを使われているものを数多く見かけます。

しかし、MuJoCoはプロプライエタリのソフトで安くはありませんし、ライセンス的に自由ではないです。

そこで、Open AI が、OSSの物理シミュレーターのPyBulletを使って開発したのが、Roboschoolです。

が、このRoboschool、どうも、Roboschool2が開発中のようで、現行のものは開発が止まっています。

Roboschool2がいつ出てくるかも分からないので、気にせず、Roboschoolを使うことにします。


Roboschool を動かしてみる

Bullet をビルドしていれなければならないので、Roboschoolのインストールはそこそこ面倒です。

なので、Dockerのコンテナイメージを用意しました。

一般的に、Dockerで画面を出す(参考)のは面倒なのと、OpenGLをその環境で動作させるのは大変なので、VNCを使うことにしました。ついでに、VNC Viewerも面倒だったので、noVNCを使って、ブラウザで表示するようにしてみました。

Docker ファイル

https://github.com/ikeyasu/docker-reinforcement-learning

Docker hub

https://hub.docker.com/r/ikeyasu/reinforcement-learning

GPUを使う場合は、nvidia-docker2を入れて 、以下のように実行して下さい

$ docker run --runtime=nvidia -it --name robo -p 6080:6080 ikeyasu/reinforcement-learning:latest

CPUのみ場合は以下のようにしてください

$ docker run -it --name robo -p 6080:6080 ikeyasu/reinforcement-learning:cpu

ブラウザで、http://localhost:6080 にアクセスしてください。(別のサーバなどで動かしている場合は http://(ip address):6080)

image.png

試しにRoboschool付属のサンプルを動かしてみましょう。

上記のVNCのターミナルに、以下を入力して下さい。

$ python3 $ROBOSCHOOL_PATH/agent_zoo/demo_race2.py

コピーアンドペーストは左のクリップボードボタンで貼り付けた後、ターミナル側でも貼り付けして下さい。

screen.gif


ChaineRLで動かしてみる

ChainerRL を Roboschool で動かしてみましょう。

ChainerRLのサンプル及びAI-BS Summer School 2017のリポジトリを参考に作成しました。

https://github.com/ikeyasu/roboschool_chainerrl

とりあえず動かしてみます。

$ python3 train.py --gpu 0 --steps=2000000 --minibatch-size=8 --env=RoboschoolAnt-v1 --render

以下のように、もぞもぞとランダムに動く4本脚の何かが表示されると思います。

余談ですが、このモデル、"Ant"って名前なのですが、どのあたりが蟻なんだ。。4本脚なのでなんらか動物に近い気もしますが、むしろ蜘蛛にも似ている。。

screen.gif

学習済みモデルは、out/20YYMMDDT00HHMM.SSSSSS/のようなディレクトリに保存されています。

上記のコマンドですと、ステップ数2000000が終わるとout/20YYMMDDT00HHMM.SSSSSS/2000000_finish/に学習済みモデルが保存されています。

これは、以下のようにすると、デモ実行できます。(学習せずに実行します)

$ python3 train.py --demo --out=demo_out --gpu=-1 --render --env=RoboschoolAnt-v1 --load=2000000_finish/

ちなみに、2000000ステップが終わるのに、このPCで5時間半かかりました。

一応、学習済みモデルを置いておきます。

https://github.com/ikeyasu/roboschool_chainerrl/releases/tag/v0.1

ダウンロードして実行するのはこんな感じでできます。

$ wget https://github.com/ikeyasu/roboschool_chainerrl/releases/download/v0.1/RoboschoolAnt-v1_DDPG_2000000_finish.zip

$ unzip RoboschoolAnt-v1_DDPG_2000000_finish.zip
$ python3 train.py --demo --out=debug_out --gpu=-1 --render --env=RoboschoolAnt-v1 --load=2000000_finish/


その他機能

実はこのレポジトリ https://github.com/ikeyasu/roboschool_chainerrl は、そこそこ多機能で以下のような実装があります。(やりかけも多数ですが。。)


  • アルゴリズムは、DDPGとTRPO対応


    • --algorithm オプション

    • ChainerRL様々でアルゴリズムの中身は気にせず実装できた




  • URDF 及び、Mujoco XML(mjcf)の対応


    • --urdf 及び、--mjcf オプション




  • 角度制御のサーボモーター対応


    • URDFとmjcfでのみ使えます



  • 実物のサーボモーターを動かす


    • 絶賛未完成



それぞれ詳しく説明したいですが、Adventカレンダーの時間が来たので、また別記事にします。

なんか、ChainerRLの話しではなく、周辺の話しばかりでしたが、皆さんRoboschoolで遊んでみると面白いと思います!