Aviso de fim do suporte: em 10 de setembro de 2025, AWS
interromperá o suporte para AWS RoboMaker. Depois de 10 de setembro de 2025, você não poderá mais acessar o AWS RoboMaker console ou AWS RoboMaker os recursos. Para obter mais informações sobre como fazer a transição para ajudar AWS Batch a executar simulações em contêineres, visite esta postagem no blog.
As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Executando um aplicativo de amostra de GPU com ROS2 Foxy e Gazebo 11
Este tutorial explica como usar drivers de GPU em imagens de contêiner para desenvolver com ROS 2 Foxy e Gazebo 11 criando e executando o aplicativo de robô Hello World e o aplicativo de simulação usando três imagens de contêiner descritas no exemplo a seguir.
├── SampleGPUBaseApp // Base Image │ └── Dockerfile ├── SampleGPURobotApp // Image for Robot App │ ├── Dockerfile │ └── robot-entrypoint.sh ├── SampleGPUSimulationApp // Image for Simulation App │ ├── Dockerfile │ └── simulation-entrypoint.sh
Cada Dockerfile contém as instruções necessárias para criar cada imagem.
-
O Dockerfile da imagem base inclui comandos para configurar os drivers ROS, Gazebo e GPU.
-
O Dockerfile para o aplicativo de robô inclui os comandos para configurar o aplicativo de robô Hello World.
-
O Dockerfile do aplicativo de simulação inclui os comandos para configurar o aplicativo de simulação Hello World.
Tanto o aplicativo do robô quanto o aplicativo de simulação têm um script de ponto de entrada. Esses scripts fornecem os ambientes para seus respectivos aplicativos e configuram o caminho para você executar comandos para iniciar seus aplicativos de robô e simulação.
Criação de uma imagem de GPU base
O Dockerfile a seguir contém os comandos para criar uma imagem base do NVIDIA OpenGL e instalar o DCV.
-
Salve os comandos a seguir no Dockerfile no diretório
SampleGPUBaseApp
.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu20.04 ENV DEBIAN_FRONTEND="noninteractive" ENV QT_X11_NO_MITSHM=1 RUN apt-get clean RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ devilspie \ gnupg2 \ mesa-utils \ sudo \ unzip \ wget \ xfce4-terminal RUN wget https://d1uj6qtbmh3dt5.cloudfront.net/NICE-GPG-KEY && gpg --import NICE-GPG-KEY && \ wget https://d1uj6qtbmh3dt5.cloudfront.net/2021.2/Servers/nice-dcv-2021.2-11048-ubuntu1804-x86_64.tgz && \ tar xvzf nice-dcv-2021.2-11048-ubuntu1804-x86_64.tgz && \ cd nice-dcv-2021.2-11048-ubuntu1804-x86_64 && \ apt install -y ./nice-dcv-gl_2021.2.944-1_amd64.ubuntu1804.deb RUN apt update && apt -y install locales && \ locale-gen en_US en_US.UTF-8 && \ update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 ENV LANG=en_US.UTF-8 RUN apt-get update && apt-get install -y --no-install-recommends curl lsb-release RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null && \ apt update && \ apt install -y ros-foxy-desktop && \ /bin/bash -c "source /opt/ros/foxy/setup.bash" RUN apt -y install ros-foxy-gazebo-ros-pkgs RUN apt-key adv --fetch-keys 'http://packages.osrfoundation.org/gazebo.key' && \ apt update && \ apt install -y python3-rosdep git RUN if [ ! -f "/etc/ros/rosdep/sources.list.d/20-default.list" ]; then \ rosdep init; \ fi RUN rosdep update RUN apt-get install -y python3-apt python3-pip python3-vcstool python3-testresources RUN pip3 install -U pytest setuptools colcon-ros-bundle RUN useradd --create-home robomaker && \ sh -c 'echo "robomaker ALL=(root) NOPASSWD:ALL" >> /etc/sudoers' RUN sh -c 'mkdir -p /home/robomaker/workspace' && \ sh -c 'cd /home/robomaker/workspace && wget https://github.com/aws-robotics/aws-robomaker-sample-application-helloworld/archive/ros2.zip && unzip ros2.zip'
Depois de criar o Dockerfile, crie-o usando os seguintes comandos no seu terminal.
cd SampleGPUBaseApp docker build -t samplegpubaseapp:latest .
A criação da imagem base instala ROS 2 Foxy, Gazebo 11, NVIDIA OpenGL e NICE-DCV.
Criando uma imagem para o aplicativo de robô
Depois de criar a imagem base, você pode criar a imagem para seu aplicativo de robô. Salve o script a seguir no Dockerfile no diretório e crie-o SampleGPURobotApp
. Esse script baixa o aplicativo de robô “Hello World” e o configura.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM samplegpubaseapp:latest # Build the Robot application RUN cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros2/robot_ws && \ /bin/bash -c "source /opt/ros/foxy/setup.bash && vcs import < .rosinstall && rosdep install --rosdistro foxy --from-paths src --ignore-src -r -y && colcon build" COPY robot-entrypoint.sh /home/robomaker/robot-entrypoint.sh RUN sh -c 'sudo chmod +x /home/robomaker/robot-entrypoint.sh' RUN sh -c 'sudo chown robomaker:robomaker /home/robomaker/robot-entrypoint.sh' CMD ros2 launch hello_world_robot rotate.launch.py ENTRYPOINT [ "/home/robomaker/robot-entrypoint.sh" ]
Veja a seguir o conteúdo do script que você salvou como robot-entrypoint.sh
. Esse script fornece o ambiente do aplicativo do robô.
#!/bin/bash cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros2/robot_ws source /opt/ros/foxy/setup.bash source /usr/share/gazebo-11/setup.sh source ./install/setup.sh printenv exec "${@:1}"
O comando a seguir cria a imagem para o aplicativo do robô a partir do Dockerfile.
cd SampleGPURobotApp docker build -t samplegpurobotapp:latest .
Criando uma imagem para o aplicativo de simulação
Criando uma imagem para o aplicativo de simulação
Depois de criar a imagem base e a imagem para o aplicativo do robô, você pode criar a imagem para o seu aplicativo de simulação. Você salva o script a seguir em um Dockerfile no diretório SampleGPUSimulationApp
e, em seguida, o cria. Esse script baixa o aplicativo de simulação “Hello World” e o configura.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM samplegpubaseapp:latest # Build the Simulation application RUN cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros2/simulation_ws && \ /bin/bash -c "source /opt/ros/foxy/setup.bash && vcs import < .rosinstall && rosdep install --rosdistro foxy --from-paths src --ignore-src -r -y && colcon build" COPY simulation-entrypoint.sh /home/robomaker/simulation-entrypoint.sh RUN sh -c 'sudo chmod +x /home/robomaker/simulation-entrypoint.sh' RUN sh -c 'sudo chown robomaker:robomaker /home/robomaker/simulation-entrypoint.sh' CMD ros2 launch hello_world_simulation empty_world.launch.py ENTRYPOINT [ "/home/robomaker/simulation-entrypoint.sh" ]
Veja a seguir o conteúdo do script que você salvou como simulation-entrypoint.sh
. Esse script fornece o ambiente do aplicativo de simulação.
#!/bin/bash if [ ! -z $GAZEBO_MASTER_URI ]; then tmp_GAZEBO_MASTER_URI=$GAZEBO_MASTER_URI fi cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros2/simulation_ws source /opt/ros/foxy/setup.bash source /usr/share/gazebo-11/setup.sh if [ ! -z $tmp_GAZEBO_MASTER_URI ]; then export GAZEBO_MASTER_URI=$tmp_GAZEBO_MASTER_URI unset tmp_GAZEBO_MASTER_URI fi source ./install/setup.sh printenv exec "${@:1}"
O comando a seguir cria a imagem.
cd SampleGPUSimulationApp docker build -t samplegpusimulationapp:latest .
Executando o aplicativo e enviando-o para o Amazon ECR
Depois de criar suas imagens, certifique-se de que elas sejam executadas corretamente em seu ambiente Linux local. Depois de verificar se sua imagem está sendo executada, você pode enviar sua imagem do Docker para o Amazon ECR e criar um trabalho de simulação.
Os comandos a seguir permitem que você execute o aplicativo Hello World em seu ambiente Linux local.
docker run -it -e DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ --name gpu_robot_app \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ samplegpurobotapp:latest docker run -it -e DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ --name gpu_sim_app \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ samplegpusimulationapp:latest
Ao executar o aplicativo do robô e os contêineres do aplicativo de simulação, você pode visualizar a simulação usando a ferramenta Gazebo GUI. Use os comandos a seguir para:
-
Conectar-se ao contêiner executando o aplicativo de simulação.
-
Visualizar seu aplicativo executando a interface gráfica do usuário (GUI) do Gazebo.
# Enable access to X server to launch Gazebo from docker container $ xhost + # Check that the robot_app and sim_app containers are running. The command should list both containers $ docker container ls # Connect to the sim app container $ docker exec -it gpu_sim_app bash # Launch Gazebo from within the container $ /home/robomaker/simulation-entrypoint.sh ros2 launch gazebo_ros gzclient.launch.py
É possível adicionar tags às imagens. Os comandos a seguir permitem marcar suas imagens.
docker tag samplegpurobotapp:latest accountID.dkr.ecr.us-west-2.amazonaws.com/samplegpurobotapp:latest docker tag samplegpusimulationapp:latest accountID.dkr.ecr.us-west-2.amazonaws.com/samplegpusimulationapp:latest
Depois de verificar se o aplicativo está funcionando corretamente, você pode enviá-lo para o Amazon ECR usando os seguintes comandos.
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin accountID.dkr.ecr.us-west-2.amazonaws.com docker push accountID.dkr.ecr.us-west-2.amazonaws.com/samplegpurobotapp:latest docker push accountID.dkr.ecr.us-west-2.amazonaws.com/samplegpusimulationapp:latest
Agora você pode executar um trabalho de simulação com o GPU Compute usando essas imagens. Para obter mais informações sobre trabalhos de simulação, consulte Simulação com o AWS RoboMaker.