AWS RoboMakerの開発環境を試してみた #reinvent

先日のAWS re:Invent 2018において発表されたAWS RoboMakerの開発環境を試してみました。具体的にはGetting Startedに沿ってCloud9を利用した開発の流れを確認しました。

[速報] さっそく新サービスAWS RoboMakerが発表されました #reinvent

概要

公式マニュアルのGetting Started with AWS RoboMaker - AWS RoboMakerの中のStep 3: Configure Environment and Build Applications - AWS RoboMakerStep 4: Run Simulation - AWS RoboMakerについて試した際の記録です。Cloud9上でのソースコードの編集、ビルド、バンドルの作成と、作成したバンドルをシミュレーションジョブ上で動作させる操作手順のイメージが分かります。

シミュレーションジョブ自体の利用方法についてはAWS RoboMakerのシミュレーションをさっそく動かしてみた! #reinvent | DevelopersIOを参照してください。今回の手順の事前作業になるGetting StartedのStep 2: Run the Hello World Sample Application - AWS RoboMakerについて詳細に解説してます。

なお、今回のエントリーでできることは、シミュレーションジョブ上のTurtleBot3の回転する向きを反時計回りから時計回りに変えるだけです。それだけのことですが、一通り操作することでRoboMaker上での開発手順のイメージがわくようになると思います。

開発環境の構築およびビルド手順

公式マニュアルのStep 3: Configure Environment and Build Applications - AWS RoboMakerについての解説です。

まずはCloud9上に開発環境を作成します。RoboMakerのマネジメントコンソールの左側のメニューから[Development environments]を選択し、[Create environment]ボタンをクリックしてください。

Cloud9の開発環境を作成する画面が表示されるので、必要事項を入力してください。[Create]ボタンをクリックするとCloud9上にRoboMaker用の開発環境が作成されます。

Cloud9の開発環境が作成されたら、[Open environment]ボタンをクリックしてください。ブラウザの別タブが開かれてRoboMaker用にセットアップされたCloud9のIDEが表示されます。

以上でCloud9の開発環境の構築は終わったので、実際にHello Worldアプリケーションのソースコードを編集していきます。まずは[RoboMaker Resources]メニューの[Download samples] - [1. Hello World]をクリックします。

[Download Samples]タブにダウンロード操作のログが出力され、オレゴンのS3バケットからCloud9のEC2インスタンス上にHelloWorldサンプルアプリケーションのソースをダウンロードしてローカルに展開していることが分かります1。また、[HelloWorld/README.md]が開いて内容が表示されます。

実際にソースコードを編集します。概要にも記載した通り、TurtleBot3の回転する向きを反時計回りから時計回りに変えるための修正になります。左側の[Environment]タブの中から[HelloWorld] - [HelloWorld] - [robot_ws] - [src] - [hello_world_robot] - [nodes] フォルダを開き、[rotate]ファイルを開いてください。次に32行目の self.twist.angular.z = 0.1-0.1に変更してください。なお、先頭行からrotateファイルの中身はPythonで書かれていることが分かります。

変更したら変更内容を保存します。[File]メニューを開き[Save]をクリックしてください。もちろん、ショートカットキーで保存しても問題ありません。

ファイルの編集も終わったので、ビルドします。[RoboMaker Run]メニューを開き[Build] - [HelloWorld Robot]をクリックしてください。

クリックするとビルドが開始します。また、[Colcon Build]タブが表示されログが出力されます2。初回のためビルドに必要なリソースのダウンロードから行われましたが、デフォルトのm4.largeで1分かからずビルドできていました。

続いてシミュレーションのビルドです。同じように[RoboMaker Run]メニューを開き[Build] - [HelloWorld Simulation]をクリックしてください。

以上で開発環境の構築及びビルド手順は終了です。RoboMaker経由でCloud9の開発環境を作成し、RoboMakerのロボットアプリケーションとシミュレーションアプリケーションのソースコードを作成し、最後にビルドするという流れがわかると思います。

シミュレーションの実行

先程ビルドしたアプリケーションをRoboMaker上で実行できるように依存するファイル群をバンドルします。ビルド時と同じように[RoboMaker Run]メニューの[Bundle]内の[HelloWorld Robot]をまずクリックし、ロボットアプリケーションのバンドルを作成します。次に[HelloWorld Simulation]をクリックしシミュレーションアプリケーションのバンドルを作成します。

