建置應用儲存庫 - AWS RoboMaker

支援終止通知:2025 年 9 月 10 日, AWS 將停止對 的支援 AWS RoboMaker。2025 年 9 月 10 日後,您將無法再存取 AWS RoboMaker 主控台或 AWS RoboMaker 資源。如需有關轉換至 AWS Batch 以協助執行容器化模擬的詳細資訊,請造訪此部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建置應用儲存庫

在中提交模擬工作有三個步驟AWS RoboMaker:建立應用程式容器、將容器連結至AWS RoboMaker應用程式,以及使用容器提交模擬工作。本節介紹如何將 Docker 用於建置應用程式容器AWS RoboMaker。我們使用 hello-world 範例應用程式來示範建置範例自動機器人和模擬應用程式容器所需的步驟,以供 Ros 為基礎的範例。此頁面也會示範如何在本機測試容器。

如果您沒有使用 ROS,請參閱部落格文章,其中說明如何在 GPU 和容器支援中AWS RoboMaker執行任何高傳真度模擬

先決條件

在開始之前,請確保您的開發環境具有必要的依賴關係。您的電腦上必須安裝 DockerAWS CLI、和 VCS 匯入工具。

sudo pip3 install vcstool

您還必須擁有包含以下許可的 IAM 角色的AWS帳戶:

  • 建立 IAM 角色

  • 建立AWS RoboMaker資源 (模擬工作、機器人和模擬應用程式)

  • 建立並上傳 Amazon ECR 儲存庫

最後,您必須知道您的帳號,並且必須選取要在其中執行模擬的區域。 AWS RoboMaker在以下列出的區域中支援AWS RoboMaker 端點和配額

從 ROS 工作區建置應用程式容器

AWS RoboMaker模擬由模擬應用程式和可選的機器人應用程式組成。這些應用程式中的每一個都是由名稱和容器映像定義。本節示範如何為模擬應用程式和自動機械手應用程式建立容器映像。下列範例中,兩個應用程式都建置於單一工作區內。接下來的方法很容易推廣到任何 ROS 項目。

若要開始,請複製hello world儲存庫並匯入來源。

git clone https://github.com/aws-robotics/aws-robomaker-sample-application-helloworld.git helloworld cd helloworld vcs import robot_ws < robot_ws/.rosinstall vcs import simulation_ws < simulation_ws/.rosinstall

接下來,在helloworld目錄中創建一個新的文本文件並命名它Dockerfile。複製並貼上下列內容:

# ======== ROS/Colcon Dockerfile ======== # This sample Dockerfile will build a Docker image for AWS RoboMaker # in any ROS workspace where all of the dependencies are managed by rosdep. # # Adapt the file below to include your additional dependencies/configuration # outside of rosdep. # ======================================= # ==== Arguments ==== # Override the below arguments to match your application configuration. # =================== # ROS Distribution (ex: melodic, foxy, etc.) ARG ROS_DISTRO=melodic # Application Name (ex: helloworld) ARG APP_NAME=robomaker_app # Path to workspace directory on the host (ex: ./robot_ws) ARG LOCAL_WS_DIR=workspace # User to create and use (default: robomaker) ARG USERNAME=robomaker # The gazebo version to use if applicable (ex: gazebo-9, gazebo-11) ARG GAZEBO_VERSION=gazebo-9 # Where to store the built application in the runtime image. ARG IMAGE_WS_DIR=/home/$USERNAME/workspace # ======== ROS Build Stages ======== # ${ROS_DISTRO}-ros-base # -> ros-robomaker-base # -> ros-robomaker-application-base # -> ros-robomaker-build-stage # -> ros-robomaker-app-runtime-image # ================================== # ==== ROS Base Image ============ # If running in production, you may choose to build the ROS base image # from the source instruction-set to prevent impact from upstream changes. # ARG UBUNTU_DISTRO=focal # FROM public.ecr.aws/lts/ubuntu:${UBUNTU_DISTRO} as ros-base # Instruction for each ROS release maintained by OSRF can be found here: # https://github.com/osrf/docker_images # ================================== # ==== Build Stage with AWS RoboMaker Dependencies ==== # This stage creates the robomaker user and installs dependencies required # to run applications in RoboMaker. # ================================== FROM public.ecr.aws/docker/library/ros:${ROS_DISTRO}-ros-base AS ros-robomaker-base ARG USERNAME ARG IMAGE_WS_DIR RUN apt-get clean RUN apt-get update && apt-get install -y \ lsb \ unzip \ wget \ curl \ xterm \ python3-colcon-common-extensions \ devilspie \ xfce4-terminal RUN groupadd $USERNAME && \ useradd -ms /bin/bash -g $USERNAME $USERNAME && \ sh -c 'echo "$USERNAME ALL=(root) NOPASSWD:ALL" >> /etc/sudoers' USER $USERNAME WORKDIR /home/$USERNAME RUN mkdir -p $IMAGE_WS_DIR # ==== ROS Application Base ==== # This section installs exec dependencies for your ROS application. # Note: Make sure you have defined 'exec' and 'build' dependencies correctly # in your package.xml files. # ======================================== FROM ros-robomaker-base as ros-robomaker-application-base ARG LOCAL_WS_DIR ARG IMAGE_WS_DIR ARG ROS_DISTRO ARG USERNAME WORKDIR $IMAGE_WS_DIR COPY --chown=$USERNAME:$USERNAME $LOCAL_WS_DIR/src $IMAGE_WS_DIR/src RUN sudo apt update && \ rosdep update && \ rosdep fix-permissions # Note: This will install all dependencies. # You could further optimize this by only defining the exec dependencies. # Then, install the build dependencies in the build image. RUN rosdep install --from-paths src --ignore-src -r -y # ==== ROS Workspace Build Stage ==== # In this stage, we will install copy source files, install build dependencies # and run a build. # =================================== FROM ros-robomaker-application-base AS ros-robomaker-build-stage LABEL build_step="${APP_NAME}Workspace_Build" ARG APP_NAME ARG LOCAL_WS_DIR ARG IMAGE_WS_DIR RUN . /opt/ros/$ROS_DISTRO/setup.sh && \ colcon build \ --install-base $IMAGE_WS_DIR/$APP_NAME # ==== ROS Robot Runtime Image ==== # In the final stage, we will copy the staged install directory to the runtime # image. # ================================= FROM ros-robomaker-application-base AS ros-robomaker-app-runtime-image ARG APP_NAME ARG USERNAME ARG GAZEBO_VERSION ENV USERNAME=$USERNAME ENV APP_NAME=$APP_NAME ENV GAZEBO_VERSION=$GAZEBO_VERSION RUN rm -rf $IMAGE_WS_DIR/src COPY --from=ros-robomaker-build-stage $IMAGE_WS_DIR/$APP_NAME $IMAGE_WS_DIR/$APP_NAME # Add the application source file to the entrypoint. WORKDIR / COPY entrypoint.sh /entrypoint.sh RUN sudo chmod +x /entrypoint.sh && \ sudo chown -R $USERNAME /entrypoint.sh && \ sudo chown -R $USERNAME $IMAGE_WS_DIR/$APP_NAME ENTRYPOINT ["/entrypoint.sh"]

