终止支持通知:2025 年 9 月 10 日, AWS
将停止对的支持。 AWS RoboMaker2025 年 9 月 10 日之后,您将无法再访问 AWS RoboMaker 控制台或 AWS RoboMaker 资源。有关过渡 AWS Batch 到以帮助运行容器化仿真的更多信息,请访问此博客文章。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
ROS 容器常见问题
本页列出了与将基于 ROS 的机器人和模拟应用程序迁移到适合在 AWS RoboMaker 运行的 Docker 容器相关的常见问题和答案。
我们的工作流程使用colcon
捆绑的机器人和模拟应用程序提交模拟作业。我是否需要迁移?
是的,您必须迁移。迁移步骤见 将 ROS 应用程序迁移到容器。
我不确定我的机器人和模拟应用程序是否需要迁移。我怎么能分辨出来?
您可以通过 AWS 控制台或 AWS CLI 查看。有关说明,请选择以下适用的选项卡。
机器人和模拟应用程序容器如何相互通信?
这与基于 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 } ]
如果您使用提供的 ROBOMAKER_*
字符串和端口号来设置 ROS_IP
、ROS_MASTER_URI
和 GAZEBO_MASTER_URI
,则容器会按预期相互通信。
有关更多信息,请参阅运行模拟。
我的实时因子 (RTF) 指标去了哪里? 我怎样才能恢复它?
AWS RoboMaker 不再自动发布此指标。如果您想将此指标发布到 CloudWatch,则必须将AWS RoboMaker CloudWatch PublisherREADME.md
如何取消和标记我的模拟作业?
您可以使用通用 AWS API 通过 VPC 配置自行标记或自行取消 AWS RoboMaker 模拟作业。要使用以下方法,容器必须在 VPC 中运行,并具有通过 NAT 或 IGW 到达 AWS API 的公共路由。最简单的方法是在默认 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
。