Ejecutar una aplicación de muestra 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 con ROS 2 Foxy y Gazebo 11

El siguiente tutorial le muestra cómo utilizar 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. Puede hacer que la aplicación de ejemplo funcione ejecutando los comandos que se describen en este documento.

Para este tutorial, creamos y utilizamos tres imágenes de contenedores. A continuación se muestra la estructura de directorios que utilizamos para esta aplicación de ejemplo.

├── HelloWorldSampleAppROS2FoxyGazebo11 // Base Image │ └── Dockerfile ├── HelloWorldSampleAppROS2FoxyGazebo11RobotApp // Image for Robot App │ ├── Dockerfile │ └── robot-entrypoint.sh ├── HelloWorldSampleAppROS2FoxyGazebo11SimApp // Image for Simulation App │ ├── Dockerfile │ └── simulation-entrypoint.sh

Cada Dockerfile tiene las instrucciones necesarias para crear cada imagen.

  • El Dockerfile de la imagen base contiene los comandos para configurar ROS y Gazebo.

  • El Dockerfile de la aplicación de robots 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. Establecen la ruta para ejecutar comandos para iniciar la aplicación de robot y de simulación.

Crear una imagen base

Para crear una imagen base, guarde los comandos para crear su entorno en un Dockerfile. A continuación, cree el dockerfile.

  • Guardar los siguientes comandos en un Dockerfile.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM ros:foxy ENV DEBIAN_FRONTEND noninteractive RUN apt-get clean RUN apt-get update && apt-get install -y \ lsb \ unzip \ wget \ curl \ sudo \ python3-vcstool \ python3-rosinstall \ python3-colcon-common-extensions \ ros-foxy-rviz2 \ ros-foxy-rqt \ ros-foxy-rqt-common-plugins \ devilspie \ xfce4-terminal RUN wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -; \ sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list' RUN apt-get update && apt-get install -y gazebo11 ENV QT_X11_NO_MITSHM=1 ARG USERNAME=robomaker RUN groupadd $USERNAME RUN useradd -ms /bin/bash -g $USERNAME $USERNAME RUN sh -c 'echo "$USERNAME ALL=(root) NOPASSWD:ALL" >> /etc/sudoers' USER $USERNAME RUN sh -c 'cd /home/$USERNAME' # Download and build our Robot and Simulation application RUN sh -c 'mkdir -p /home/robomaker/workspace' RUN sh -c 'cd /home/robomaker/workspace && wget https://github.com/aws-robotics/aws-robomaker-sample-application-helloworld/archive/3527834.zip && unzip 3527834.zip && mv aws-robomaker-sample-application-helloworld-3527834771373beff0ed3630c13479567db4149e aws-robomaker-sample-application-helloworld-ros2' RUN sh -c 'cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros2' RUN sudo rosdep fix-permissions RUN rosdep update

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

cd ../HelloWorldSampleAppROS2FoxyGazebo11 docker build -t helloworldsampleappros2foxygazebo11:latest .

Al crear la imagen base, se instalan ROS 2 Foxy y Gazebo 11. Necesita tener ambas bibliotecas instaladas para ejecutar correctamente las aplicaciones.

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 un Dockerfile 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 helloworldsampleappros2foxygazebo11: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 comando crea la imagen de la aplicación del robot desde el Dockerfile.

cd HelloWorldSampleAppROS2FoxyGazebo11RobotApp/HelloWorldSampleAppROS2FoxyGazebo11RobotApp docker build -t helloworldsampleappros2foxygazebo11robotapp:latest .

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

#!/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/robot_ws source /opt/ros/foxy/setup.bash source /usr/share/gazebo-11/setup.sh source ./install/setup.sh if [ ! -z $tmp_GAZEBO_MASTER_URI ]; then export GAZEBO_MASTER_URI=$tmp_GAZEBO_MASTER_URI unset tmp_GAZEBO_MASTER_URI fi printenv exec "${@:1}"

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 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 helloworldsampleappros2foxygazebo11: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 comando crea la imagen.

cd HelloWorldSampleAppROS2FoxyGazebo11SimApp/HelloWorldSampleAppROS2FoxyGazebo11SimApp docker build -t helloworldsampleappros2foxygazebo11simapp:latest .

El siguiente es el contenido del script que puede guardar 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 source ./install/setup.sh if [ ! -z $tmp_GAZEBO_MASTER_URI ]; then export GAZEBO_MASTER_URI=$tmp_GAZEBO_MASTER_URI unset tmp_GAZEBO_MASTER_URI fi printenv exec "${@:1}"

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 robot_app \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ helloworldsampleappros2foxygazebo11robotapp:latest
docker run -it -e DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ --name sim_app \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ helloworldsampleappros2foxygazebo11simapp: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:

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

  2. 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 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 helloworldsampleappros2foxygazebo11robotapp:latest accountID.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleappros2foxygazebo11robotapp:latest
docker tag helloworldsampleappros2foxygazebo11simapp:latest accountID.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleappros2foxygazebo11simapp: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/helloworldsampleappros2foxygazebo11robotapp:latest docker push accountID.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleappros2foxygazebo11simapp:latest

A continuación, puede ejecutar un trabajo de simulación en la imagen. Para obtener más información sobre los trabajos de simulación, consulte Simulación con AWS RoboMaker.