您剛建立 Docker 影像時,將使用於建置 Docker 影像的指令集。通讀中的評論,Dockerfile以了解正在構建的內容,並根據需要根據需要進行調整。為了便於開發,基Dockerfile於由開源機器人基金會(ORF)維護的官方 ROS Docker 映像。不過,在生產環境中執行時,您可以選擇使用 OSLF 來源指令集來建立 ROS 基礎映像檔, GitHub以防止上游變更造成影響。

接下來,創建一個名為的新文件entrypoint.sh

#!/bin/bash set -e source "/home/$USERNAME/workspace/$APP_NAME/setup.bash" if [[ -f "/usr/share/$GAZEBO_VERSION/setup.sh" ]] then source /usr/share/$GAZEBO_VERSION/setup.sh fi printenv exec "${@:1}"

一個ENTRYPOINT文件是當 Docker 容器產生時運行的可執行文件。我們正在使用入口點來源 ROS 工作區,因此我們可以roslaunch輕鬆地在AWS RoboMaker. 您可能需要將自己的環境配置步驟添加到此ENTRYPOINT文件中。

我們Dockerfile使用 Docker 的多階段建置和整合快取 BuildKit。多階段組建允許使用不同建置步驟的工作流程,因此不會將組建相依性和原始程式碼複製到執行階段映像中。這會減少 Docker 映像檔的大小並提高效能。快取作業會儲存先前建置的檔案,加快 future 的建置速度。

使用下列命令建置自動機器人應用程式:

DOCKER_BUILDKIT=1 docker build . \ --build-arg ROS_DISTRO=melodic \ --build-arg LOCAL_WS_DIR=./robot_ws \ --build-arg APP_NAME=helloworld-robot-app \ -t robomaker-helloworld-robot-app

建立機器人應用程式之後,您可以依照下列方式建置模擬應用程式:

DOCKER_BUILDKIT=1 docker build . \ --build-arg GAZEBO_VERSION=gazebo-9 \ --build-arg ROS_DISTRO=melodic \ --build-arg LOCAL_WS_DIR=./simulation_ws \ --build-arg APP_NAME=helloworld-sim-app \ -t robomaker-helloworld-sim-app

執行命令docker images以確認 Docker 映像檔已成功建置。輸出應類似以下內容:

Administrator:~/environment/helloworld (ros1) $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE robomaker-helloworld-sim-app latest 5cb08816b6b3 6 minutes ago 2.8GB robomaker-helloworld-robot-app latest b5f6f755feec 10 minutes ago 2.79GB

此時,您已成功建置 Docker 影像。最好先在本地測試這些內容,然後再上傳它們以供使用AWS RoboMaker。下一節說明作法。

測試您的容器

下列命令可讓您在本機開發環境中執行應用程式。

啟動機器人應用程式:

docker run -it -v /tmp/.X11-unix/:/tmp/.X11-unix/ \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ robomaker-helloworld-robot-app:latest roslaunch hello_world_robot rotate.launch

啟動模擬應用程式:

docker run -it -v /tmp/.X11-unix/:/tmp/.X11-unix/ \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ robomaker-helloworld-sim-app:latest roslaunch hello_world_simulation empty_world.launch

確認容器運作正常後,您可以將應用程式容器發佈到 Amazon ECR,然後提交模擬任務。