強化学習とロボティクスの基礎を体験しよう。 - 迷路から抜け出す方法を学習するロボット (第 1 回)

2020-02-03
デベロッパーのためのクラウド活用方法

Author : 河田 卓志

自動運転など様々な分野で機械学習を組み合わせた新しいロボティクスのアプリケーションが生み出されてきています。自律型のロボットは今後ますます増え、それらの機能を実現するために機械学習の活用がさらに活発になることはほぼ間違いないでしょう。

この記事では全 3 回連載で「強化学習」と呼ばれる機械学習の手法をロボティクスに応用した例を AWS RoboMaker を使って体験します。

AWS RoboMaker はロボティクスのアプリケーションを開発、運用するための各種機能を提供する AWS のサービスです。 AWS RoboMaker はロボットアプリケーションを開発するための開発環境と、開発されたアプリケーションの動作確認をするためのシミュレーション環境をクラウドに提供し、またクラウドで開発されたロボットアプリケーションを実際のロボットにインターネット経由でインストールするためのデプロイの機能(フリート管理)を提供しています。

AWS RoboMaker は ROS に対応しています。 ROS は世界で最も広く使われているオープンソースのロボットアプリケーションのためのソフトウェアフレームワークです。ROS を用いることでロボットのハードウェアへの依存関係をおさえたロボットアプリケーションの開発が可能になり、一度開発したロボットアプリケーションの各コンポーネントは ROS に対応した様々なロボットで利用することができます。また、自身のロボットを ROS 対応させることで ROS のエコシステムの中で培われ、オープンソースで公開された様々なコンポーネントをそのまま自身のロボットで動かすこともできます。ロボティクスの世界においてもソフトウェアの重要度が増してくる中、ROS は今後ますます注目されてくることでしょう。

今回は AWS RoboMaker の「開発環境」「シミュレーション」を用いて、強化学習を行うロボットアプリケーションを試してみましょう。

今回、アプリケーションは AWS RoboMaker の「シミュレーション」上で動作します。シミュレーション環境は、壁で囲われた迷路のような部屋となっており、ロボットはこの部屋を壁にぶつからないように GOAL の場所までたどり着けるよう学習します。シミュレーション内では Turtlebot3 Burger というロボットを操作します。このロボットには 360 度、障害物までの距離を捉えることができる、LiDAR センサーが搭載されています。ロボットアプリケーションはこのセンサーからの情報を環境情報として受け取り、壁にぶつからずに迷路を通過する方法を学習していきます。

強化学習には Coach というフレームワークを利用しており、また OpenAI Gym が提供するライブラリを使って強化学習用の環境を実装しています。それぞれについて詳しくは、CoachOpenAI Gym をご参照ください。

1. 準備 - ハンズオン環境のセットアップ

1-1. AWS マネージメントコンソール にログインします。リージョンはアジアパシフィック (東京) を選択します。

 

(クリックすると拡大できます)

1-2. AWS マネージメントコンソールでサービスから RoboMaker を選択し、左のナビゲーションペインで 開発 -> 開発環境を選択します。「開発環境」の画面が開かれたら右上の [環境の作成] ボタンをクリックします。

(クリックすると拡大できます)

1-3. 次のように入力、設定を行います。

  • 名前 : 任意の名前を設定します。
  • プリインストールされた ROS ディストリビューション : ROS Kinetic を選択します
  • インスタンスタイプ : デフォルトの m4.large を選択します。
  • ネットワークの設定 : VPC はプルダウンからデフォルトの VPC を選択します。
  • サブネット : プルダウンからパブリックサブネットを一つ選択します。

設定ができたら、最後に [作成] ボタンをクリックして、開発環境の構築を開始します。

メモ:

デフォルトの VPC が使えない場合は、パブリックサブネットを持つ任意の VPC を選択し、サブネットでは選択した VPC 内のパブリックサブネットを選択します。
合わせて後述のステップ 1-5 でも追加の作業が必要になります。

(クリックすると拡大できます)

1-4. AWS のクラウド IDE サービス、AWS Cloud9 をベースに AWS RoboMaker 用に機能拡張した開発環境が開きます。

(クリックすると拡大できます)

1-5. 開発環境下方にあるターミナルウィンドウをクリック、次のコマンドを入力して今回扱うサンプルアプリケーションをダウンロードします。

git clone https://github.com/aws-samples/aws-robomaker-sample-application-meirorunner.git MeiroRunner

メモ:

デフォルトの VPC がパブリックサブネットを持たないか、何らかの理由でデフォルトの VPC が使えない場合、MeiroRunner ディレクトリ配下の ws_settings.yaml ファイルを開き、vpc と subnets の項目を任意に書き換えます。

(クリックすると拡大できます)

1-6. さらに次のコマンドを入力します。

cd MeiroRunner
./ws_setup.sh

今回のハンズオン環境の構築が開始されます。
このスクリプトは次のことを行なっています。

  • 開発環境を最新のソフトウェアバージョンに更新
  • 演習に必要なリソースの準備
    • 演習で使う Amazon S3 バケットの作成
    • 演習で使う IAM ロールの作成
    • Security グループと Subnet の確認
    • シミュレーションアプリケーションとロボットアプリケーションの名前の作成
    • 開発環境の設定ファイル roboMakerSettings.json ファイルの更新
    • 初回のビルド (初回のビルドは時間がかかるのでここで実行しています)

(クリックすると拡大できます)

この処理は完了までおよそ 20 分かかります。終了すると次のような表示になります。 

2. アプリケーションを試す

2-1. 開発環境のメニューより Run -> Launch Simulation -> MeiroRunner Training を選択します。シミュレーションが開始されます。

