masato-ka's diary

日々思ったこととか、やったことの備忘録。

AWS RoboMakerのJetbotチュートリアルをやってみる(シミュレーター編)

この記事について

この記事はAI RC Car アドベントカレンダー11日目の記事です。今日はAWS RoboMakerのJetbotチュートリアルをやってみます。このチュートリアルは2019年12月に開催された AWS re:Invent 2019でワークショップとして開催された内容です。実際のワークショップではAWSで用意されたアカウントを使いチュートリアルを進めていたようです。個人のアカウントで進めることもできましたが、実施には一手間必要だったのでその部分について触れていきます。AI RC Carと言いつつも、全然RCじゃないですし、むしろロボットっぽいですが、この分野はいずれ融合します。多分。。。

AWS RoboMakerとは

AWS RoboMakerはAWSのサービスの一つです。クラウド上でROSアプリケーションの開発とシミュレーションができます。ROSアプリケーションの開発はCloud9と呼ばれるWEBブラウザで動くIDEで開発を行います。AWS のコグニティブサービスやKinesisによるビデオストリーミングをサポートしています。また、開発後はGazeboでのシミュレーションをWEBブラウザ上で確認可能です。さらに、AWS Greengrass IoTと連携したロボットのフリート管理機能ではロボットへアプリケーションを直接デプロイすることが可能です。

aws.amazon.com

AWS RoboMakerとJetBot

AWS RoboMakerのチュートリアルではJetBotが題材となっています。チュートリアルのマテリアルにはJetBotのROSアプリケーションのサンプルとGazeboシミュレータで利用可能なJetBotの3Dモデルが含まれています。もちろん開発した内容は実機のJetBotへインターネット越しにデプロイできます。JetBotでROS開発を行う場合は強力なツールになりえます。

AWS RoboMakerのチュートリアル

対象とするAWS RoboMakerのチュートリアルJetBot Teleopチュートリアルです。

robomakerworkshops.com

このチュートリアルは3つの構成に分かれてます。一つはWorkshop setupチュートリアルを進めるのに必要なリソースをAWS Cloud Formationを使い自動構築します。その次はActivity #1: An Introduction to ROS Developmentで、AWS RoboMaker上でのROSアプリケーションのビルドとシミュレーションの実行を学習します。最後はActivity #2: Deploying ROS Applicationsです。実機へのROSアプリケーションのデプロイ方法を学習します。この記事では2つ目までを対象とします。また、チュートリアルの中ではROSのプログラミングやアプリケーションの基本構成については深く語られていませんので、そのあたりの知識は別途学習する必要があります。

AWS RoboMaker環境の構築

まずはチュートリアルのWorkshop setupを進めていきます。このチュートリアルではAWSがイベント向けに用意した環境を利用するか、自分のAWS環境で進めるかで手順が異なります。今回は自分のAWS環境を利用するので、No. I will use own AWS account.を選択します。

下の方に進んでいくとLaunch stack ボタンを押下すると、AWS CloudFormationの画面がブラウザ上に表示されます。AWSコンソールにログインしていない場合は認証画面が開くので、ログインしましょう。

右上でリージョンがオレゴンになっているので、東京に切り替えます。この後のCloud9IDEを立ち上げる際に、オレゴンだとm4.largeのインスタンスが利用できない旨エラーが出ました。

デザイナーでCloudFormationで作成されるリソースを確認しておきましょう。VPCと2つのサブネット、S3バケットAWS Robomaker用のロールが2つ作成されます。確認したら右上の「閉じる」を押して下の画面に戻り、右下の「次へ」を押下します。

画面が切り替わったら「スタックの名前」と「S3BucketName」に名前を入れます。いずれも任意の名前を入れれば大丈夫ですが。S3BucketNameだけはグローバルに一意な名前をつける必要があります。「次へ」を押して、次の画面に進みます。次の画面の下の方に、AWS Roleを自動で作成する旨の警告が表示されていますので、チェックボックを入れて確認しましょう。そのまま「作成」を押せばリソースの自動作成が始まります。しばらくすると作成が完了します。

RoboMakerによる開発

続いて、Activity #1: An Introduction to ROS Developmentです。まずは手順にしたがい、AWS RoboMakerを使って開発環境を立ち上げます。この時、選択するVPCはdefaultと表示されているものと、先ほどのCloudFormationで作成されたものの2つが表示されます。一旦私はCloudFormationで作成されたVPCを選択しました。subnetは適当に。

その後、CloudFormationでmod-xxxxxぽい名前を控えるとありますが、実際には環境構築で作成したS3が含まれるCloudFormationでつけた環境の名前で大丈夫です。Cloud9立ち上げ時にもう一つCloudFormationの環境が作られますが、そちらではありません。引き続き、手順にしたがってGitからサンプルコードをダウンロードとinstall_deps.shの実行まで進めます。

この後、ビルドを実行する手順になりますが、すぐに実行すると他のaptのプロセスがロックした状態で正常にビルドできません。しばらく待って実行するが、psコマンドでaptのプロセス番号を特定し、killコマンドで停止させるなどで回避可能です。

その後のsimulationの実行では実行時に権限がないと言われ、実行ができません。設定からIAMRoleを追加します。Add or Edit Configurationsを選択して設定画面を開きます。

f:id:masato-ka:20191208122132p:plain

設定画面で、SIMULATION=>JetBotCircle Simulation を選択して、IAM roleでrobomaker-simulation-roleを選択します。同様にteleopの方にも設定しておきましょう。

f:id:masato-ka:20191208122433p:plain

ここまでくれば後は手順通りに進めます。シミュレーション実行後、Gazeboの画面を開くと以下のようにJetBotが回転している状態が表示されます。Teleopの方もクライアントをダウンロードして、認証情報を設定すればローカルマシンからシミュレーション上のJetBotを操作することが可能です。

f:id:masato-ka:20191208123648p:plain

まとめ

JetBotの開発にROSを利用しようとするとAWS RoboMakerは選択肢になりえそうです。開発からシミュレーションまで環境が最初から準備されているのがマネージドサービスの強みですね。一方でちょっと遊んだだけで2ドルくらい取られるので、本当に使い始めたらいくらかかるのかちょっと心配です。また、AWSとROS両方の知識を求められるので、学習コストは非常に高い気がします。もし、ROS(Gazeboを)動かせるPCを運良く持っていたのであれば、大人くしROSの環境構築をしてしまった方が良いかもしれません。実機へのデプロイができたら続きを書きます。