支援終止通知: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,請參閱部落格文章,其中說明如何在 GPU 和容器支援中AWS RoboMaker執行任何高傳真度模擬
先決條件
在開始之前,請確保您的開發環境具有必要的依賴關係。您的電腦上必須安裝 DockerAWS CLI、和 VCS 匯入工具。
-
安裝AWS CLIgetting-started-install:https://docs.aws.amazon.com/cli/latest/userguide/
-
安裝 docker:https://docs.docker.com/get-docker/
-
安裝 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)
接下來,創建一個名為的新文件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,然後提交模擬任務。