はじめに
もはや誰得感はありますが,年末のご供養ってコトで.
ROS2Learnとは?
ROS 2向け強化学習フレームワークです.Gazebo上でロボットアーム等の振る舞いを自律学習して,目標タスクを実行するモデルを自動生成します.openai_rosのROS 2対応版という位置づけで正しいと思われます.
Acutronic Roboticsが自社ロボットアームMARAをReference Modelとして強力に開発を推し進めていて,,,というところでお察しください( ´·௰·`)
公式ドキュメントなどはWebの海に離散しましたが,幾つか情報の痕跡が残っています.
- (ROS Discourse) Check out gym-gazebo2 and ROS2Learn!
- (arXiv) ROS2Learn: a reinforcement learning framework for ROS 2
- (YouTube) MARA robotic arm : Training MARAOrient using PPO2 through ROS2learn framework and gym-gazebo2.
GitHubリポジトリは残念ながらachivedされています.なんかあってもIssueも立てられんorz
なんでこの記事書いたの?
筆者は2019年6月頃にコレを動かして遊んでみていました.なんかいろいろできそうだな〜と夢想している間に件の事態になったわけですが,,,
せっかく動かしてみた経験があってそのメモを残していたし,また『World MoveIt Day 2019 in Tokyo』の機会にまだちゃんと動くことが確認できたので,環境構築の整え方くらいでもROS2 Advent Calendar 2019に放流してみようかなと考えた次第です.
なお原典がすでに存在しませんので,情報の正当性は保証しません.いろいろ関係ツールをlatest versionにするとマズい可能性は高いので,なるべくそれぞれの当時のversionは明記しておきます.
違うバージョンでも動いたとか,この手順通りにやったら動かん!とか情報ありましたらお知らせくださいませ(でもどうすんだ??
前提とする環境
- Ubuntu 18.04.2 LTS
- ROS 2 Dashing
- Gazebo 9
Eloquentがリリースされましたが,さてどうでしょうか??
ROS2Learnの環境構築
千里の路もgit clone
からです.
cd ~ && git clone -b dashing https://github.com/acutronicRobotics/ros2learn.git
cd ros2learn
git submodule update --init --recursive
各モジュールをインストールしていきます.
gym_gazebo2 の準備
これもあくとろ(ry
INSTALL.mdに従ってやっていきます.
Gazebo のインストール
いつもどおりですね.
9.9.0以上が良いとのことで,古ければインストールし直しましょう.当方の環境では9.11.0
で動いてます.
curl -sSL http://get.gazebosim.org | sh
依存パッケージのインストール
DDSはOpenSpliceを使ってほしいようです.今なら直っているかも.
あとTensorflow入れてます.当方の環境では当時入れた1.14.0
ですが,最新の2.0.0でも動くかは分かりません.
sudo apt update && sudo apt install -y \
ros-dashing-action-msgs \
ros-dashing-message-filters \
ros-dashing-yaml-cpp-vendor \
ros-dashing-urdf \
ros-dashing-rttest \
ros-dashing-tf2 \
ros-dashing-tf2-geometry-msgs \
ros-dashing-rclcpp-action \
ros-dashing-cv-bridge \
ros-dashing-image-transport \
ros-dashing-camera-info-manager
# Install OpenSplice RMW implementation. Required for dashing until default FastRTPS is fixed.
sudo apt install ros-dashing-rmw-opensplice-cpp
sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
python3-colcon-common-extensions \
python3-pip \
python-rosdep \
python3-vcstool \
python3-sip-dev \
python3-numpy \
wget
# Install TensorFlow CPU. Feel free to get the GPU version at https://www.tensorflow.org/install/gpu.
pip3 install tensorflow
# Additional utilities
pip3 install transforms3d billiard psutil
# Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev
MARA用のWorkSpace作成とビルド
mkdir -p ~/ros2_mara_ws/src
cd ~/ros2_mara_ws
wget https://raw.githubusercontent.com/AcutronicRobotics/MARA/dashing/mara-ros2.repos
vcs import src < mara-ros2.repos
wget https://raw.githubusercontent.com/AcutronicRobotics/gym-gazebo2/dashing/provision/additional-repos.repos
vcs import src < additional-repos.repos
# Avoid compiling erroneus package
touch ~/ros2_mara_ws/src/orocos_kinematics_dynamics/orocos_kinematics_dynamics/COLCON_IGNORE
HRIMを生成します.
cd ~/ros2_mara_ws/src/HRIM
sudo pip3 install hrim
hrim generate models/actuator/servo/servo.xml
hrim generate models/actuator/gripper/gripper.xml
ビルドしていきます.
ちょっとパッケージのビルド順にクセがあるようです.
source /opt/ros/dashing/setup.bash
cd ~/ros2_mara_ws
colcon build --merge-install --packages-skip individual_trajectories_bridge
# Remove warnings
touch ~/ros2_mara_ws/install/share/orocos_kdl/local_setup.sh ~/ros2_mara_ws/install/share/orocos_kdl/local_setup.bash
なお当方が試したときはrosidl_typesupport_openspliceにあったバグを踏み抜いたのですが,すでに修正対応されています.(参考)
OpenAI Gymのインストール
まずpip3 uninstall gym
してから最新版をソースからビルドしようなっ!て言ってますが,怖いですねぇ.
当方のcommit tagは0.14.0
です.
cd ~
git clone https://github.com/openai/gym
cd gym
pip3 install -e .
gym-gazebo2 のインストール
以上の操作を行ってから,ros2learn/
内でgym-gazebo2をインストールします.
cd ~/ros2learn/environments/gym-gazebo2
pip3 install -e .
環境変数の設定
このへんはご自由に.私はこういうものは.bashrcでfunction alias拵えています.
cd ~/ros2learn/environments/gym-gazebo2
echo "source `pwd`/provision/mara_setup.sh" >> ~/.bashrc
echo "export RMW_IMPLEMENTATION=rmw_opensplice_cpp" >> ~/.bashrc
source ~/.bashrc
baselines パッケージのインストール
これなんなのかよく分かっていません.誰か教えてください.
OpenAIの標準的なアルゴリズムが実装されたパッケージだと思ってます.
cd ~/ros2learn/algorithms/baselines
pip3 install -e .
参考:https://github.com/AcutronicRobotics/baselines
依存ツールのインストール
Tensorboard で可視化できるのですが,その関係ですね.
pip3 install pandas
pip3 install matplotlib
sudo apt install python3-tk
QuickStart with MARA_arm
まずはGazebo連携でMARAのモデルがちゃんと動くか確認します.
source ~/ros2learn/environments/gym-gazebo2/provision/mara_setup.sh
cd ~/gym-gazebo2/examples/MARA
python3 gg_random.py -g
-h
オプションでなにができるか確認してみてください.
Train an agent
ロボットアームの姿勢制御がサンプルの学習対象のタスクのようです.
source ~/ros2learn/environments/gym-gazebo2/provision/mara_setup.sh
cd ~/ros2learn/experiments/examples/MARA
python3 train_ppo2_mlp.py -g
-g
オプションを付与すれば,Gazeboが起動して学習状況を可視的に確認できます(PCはめっちゃ重くなります)
ずっと実行し続けて,やればやるほど精度が上がる(はず)です.
学習データは /tmp/ros2learn/MARA-v0/ppo2_mlp/<timestamp>/
に順次生成されていきます.
Run a trained policy
生成した学習データをもとに対象タスクを実行します.
$ cd ~/ros2learn/algorithms/baselines/baselines/ppo2/
$ vim default.py
$ git diff
$ diff --git a/baselines/ppo2/defaults.py b/baselines/ppo2/defaults.py
index cc7d4a2..4239923 100644
--- a/baselines/ppo2/defaults.py
+++ b/baselines/ppo2/defaults.py
@@ -51,7 +51,7 @@ def mara_mlp():
# env_name = 'MARACollisionOrient-v0',
transfer_path = None,
# transfer_path = '/tmp/ros2learn/MARA-v0/ppo2_mlp/2019-02-19_12h47min/checkpoints/best',
- trained_path = '/tmp/ros2learn/MARA-v0/ppo2_mlp/2019-04-02_13h18min/checkpoints/best'
+ trained_path = '/tmp/ros2learn/MARA-v0/ppo2_mlp/2019-06-12_14h37min/checkpoints/best'
)
def mara_lstm():
$ cd ~/ros2learn/experiments/examples/MARA
$ python3 run_ppo2_mlp.py -g -r -v 0.3
defaults.py
を編集して,実行する学習データを指定します.
-g
はGazebo起動で可視化
-r
は実速度 (real speed) で実行
-v
は速度 (velocity) の指定 (この例では 0.3 rad/sec)
という感じです.
Visualize training data on tensorboard
tensorboard機能で学習データの各種統計情報を表示することができます.
$ tensorboard --logdir=/tmp/ros2learn/MARA-v0/ppo2_mlp --port 8008
としてやって,ブラウザで http://localhost:8008/ にアクセスしてみてください.
所感
当時のメモをそのまま貼り付けてみます.
- Gazebo準拠に作成したモデルを用いて強化学習を実行するには非常に便利そう
- Gazeboで学習経過/推論結果を可視的に確認できるのも良い
- 対象のモデルとタスクを作成するのが大変ではあるかもしれない
- 例えばTurtleBot3は,ROBOTIS公式のデモのものを流用するなど?
- 学習アルゴリズムのスクリプトを自作することもできそう
- baseline が標準のものだが,詳細は不明(TensorFlowの一般的なもの?)
- 様々な学習モデルやアルゴリズムの比較評価をできそう
- 自前ロボット適用には用意すべきファイルは多そう
- 基本は,GazeboモデルとPython3スクリプトの作成になる模様
まだワカラナイことが多すぎるので,いろいろ深堀りしてみたさはありますが,はてさて,,,