ふるお〜と!- FullAuto

AI・ロボットが普及しBI(ベーシックインカム)が早急に実現されることを願う元ニートのブログ

ふるお〜と!-FullAuto

Open AI の3D学習環境(Dart-env)

前置き

前回OpenAI Gymの3D環境としてMujocoをインストールしてみましたが (OpenAI Gymの強化学習実装コードのBaselinesをインストール - FullAuto)

有料で高いので他の3D環境をインストールしてみます。 robotschrool,robotshrool2などがありますが、robochroolのブログでDart-envが推されていたのでUbuntu18.04にインストールしてみます。
※公式wikiGithub通りにやってもすんなりといかない。
結局、GLUT Windowには何も表示されなかったが、コマンドライン上ではうまくいったのでメモ)

1.ソースからDartをインストールする

Install DART on Ubuntu | DART: Dynamic Animation and Robotics Toolkit

またはGithub

Home · DartEnv/dart-env Wiki · GitHub

を参照してください。公式wikiの方法を順にやっていったら最終的にModuleNotFoundError: No module named 'pydart2'と怒られた)

必要パッケージをインストール

$ sudo apt install build-essential cmake pkg-config git
$ sudo apt install libeigen3-dev libassimp-dev libccd-dev libfcl-dev libboost-regex-dev libboost-system-dev
$ sudo apt install libopenscenegraph-dev
$ sudo apt install libbullet-dev
$ sudo apt install liburdfdom-dev
$ sudo apt install libnlopt-dev
$ sudo apt install libxi-dev libxmu-dev freeglut3-dev
$ sudo apt install libode-dev # ignore this if it tells you ode has already been installed

Download and install Dart

$ git clone git://github.com/dartsim/dart.git
$ cd dart
$ wget https://github.com/dartsim/dart/archive/v6.3.0.zip  ($ git checkout tags/v6.3.0※公式ではこちらの方法だが後にエラーとなった)
$ unzip v6.3.0.zip 
$ cd dart-6.3.0
$ mkdir build
$ cd build
$ cmake ..
$ make -j4
$ sudo make install

2.Install PyDart2

Anacondaをインストール

$ wget https://repo.anaconda.com/archive/Anaconda3-2018.12-Linux-x86_64.sh
$  sudo chmod a+x Anaconda3-2018.12-Linux-x86_64.sh
$  sudo ./Anaconda3-2018.12-Linux-x86_64.sh
(Do you wish the installer to initialize Anaconda3
in your /home/[username]/.bashrc ? [<span style="color: #ff0000">yes</span>])

ターミナルを再起動するか「$ source ~/.bashrc」する。

依存関係をインストール

virtualenv環境で行います

$ . /path/to/venv/bin/activate
(ex. $ . env1/bin/activate)
$ conda install swig
$ conda install pyqt=5

PyDart2をインストール

$ git clone https://github.com/sehoonha/pydart2.git
$ cd pydart2
$ pip3 install -r requirements.txt
$ python setup.py build build_ext
$ python setup.py develop
$ export PYTHONPATH=PATH_TO_PYDART2:$PYTHONPATH
(ex. $ export PYTHONPATH=~/openai/pydart2:$PYTHONPATH)

3.Install Dart Env

(virtualenv環境で構築します) dart-envをインストール

$ git clone https://github.com/VincentYu68/dart-env.git
$ cd dart-env
$ pip install -e .[dart]

Example

前回git cloneしたbaselineへ移行します。 または

$ git clone https://github.com/openai/baselines.git
$ cd baselines
$ pip install -e .

baselinesルートディレクトリ配下に下記のコードをrun_dart.pyとして保存する。

from baselines.common.cmd_util import make_mujoco_env, mujoco_arg_parser
from baselines.common import tf_util as U
from baselines import logger

def callback(localv, globalv):
    import joblib
    if localv['iters_so_far'] % 10 != 0:
        return
    save_dict = {}
    variables = localv['pi'].get_variables()
    for i in range(len(variables)):
        cur_val = variables[i].eval()
        save_dict[variables[i].name] = cur_val
    joblib.dump(save_dict, logger.get_dir()+'/policy_params_'+str(localv['iters_so_far'])+'.pkl', compress=True)
    joblib.dump(save_dict, logger.get_dir() + '/policy_params' + '.pkl', compress=True)

def train(env_id, num_timesteps, seed):
    from baselines.ppo1 import mlp_policy, pposgd_simple
    U.make_session(num_cpu=1).__enter__()
    def policy_fn(name, ob_space, ac_space):
        return mlp_policy.MlpPolicy(name=name, ob_space=ob_space, ac_space=ac_space,
            hid_size=64, num_hid_layers=2)
    env = make_mujoco_env(env_id, seed)
    pposgd_simple.learn(env, policy_fn,
            max_timesteps=num_timesteps,
            timesteps_per_actorbatch=4000,
            clip_param=0.2, entcoeff=0.0,
            optim_epochs=10, optim_stepsize=3e-4, optim_batchsize=64,
            gamma=0.99, lam=0.95, schedule='linear',callback=callback,
        )
    env.close()

def main():
    args = mujoco_arg_parser().parse_args()
    logger.configure('data/ppo_'+args.env+'_results')
    train(args.env, num_timesteps=args.num_timesteps, seed=args.seed)

if __name__ == '__main__':
    main()

実行する

$ python test_policy.py DartHopper-v1 data/ppo_DartHopper-v1_results/policy_params.pkl
※1

エラー対処

※1 libdart-gui.so.6.3.0が見つからないよと怒られる場合

$ sudo ldconfig


※2 ModuleNotFoundError: No module named 'pydart2'

$ export PYTHONPATH=PATH_TO_PYDART2:$PYTHONPATH (ex. $ export PYTHONPATH=~/openai/pydart2:$PYTHONPATH)

参考

Roboschool

Install DART on Ubuntu | DART: Dynamic Animation and Robotics Toolkit

Use OpenAI Baselines with Dart Env · DartEnv/dart-env Wiki · GitHub