ROS コンテナに関するよくある質問 - AWS RoboMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ROS コンテナに関するよくある質問

このページでは、ROS ベースのロボットおよびシミュレーションアプリケーションを AWS RoboMaker の実行に適した Docker コンテナに移行することに関してよく寄せられる質問と回答をまとめています。

このワークフローでは、colcon をバンドルしたロボットとシミュレーションアプリケーションを使用してシミュレーションジョブを送信します。移行する必要がありますか?

はい、移行は必要です。移行の手順は「ROS アプリケーションのコンテナへの移行」に記載されています。

ロボットとシミュレーションアプリケーションを移行する必要があるかどうかがわかりません。どうすればわかりますか?

AWS コンソールまたは AWS CLI を使用して確認できます。手順については、次の該当するタブを選択してください。

Using the console
  1. AWS RoboMaker コンソールにサインインします。

  2. 左側のナビゲーションペインで、[Development] (開発)、[Simulation applications] (シミュレーションアプリケーション) の順に選択します。

  3. シミュレーションアプリケーションの [名前] を選択すると、その詳細が表示されます。

    [全般][シミュレーションランタイム] と表示されている場合、移行は必要ありません。ROS または Gazebo 固有の値が表示される場合は、移行が必要です。

Using the AWS CLI

コンソールを使用した手順と同じ処理を AWS CLI コマンドで実行する例は次のとおりです。

aws robomaker describe-simulation-application --application YOUR-SIM-APP-ARN

このコマンドは、simulationSoftwareSuiterobotSoftwareSuite (該当する場合)、environment の URI を示す出力を返します。simulationSoftwareSuite[シミュレーションランタイム]robotSoftwareSuite[全般] が表示され、environment の URI が設定されている場合、シミュレーションアプリケーションを移行する必要はありません。

ロボットとシミュレーションアプリケーションのコンテナはどのようにして相互に通信しますか?

これは、ROS ベースのアプリケーションが ROS のミドルウェアを使用して一般的に相互通信する方法と変わりません。ただし、シミュレーションジョブリクエストの起動設定オブジェクト内に ROS 固有の環境変数を設定する必要があります。

以下は、ロボットアプリケーション launchConfig に使用する必要がある設定のスニペット例です。

"robotApplications": [ { "application": "YOUR-ROBOT-APP-ARN", "applicationVersion": "$LATEST", "launchConfig": { "environmentVariables": { "ROS_IP": "ROBOMAKER_ROBOT_APP_IP", "ROS_MASTER_URI": "http://ROBOMAKER_ROBOT_APP_IP:11311", "GAZEBO_MASTER_URI": "http://ROBOMAKER_SIM_APP_IP:11345" }, ... # Removed extra data for clarity } ]

以下は、シミュレーションアプリケーション launchConfig に使用する必要がある設定のスニペット例です。

"simulationApplications": [ { "application": "YOUR-SIM-APP-ARN", "applicationVersion": "$LATEST", "launchConfig": { "environmentVariables": { "ROS_IP": "ROBOMAKER_SIM_APP_IP", "ROS_MASTER_URI": "http://ROBOMAKER_ROBOT_APP_IP:11311", "GAZEBO_MASTER_URI": "http://ROBOMAKER_SIM_APP_IP:11345" }, ... # Removed extra data for clarity } ]

ROS_IPROS_MASTER_URIGAZEBO_MASTER_URI の設定に提供された ROBOMAKER_* 文字列とポート番号を使用すれば、コンテナは想定通りに相互通信を行います。

詳細については、「シミュレーションの実行」を参照してください。

リアルタイム係数 (RTF) メトリクスはどこに行きましたか? 復元するにはどうすればいいですか?

AWS RoboMaker では、このメトリクスが自動で公開されなくなりました。このメトリクスを CloudWatch に公開する場合は、AWS RoboMaker CloudWatch Publisher をシミュレーションアプリケーションにインポートし、README.md ファイルに記載された指示に従ってシミュレーションの起動ファイルを修正する必要があります。

シミュレーションジョブをキャンセルしてタグ付けする方法を教えてください。

VPC 設定を使用すると、汎用 AWS API を使用した AWS RoboMaker のシミュレーションジョブを独立してタグ付け、またはキャンセルできます。次の方法を使用するには、NAT または IGW 経由の AWS API へのパブリックルートがある VPC でコンテナが実行されている必要があります。最も簡単な方法は、デフォルト VPC のパブリックサブネットを使用して AWS API に接続することです。プライベートサブネットでシミュレーションを実行したい場合は、代わりに NAT を設定するか、インターフェイス VPC エンドポイントを設定することもできます。詳細については、「AWS RoboMaker とインターフェース VPC エンドポイント (AWS PrivateLink)」を参照してください。

注記

IGW を使用している場合は、以下のドキュメントの説明に従って assignPublicIp=True を設定してください。パブリック IP を使用している場合は、セキュリティグループが十分にロックダウンされていることを確認してください。

リクエストパラメータに次のブロックを追加してください。

vpcConfig={ 'subnets': [ 'string', ], 'securityGroups': [ 'string', ], 'assignPublicIp': True|False },

さらに、AWS RoboMaker のシミュレーションジョブには、シミュレーションジョブにタグを付けたりキャンセルしたりする権限を持つ IAM ロールが必要です。

シミュレーションジョブでは、AWS CLI または boto3 Python ライブラリを使用してパブリック AWS RoboMaker API を呼び出すことができます。AWS CLI と boto3 ライブラリは AWS RoboMaker シミュレーションジョブで使用する前に、コンテナにプリインストールしておく必要があります。次の Python サンプルコードは、シミュレーションジョブをキャンセルする方法を示しています。

class RoboMakerUtils: def __init__(self): self.job_arn = os.getenv('AWS_ROBOMAKER_SIMULATION_JOB_ARN') self.client = boto3.client('robomaker', region_name=os.getenv('AWS_ROBOMAKER_REGION', 'us-east-1')) def tag_robomaker_sim_job(self, key, value): self.client.tag_resource( resourceArn=self.job_arn, tags={ key: str(value) } ) def cancel_robomaker_sim_job(self): self.tag_robomaker_sim_job("END_TIME", time.time()) response = self.client.cancel_simulation_job( job=self.job_arn )

Simulation WorldForge のワールドをシミュレーションジョブにインポートする方法を教えてください。

Simulation WorldForge のアセットをシミュレーションジョブにインポートする必要がある場合は、DataSource API を使用してください。こうすることで、ワールドのエクスポートジョブの Amazon S3 の出力ディレクトリにあるワールドアセットを、シミュレーションジョブコンテナ内の好きなインポート先へインポートすることができます。

詳細については、「シミュレーションでのエクスポートしたワールドの使用」を参照してください。

アプリケーションのログファイルが作成されていません。何が起きているのでしょうか?

関連するアーティファクトのデバッグに使用するすべての出力ディレクトリを Dockerfile に作成していることを確認してください。たとえば、Dockerfile に次の行を追加します。

RUN mkdir -p $YOUR_LOG_DIR

詳細については、「カスタムアップロード設定の追加」を参照してください。

シミュレーションアプリケーションが「パラメータサーバーの run_id が宣言された run_id と一致しない」という理由で失敗しました。どうすればよいですか?

ロボットアプリケーションとシミュレーションアプリケーションの両方で ROS のシミュレーションジョブを起動する場合は、roslaunch コマンドに --wait を追加する必要があります.