Ejecutar una aplicación de muestra de GPU con ROS 2 Foxy y Gazebo 11 - AWS RoboMaker

Aviso de fin del soporte: el 10 de septiembre de 2025, AWS dejaremos de ofrecer soporte a AWS RoboMaker. Después del 10 de septiembre de 2025, ya no podrás acceder a la AWS RoboMaker consola ni a AWS RoboMaker los recursos. Para obtener más información sobre la transición para ayudar AWS Batch a ejecutar simulaciones en contenedores, visite esta entrada de blog.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejecutar una aplicación de muestra de GPU con ROS 2 Foxy y Gazebo 11

Este tutorial le muestra cómo utilizar controladores de GPU en imágenes de contenedores para desarrollar con ROS 2 Foxy y Gazebo 11 mediante la creación y ejecución de la aplicación de robot y la aplicación de simulación Hello World usando las tres imágenes de contenedores indicadas en el siguiente ejemplo.

├── SampleGPUBaseApp // Base Image │ └── Dockerfile ├── SampleGPURobotApp // Image for Robot App │ ├── Dockerfile │ └── robot-entrypoint.sh ├── SampleGPUSimulationApp // Image for Simulation App │ ├── Dockerfile │ └── simulation-entrypoint.sh

Cada Dockerfile tiene las instrucciones necesarias para crear cada imagen;

  • El Dockerfile de la imagen base incluye comandos para configurar los controladores de GPU, ROS y Gazebo.

  • El Dockerfile de la aplicación de robot contiene los comandos para configurar la aplicación de robot Hello World.

  • El Dockerfile de la aplicación de simulación contiene los comandos para configurar la aplicación de simulación Hello World.

Tanto la aplicación de robot como la aplicación de simulación tienen un script de punto de entrada. Estos scripts obtienen los entornos para sus aplicaciones respectivas y configuran la ruta para ejecutar los comandos necesarios para iniciar las aplicaciones de robot y de simulación.

Crear una imagen base de GPU

El siguiente Dockerfile contiene los comandos para crear una imagen base desde NVIDIA OpenGL e instalar DCV.

  • Guarde los siguientes comandos en el Dockerfile del directorio 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'

Una vez que haya creado el Dockerfile, constrúyalo con los siguientes comandos en su terminal.

cd SampleGPUBaseApp docker build -t samplegpubaseapp:latest .

Al crear la imagen base, se instalan ROS 2 Foxy, Gazebo 11, NVIDIA OpenGL y NICE-DCV.

Creación de una imagen para la aplicación de robot

Una vez que haya creado la imagen base, puede crear la imagen para su aplicación de robot. Guarde el siguiente script en el Dockerfile del directorio SampleGPURobotApp y constrúyalo. Este script descarga la aplicación de robot Hello World y la 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" ]

El siguiente es el contenido del script que se guarda como robot-entrypoint.sh. Este script genera el entorno de la aplicación de robot.

#!/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}"

El siguiente comando crea la imagen de la aplicación del robot desde el Dockerfile.

cd SampleGPURobotApp docker build -t samplegpurobotapp:latest .

Creación de una imagen para la aplicación de simulación

Creación de una imagen para la aplicación de simulación

Una vez que haya creado la imagen base y la imagen para la aplicación de robot, puede crear la imagen para la aplicación de simulación. Guarde el siguiente script en un Dockerfile del directorio SampleGPUSimulationApp y constrúyalo. Este script descarga la aplicación de simulación Hello World y la 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" ]

El siguiente es el contenido del script que se guarda como simulation-entrypoint.sh. Este script genera el entorno de la aplicación de simulación.

#!/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}"

El siguiente comando crea la imagen.

cd SampleGPUSimulationApp docker build -t samplegpusimulationapp:latest .

Ejecutar la aplicación y enviarla a Amazon ECR

Una vez que haya creado las imágenes, asegúrese de que se ejecuten correctamente en su entorno Linux local. Una vez que haya comprobado que la imagen se ejecuta, puede enviar la imagen de Docker a Amazon ECR y crear un trabajo de simulación.

Los siguientes comandos le permiten ejecutar la aplicación Hello World en su entorno 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

Al ejecutar los contenedores de la aplicación de robot y la aplicación de simulación, puede visualizar la simulación mediante la herramienta GUI de Gazebo. Use los siguientes comandos para:

  • Conectar a su contenedor ejecutando la aplicación de simulación.

  • Visualizar su aplicación ejecutando la interfaz gráfica de usuario (GUI) de 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

Puede agregar etiquetas a las imágenes. Los siguientes comandos le permiten etiquetar sus imágenes.

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

Una vez que haya comprobado que la aplicación funciona correctamente, puede enviarla a Amazon ECR mediante los siguientes 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

Ahora puede ejecutar un trabajo de simulación con GPU Compute utilizando estas imágenes. Para obtener más información sobre los trabajos de simulación, consulte Simulación con AWS RoboMaker.