はじめに

ロボットの開発で良く用いられるプラットフォームとしてはROSが挙げられると思います。しかしながら、複数人で開発をする場合に環境を合わせるのが大変、ライブラリインストールを失敗してOSを初期化せざるを得なかった、マシンスペックを柔軟に変えて試したい、など様々な課題も上がってくるかと思います。

もし、上記のような課題を抱えている場合はAWS RoboMakerを使った、クラウドでのロボットアプリケーション開発をおすすめします。

本記事ではAWS RoboMakerの概要と、大まかな開発の流れを紹介し、具体的なイメージをもっていただくことを目的としています。

AWS RoboMakerとは

AWS RoboMakerは、Amazonが提供する、クラウド上でロボットアプリケーションを開発できるサービスです。

RoboMakerを実際に使ってみて、私が感じたメリットを挙げさせていただきます。

  • OS/バージョンサポートへの対応がしやすい:ROSは数多くのライブラリが公開されていますが、メンテナンスがあまり良くされていないライブラリが多く、ROSバージョンによって使えないライブラリもあります。ROSのバージョンを変えて試したい時に、例えば、KineticはUbuntu 16.04、MelodicはUbuntu 18.04がサポート対象ですがそれぞれで環境構築をするのは非常に面倒ですが、対応した環境をボタン1つで作れるのはクラウドのメリットと考えられます。
  • マシンスペックのスケーリングがしやすい:例えば、シミュレーション時に動きがカクカクしてしまってマシンスペックが足りないと思えば、使用するシミュレーションユニット数を増やすだけで、サクサクとシミュレーションを動作させることが可能です。さらに、起動時間を指定できるので、無駄なコストを使わずに済みます。
  • サンプルが多い:1からROSの学習をしながら環境を作っていくのは非常に手間がかかります。しかし、RoboMakerであれば、ワールドのテンプレートから簡単にシミュレーション空間を生成できますし、サンプルプロジェクトが用意されているので初めてでもキャッチアップしやすい環境になっていると思います。

AWS RoboMakerのメニューについて

AWS RoboMaker 

AWS RoboMakerはAWSのコンソールで選択することが可能です。

選択後、RoboMakerのサービス画面に進みますが、メニューが少々多く、最初は戸惑うことも多いかと思いますので、それぞれの項目について説明をします。(記載は英語と日本語のものを2つ使用)

RoboMakerメニュー

開発環境(Development environments)

ROSのアプリケーション開発をクラウドで行うための環境で、実質はCloud 9というAWSのオンラインIDEが起動する形となります。環境を作成すると、ROSがプリインストールがされた状態でIDEが立ち上がります。

実質上、EC2インスタンス上にIDE環境が構築されますが、一定時間経過すると自動でインスタンスが停止するようになっているので、無駄なコストが発生しないようになっているのは良い点です。 cloud9

ロボットアプリケーション(Robot applications)

RoboMakerでは、ロボットアプリケーションとシミュレーションアプリケーションの2つのアプリケーションを開発することになります。

ロボットアプリケーションはロボットに搭載するアプリケーションで、センサー処理、自己位置同定、地図作成など、ロボットへの入力に対して処理を行うアプリケーションになります。

ロボットアプリケーションを開発後、bundleというコマンドを実行することでアプリケーションとそれに必要なライブラリ群を1つのtarファイルにまとめて圧縮して、S3にアップロードを行います。このセクションでは、ROSのバージョンとtarファイルの置いてあるS3のパスを指定するのみとなります。

シミュレーションアプリケーション(Simulation applications)

シミュレーションアプリケーションではGazebo等のシミュレーションソフトを起動し、シミュレーション空間(ワールド)の生成やロボットの生成を行うアプリケーションになります。

ロボットアプリケーションと同様、bundleしたtarファイルをS3にアップロードしますが、このセクションではROSのバージョン、使用するシミュレーションソフト、tarファイルが置いてあるS3のパスを指定するのみとなります。

ワールドテンプレート(World templates)

ワールドはシミュレーションを立ち上げた際に生成される空間です。ワールドテンプレートはワールドを生成するためのテンプレートで、部屋の数や広さ、設置されるオブジェクトなどの設定をすることができます。

ワールド(Worlds)

ワールドテンプレートから生成された、実際にシミュレーションで使用するワールドになります。シミュレーションジョブを立ち上げる際、「WorldForgeからワールドをインポート」の項目にてワールドを選択することが可能です。

ワールドをインポート

シミュレーションジョブ(Simulation jobs)

ロボットアプリケーションとシミュレーションアプリケーションで設定したbundleファイルを読み込んで2つのアプリケーションを起動します。

シミュレーションユニットはシミュレーション時のマシンスペックで、数を増やすほどシミュレーション動作が滑らかになります。ただ、その分、料金も多く発生するので、ちょうど良いシミュレーションユニット数を見つけていきましょう。