(クリックすると拡大できます)

2-2. 開発環境のメニューより Simulation -> View Simulation Job Details を選択します。シミュレーションジョブの詳細画面が開きます。

(クリックすると拡大できます)

2-3. 数分ほどで、「ステータス」の表示が 「実行中」に変わります。
実行中」状態になると各ツールを開くためのアイコンが表示されます。
[Gazebo] アイコンをクリックします。

Gazeboはシミュレータです。AWS RoboMaker 開発環境で開発したアプリケーションは Gazebo シミュレータで実行することができます。

(クリックすると拡大できます)

2-4. Gazebo のシミュレーションウィンドウが開かれます。

  • 左下から移動を始めるのがロボットです。Turtlebot3 Burger というロボットをシミュレーション環境で動かしています。
  • アプリケーションは強化学習を行なっています。強化学習ではエージェントが環境に対してアクションを起こし、更新された環境の状態とアクションの良さに応じた報酬を受け取ります。アクション、状態、報酬は経験として蓄積され、より良いアクションを起こせるようモデルが改善されます。

今回の例ではロボットとロボットが移動する部屋が強化学習においての環境となり、エージェントは環境であるロボットのハンドルとアクセルを操作します。壁にぶつかると 1 回の試行は終了し、ロボットはスタート地点に戻されます。およそ 1.5 時間の学習でロボットは GOAL 地点までたどり着くことができるようになります。

強化学習についての詳細は利用している強化学習フレームワーク Coach を参考にしてください。

Gazebo の画面は次のようになっています。

(クリックすると拡大できます)

2-5-1. シミュレーションジョブの詳細画面では Gazebo 以外にも様々なプラグインを提供する「rqt」、視覚化ツール「rviz」、コマンド入力によりロボットアプリケーションを操作、デバッグするための「Terminal」ツールが提供されています。ここでは rviz についても少し確認しましょう。

rviz は「ロボットが見えている世界」を視覚化するツールです。今回扱う Turtlebot3 Burgerは 360 度、周辺の障害物までの距離を測定できる LiDAR センサーを搭載しています。LiDAR センサーの情報を視覚化しましょう。

まずシミュレーションジョブの詳細画面にある「rviz」のアイコンをクリックして rviz のウィンドウを開きます。

(クリックすると拡大できます)

2-5-2. rviz ウィンドウの中 Displays の Fixed Frame の設定について、プルダウンリストを開き base_footprint に変更します。(これは視覚化する際の座標系を指定しています)

(クリックすると拡大できます)

2-5-3. 次に 左下 [Add] ボタンをクリックします。「Create visualization」ウィンドウが開きます。[By topic] タブを選択し、/scan -> LaserScan を選択、[OK] ボタンをクリックします。

(クリックすると拡大できます)

2-5-4. 少しウィンドウのサイズを大きくして視覚化領域(真ん中の黒い領域)が見えるようにしましょう。赤い点で表示されているのが LiDAR が捉えている障害物です(マウス操作で、見やすいサイズ、アングルに調整してください。マウスホイールで視点を近づけ、遠ざけることができます)。強化学習はこの LiDAR の情報を環境の状態として受け取っています。

(クリックすると拡大できます)

2-5-5. 視覚化されているものの中にロボット自体も表示されていた方が視覚化されたものとロボット本体との相対関係がわかり理解しやすいでしょう。次にロボット自体を視覚化しましょう。再度 [Add] ボタンをクリックし「Create visualization」ウィンドウが開きます。

[By display type] タブから RobotModel を選び [OK] ボタンをクリックします。視覚化領域にロボット本体も表示されます。

(部屋を固定して、その中をロボットが移動するように見えた方がわかりやすいかもしれません。そのようにしたい場合は、最初に変更した Fixed Frame の設定を odom に変更します)

(クリックすると拡大できます)


2-6. シミュレーションジョブ詳細画面の下方、「Configuration」から実行中のアプリケーションのログを確認することができます。今回のアプケーションでは強化学習の進行状況などがログで出力されています。

(クリックすると拡大できます)

2-7. 一通り確認が終わったらシミュレーションジョブを終了させます。シミュレーションジョブの終了は、シミュレーションジョブ詳細画面の [アクション] から [キャンセル] を選んで行います。

(クリックすると拡大できます)

2-8. シミュレーションが終わったらシミュレーションジョブ詳細画面下側の「Configuration」タブの Simulation job output destination にあるリンクをクリックしてみましょう。Amazon S3 バケットが開きます。ここには完了したシミュレーションの ROS ノードの出力が保存されています。

(クリックすると拡大できます)

今回は以上です。次回でプログラムの中身と RoboMaker を用いた基本的な開発のワークフローを見ていきたいと思います。

この連載記事のその他の記事はこちら

🤖 第 1 回 🤖 第 2 回 🤖 第 3 回


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者紹介

河田 卓志
アマゾン ウェブ サービス ジャパン合同会社
デジタルトランスフォーメーション本部
RoboMaker シニア・ソリューション・アーキテクト

2019 年 4 月アマゾン ウェブ サービス ジャパン株式会社入社。前職はアマゾンで Alexa スキルのソリューションアーキテクト、また複数のロボット関連会社でマーケティングとエンジニアリングを担当。自律型ロボットや音声アシストデバイスのような新しいデバイスがより一般的になり、そのソフトウェア開発手法がより標準化され、誰でも扱える技術になることを目指し日々業務に取り組む。

AWS のベストプラクティスを毎月無料でお試しいただけます

さらに最新記事・デベロッパー向けイベントを検索

下記の項目で絞り込む
1

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する