使用 AWS Batch 建構無頭式機器人模擬環境:大規模無人機與機器人測試完整教學
AWS 發布技術指南,教導機器人與無人機開發者如何利用 AWS Batch 服務執行大規模無頭式(headless)模擬測試,透過容器化架構同時運行數千個情境模擬,大幅降低實體測試成本並加速開發迭代流程。

文章重點
- AWS Batch 可讓機器人開發者同時執行數千種情境的無頭式模擬測試,免去實體裝置測試的高成本
- 透過 docker-compose 在 AWS Batch 中同時啟動機器人與模擬容器,兩者以 host 網路模式互相通訊
- 本教學以 Amazon CloudWatch 機器人監控範例為基礎,執行 TurtleBot3 導航測試並回傳位置與速度數據
- AWS Batch 運算環境最小 vCPU 設為 0 時,僅在執行工作時才啟動 EC2 執行個體,有效控制成本
- 完整流程涵蓋 Amazon ECR、S3、CloudWatch、IAM 五項 AWS 服務的整合配置
簡介
透過 AWS Batch 執行無頭式機器人模擬,能讓機器人與無人機開發者在進入實體裝置測試之前,先以程式碼跑過數千種情境並快速迭代,大幅提升開發效率。現實世界中,機器人可能遭遇的環境與狀況幾乎無窮無盡,而在實體機器人上部署和測試每個情境既耗時又昂貴。AWS Batch 服務為開發者提供了一種簡便方式,可自訂運算資源類型,在大規模環境下執行批次機器人模擬。
注意: AWS Batch 最適合用於大規模執行無頭式批次模擬。若您需要具有圖形介面(GUI)的互動式模擬,建議使用 AWS RoboMaker 模擬服務。
總覽
本教學將引導您建立 AWS Batch 運算環境與工作(Job),以執行容器化的機器人與模擬應用程式。本文以原先為 AWS RoboMaker 建構的 Amazon CloudWatch 機器人監控範例為基礎,改以 AWS Batch 實現相同功能。該範例會執行機器人導航測試,並將資料傳送至 Amazon CloudWatch 以監控機器人的位置和速度。
我們將依序完成以下步驟:
- 準備機器人與模擬容器
- 建立 Dockerfile 以安裝 docker-compose 與 AWS CLI
- 建置容器映像檔並推送至 Amazon ECR
- 建立 docker-compose.yaml 檔案並上傳至 Amazon S3
- 設定 AWS Batch 工作及機器人/模擬應用程式的權限
- 使用 AWS Batch 精靈建立運算環境、工作佇列、工作定義與工作
- 在 Amazon CloudWatch 中查看日誌
前置需求
- 具備 AWS IAM、Amazon S3、Amazon ECR、Amazon CloudWatch 及 AWS Batch 權限的 AWS 帳戶
- 對 Docker 容器有基本了解
- 本機已安裝 Docker、AWS CLI 及 VCS Tool
安裝參考連結:
- AWS CLI 安裝:https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
- Docker 安裝:https://docs.docker.com/get-docker/
- VCS Import Tool 安裝:
sudo pip3 install vcstool
步驟一:準備機器人與模擬容器
本文以 Amazon CloudWatch 機器人監控範例為基礎進行修改,使容器能夠在 AWS Batch 上運作。
- 複製範例儲存庫:
git clone https://github.com/aws-robotics/aws-robomaker-sample-application-cloudwatch.git cloudwatchsample && cd cloudwatchsample
注意:在 AWS Robotics 範例應用程式中,程式碼已按照 ROS 工作區目錄結構組織。但對於大多數開源 ROS 套件,您需要先建立工作區目錄,並將原始碼複製到
<workspace>/src中。
-
依照「為 AWS RoboMaker 準備 ROS 應用程式和模擬容器」文章中的步驟,將機器人與模擬應用程式容器化。可將應用程式命名為
cloudwatch-robot-app和cloudwatch-sim-app,標籤名稱則可命名為batch-cloudwatch-robot-app和batch-cloudwatch-sim-app。 -
完成將 ROS 基礎的機器人和模擬 Docker 映像檔推送至 Amazon ECR 後即可停止。
步驟二:建立 Dockerfile 安裝 docker-compose 與 AWS CLI
我們將在 AWS Batch 中同時啟動機器人與模擬容器,使兩者能夠互相通訊。為了讓此流程能大規模執行,需要一個特殊的 Docker 容器供 AWS Batch 使用,其中須安裝 AWS CLI(用於從 S3 下載 docker-compose 檔案)及 Docker Compose(用於啟動容器)。
- 在
cloudwatchsample資料夾中建立新目錄:
mkdir batch-docker && cd batch-docker
- 建立
Dockerfile並填入以下內容:
FROM ubuntu:focal
ARG DEBIAN_FRONTEND=noninteractive
# 安裝前置套件
RUN apt-get update && apt-get install -y curl && apt-get install wget
RUN apt-get update && apt-get -y install awscli
RUN apt -y install amazon-ecr-credential-helper
RUN apt-get -y install jq
RUN mkdir ~/.docker && echo "{\"credsStore\": \"ecr-login\"}" | jq > ~/.docker/config.json
RUN curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose
RUN ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
步驟三:建置並推送容器映像檔至 Amazon ECR
- 在 Amazon ECR 主控台建立私有儲存庫,命名為
batch-dockercompose-awscli。 - 選取新建的儲存庫,點選「View push commands」取得 AWS CLI 指令。
注意:若從非 Linux 平台執行推送指令,需在 docker build 指令末尾加上
--platform linux/amd64。
docker build -t batch-dockercompose-awscli . --platform linux/amd64
步驟四:建立 docker-compose.yaml 並上傳至 Amazon S3
建立 docker-compose.yaml 檔案:
version: "3"
services:
robot:
image: <account-number>.dkr.ecr.<region>.amazonaws.com/batch-cloudwatch-robot-app
network_mode: host
command: bash -c "sudo apt-get -y upgrade && roslaunch cloudwatch_robot rotate.launch"
environment:
- AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
- TURTLEBOT3_MODEL
sim:
image: <account-number>.dkr.ecr.<region>.amazonaws.com/batch-cloudwatch-sim-app
network_mode: host
command: roslaunch cloudwatch_simulation bookstore_turtlebot_navigation.launch
environment:
- AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
- TURTLEBOT3_MODEL
將 <account-number> 和 <region> 替換為您的 AWS 帳號和區域。docker-compose.yaml 中將兩個容器的 network_mode 設為 host,使容器間可互相通訊,並透過 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 環境變數傳遞 AWS 權限。
將完成的 docker-compose.yaml 上傳至 Amazon S3 儲存桶,並記下 S3 URI 供後續使用。
步驟五:設定權限
建立 ECS Task 執行角色
- 在 AWS IAM 主控台建立角色,選擇「Elastic Container Service Task」作為使用案例
- 附加
AmazonECSTaskExecutionRolePolicy管理政策 - 將角色命名為
ecsTaskExecutionRole
建立工作執行角色
- 同樣建立 ECS Task 類型的角色
- 建立自訂 IAM 政策,包含以下權限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "cloudwatch:PutMetricData",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:CreateLogGroup"
],
"Resource": [
"arn:aws:s3:::<bucketname>/docker-compose.yaml",
"arn:aws:logs:us-west-2:<accountnumber>:log-group:robomaker_cloudwatch_monitoring_example:log-stream:*"
]
}
]
}
- 將政策命名為
ecspolicy-batch-cloudwatchsample - 建立角色時附加
AmazonECSTaskExecutionRolePolicy與自訂政策 - 將角色命名為
ecsJobRole-cloudwatchsample
步驟六:使用 AWS Batch 精靈建立資源
第一步:建立運算環境
- 設定執行個體組態為 On-demand(也可選擇 Spot 以節省成本)
- 將最小 vCPU 設為 0,AWS Batch 在未執行工作時不會有閒置的 EC2 執行個體
- 允許的執行個體類型可選 optimal 以自動選擇最佳配置
- 分配策略保持預設 BEST_FIT
第二步:工作佇列
可保持預設設定。
第三步:工作定義
- 設定執行逾時為 3600 秒(1 小時)
- 執行角色選擇
ecsTaskExecutionRole - 容器映像 URI 設為:
<account-id>.dkr.ecr.<region>.amazonaws.com/batch-dockercompose-awscli - 命令設為:
bash -c 'aws s3 cp <S3 URI> . && export TURTLEBOT3_MODEL=waffle_pi && docker-compose up'
第四步:建立工作
設定執行逾時為 3600 秒,其餘由工作定義自動填入。
步驟七:執行 AWS Batch 工作
- 在 AWS Batch 主控台的「Job definitions」中,選取已建立的工作定義並建立新修訂版
- 將 Job role 設為
ecsJobRole-cloudwatchsample - 在 Linux 設定中,將使用者設為 root 並開啟 Privileged 模式
- 在檔案系統設定中新增 Volume:
- 名稱:
dockersock,來源路徑:/var/run/docker.sock
- 名稱:
- 設定掛載點:
- 來源 Volume:
dockersock,容器路徑:/var/run/docker.sock
- 來源 Volume:
- 提交新工作,選擇最新修訂版的工作定義和工作佇列
注意:首次執行工作需要幾分鐘才會進入 STARTING 狀態,因為未設定暖池(warm pool),AWS Batch 需要先啟動執行個體。
查看日誌
- 工作進入 Running 狀態後,在 Job information 中點選 Log stream name
- 將開啟 Amazon CloudWatch 日誌頁面
- 搜尋名為
robomaker_cloudwatch_monitoring_example的日誌群組 - 選取
turtlebot3日誌串流即可查看機器人應用程式的日誌 - 在 CloudWatch 的 Metrics 中可查看機器人的位置與速度等指標
恭喜!您已成功使用 AWS Batch 執行無頭式機器人模擬。
資源清理
完成測試後,請記得清理以下資源以避免不必要的費用:
- AWS Batch: 終止工作、取消註冊工作定義、停用工作佇列與運算環境
- Amazon ECR: 刪除三個容器儲存庫
- Amazon S3: 清空並刪除儲存桶
- Amazon CloudWatch: 刪除相關日誌群組
總結
本文介紹了如何利用 AWS Batch 大規模執行無頭式機器人模擬。使用 AWS Batch 進行大規模模擬測試,能提供自訂運算資源的彈性控制並有效節省成本。對於無人機與機器人開發團隊而言,這種方法能在實體測試前充分驗證程式碼,大幅縮短開發週期。
原文來源: 查看原文
常見問題
Newsletter
訂閱低空產業電子報
每日精選低空經濟與無人機產業新聞,直送您的信箱。
本文由 LAETimes 編輯部審核發佈 ·