アプリケーションが起動すると下記ツールが使用可能になるのでデバッグを行います。ライブラリが足りないなどで起動が失敗するとそのままジョブが終了してしまいます。CloudWatch上に起動時のログが出力されているので、ログを参照して原因を調査しましょう。

それぞれのツールの概要は下記です。

  • GZClient:シミュレーションソフト(Gazebo)が立ち上がり、3DCGのシミュレーション世界の状態を把握することができます。
  • Terminal:ターミナルが立ち上がります。rostopic、rosnode等、コマンドでROSの状態を知りたいときや、手動でnodeを立ち上げたい時など、様々な場合に有用です。
  • RViz:ROSのtopicを3D空間上に可視化してくれるツールで、ロボットが認識している世界を把握するのに有用です。むしろrvizが無いとROSアプリケーションのデバッグは不可能と言っても良いでしょう。
  • Rqt:ロボットを動かす指示(cmd_velトピック)を送ったり、tfの状態を表示したり、便利なツール群が詰まっています。

AWS RoboMakerでの開発の流れ

RoboMakerを用いた開発は次のような流れになります。各パートの詳細な説明やTIPSに関しては別記事にて解説をしていきますので、本記事では大まかな流れを捉えていただければと思います。

1. 開発

開発環境のIDE上で開発を行います。

サンプルアプリケーション

初回は、Resources > Download Samples > Hello World からサンプルプロジェクトをダウンロードして動作させてみると良いでしょう。

robot_wsとsimulation_wsという2つのディレクトリがあり、これらがそれぞれ、ロボットアプリケーションとシミュレーションアプリケーションに対応します。 

2. ビルド・バンドル・S3アップロード

開発後は、プロジェクトをビルドして1つのtarファイルに圧縮(bundle)した後に、ロボットアプリケーション、シミュレーションアプリケーションで設定したS3のパスへtarファイルをアップロードします。

cd robot_ws/
colcon build && colcon bundle 

RoboMakerのビルドツールとしてはcolconが使われています。例えば上記のようにrobot_ws内でbuildとbundleを行うと、 robot_ws/bundle/output.tar というファイルができあがるので、ロボットアプリケーションで設定したS3のパスへアップロードします。

aws s3 cp bundle/output.tar s3://your_bucket_name/output.tar

3. シミュレーションジョブを起動

S3にbundleしたtarファイルをアップロード後、シミュレーションジョブを作成すれば最新の実装が反映された状態でシミュレーションが立ち上がります。

すでに実行中の場合は、シミュレーションジョブを選択して「アクション」から「再起動」、停止している場合は、以前の設定のままで良ければ、停止したシミュレーションジョブを選択して「アクション」から「クローン」で起動すれば大丈夫です。

この際、IDEメニューの Simulation > Restart With New Bundles からもシミュレーションの反映ができますが、実質、bundleしたtarファイルをS3にアップロードしてシミュレーションジョブを再起動しているだけです。

毎回Restart With New Bundleでファイルを選択するのが面倒なので、私の場合は下記のようなスクリプトを、プロジェクトディレクトリ直下にscriptsディレクトリを作って下記コマンドでS3のアップロードまでする形にして、コマンド実行完了後にシミュレーションジョブを再起動しています。

cd ../robot_ws
colcon build
colcon bundle
aws s3 cp bundle/output.tar s3://your_bucket_name/output.tar

cd ../simulation_ws
colcon build
colcon bundle
aws s3 cp bundle/output.tar s3:/your_bucket_name/output_sim.tar

プロジェクトディレクトリ直下の roboMakerSettings.json 内にビルドやバンドルの定義を書くことも可能です。この場合は、Runメニューから設定したコマンドを実行することが可能になっています。 

robomakersettings.json

最新の実装を反映する際にはいくつか方法がありますが、やりたいこととしてはどれも同じで、

colcon build / colcon bundleをして出来上がったtarファイルをS3にアップロードしてシミュレーションジョブを起動する

ということです。

Aws robomaker

Related Posts

ROSのLaserScanデータの一定角度の範囲を無視する方法
ROSのLaserScanデータの一定角度の範囲を無視する方法
ROSでLidarセンサーを使う時、ロボットの車体など一定角度の範囲に常に障害物があり、これを無視したい時があると思いますが、その方法を紹介します。 以下は、得られた/scan_rawトピックのデータの一定角度の範囲を無視して新しい/...
Read More
ROSのmove_baseで、Pythonからコストマップをクリアする方法
ROSのmove_baseで、Pythonからコストマップをクリアする方法
move_baseを使っていると、障害物が無いのにコストマップで障害物判定されてしまうことがあります。そのようなときは、コストマップを一度クリアしましょう。 コマンドから   move_baseノードには、コストマップをクリアする方法...
Read More
roslaunchでrospy.loginfoでの出力が表示されない場合の対応策
roslaunchでrospy.loginfoでの出力が表示されない場合の対応策
roslaunchで起動したときに、rospy.loginfoで出力しても表示されない場合は下記のように--screenオプションをつけましょう。 コマンドラインで実行する場合 roslaunch your_package your_...
Read More