バンドル作成時のログは[Colcon Budle]タグに表示されます。ドキュメントにはインスタンスタイプによっては20分以上かかるとありますが、それぞれ4分,5分ぐらいで完了しました。

バンドルの作成も完了したので、シミュレーションジョブに接続して作成したバンドルを実行します。Running状態のシミュレーションジョブが存在しない場合はAWS RoboMakerのシミュレーションをさっそく動かしてみた! #reinvent | DevelopersIOおよびStep 2: Run the Hello World Sample Application - AWS RoboMakerを参考にシミュレーションジョブを作成してください。

シミュレーションジョブを起動したらGazeboに接続してください。

TurtleBot3が反時計回りなっていることが確認できます。これからCloud9からRunning状態のシミュレーションジョブに接続してCloud9上で作成したバンドルを使ってシミュレーションジョブを再起動するとTurtleBot3が時計回りになることを確認します。

Cloud9に戻ります。Running状態のシミュレーションジョブが存在する状態で[RoboMaker Simulation]メニューの[Connect]をクリックします。

ダイアログが表示されるので、接続対象のシミュレーションジョブを選択し、[OK]ボタンをクリックします。

Cloud9がシミュレーションジョブに接続すると[Robot logs]と[Sim logs]タブが表示されロボットとシュミレーターのログを参照できるようになります。

Cloud9上のバンドルをシミュレーションジョブに転送し再起動します。[RoboMaker Simulation]メニューの[Restart With New Bundles]をクリックします。

ロボットアプリケーションとシミュレーションアプリケーションのバンドルを指定するダイアログが表示されるので、それぞれ以下を指定し、最後に[OK]ボタンをクリックします。

  • [Robot app bundle path] : /HelloWorld/robot_ws/bundle/output.tar.gz
  • [Simulation app bundle path] : /HelloWorld/simulation_ws/bundle/output.tar.gz

[Output]タブが表示されバンドルの転送とシミュレーションジョブの再起動のログが出力されます。

シミュレーションジョブのステータスがRestartingになり、数分するとGazebo上のTurtleBot3が時計回りになっていることが確認できます。

以上が今回の検証内容です。シミュレーションジョブ上でアプリケーションを動作させるには、ビルドするだけでなくバンドルの作成が必要なことが分かります。また、バンドルの実行するにはまずシミュレーションジョブを起動して、その上で接続して再起動という手順になっていることが分かります。

後片付け

Step 6: Clean up - AWS RoboMakerに沿って以下の順に作成したリソースを削除してください。

  1. シミュレーションジョブをキャンセルする
  2. シミュレーションジョブに対応するCloudFormationのスタックを削除する
  3. (必要なら)IAMロールを削除する
  4. Cloud9の開発環境を削除する

なお、1と2の順序は逆にしない方がよさそうです。私は最初ドキュメントを見ずに逆の順番で削除を行った結果、シミュレーションジョブをキャンセルしようとしてもエラーになりFailedステータスのジョブになってしまいました。。

参考資料

最後に

RoboMaker上での開発の流れについてイメージがわいたでしょうか。今回のHello WorldアプリケーションのソースコードはGitHub上に公開されています。

aws-robotics/aws-robomaker-sample-application-helloworld: Demonstrates the structure of ROS projects that work with AWS RoboMaker by creating a robot spinning in an empty world.

robot_wsディレクトリ配下はロボットアプリケーションのソースが入っており、ROS(Robot Operating System)の知識がないと読み解けないようです。simulation_wsディレクトリ配下はシミュレーションアプリケーションのソースが入っており、こちらはGazeboの知識がないと読み解けないようです。私はどちらの知識もないためまったく読み解けませんでした。

一方で、ソースファイルおよび今回の検証内容からRoboMakerはあくまでもAWS上でのロボット開発者向けの開発支援環境を提供しているのであり、いままでロボット開発経験のない人がロボット開発をできるようにロボット開発の過程を抽象化するようなサービスではないことが理解できました。当初はどこまでRoboMakerが提供しているのかわからず、今回Getting Startedをやってみることで提供範囲がわかってスッキリです。

ロボット開発という言葉には憧れを感じますが、今回まったく知識がない状態からROSやGazeboの概要についても調べることになり、これは一から勉強するのが大変だなぁというのが正直な感想です(^_^;)


  1. 実際に確認する際はCloud9の開発環境を作成し、タブをスクロールしてログを確認してください。 
  2. Create a ROS Development Environment - AWS RoboMakerに記載のあるようにColconはビルドツールの名前です。