Ejecutar una aplicación de muestra con ROS Melodic y Gazebo 9 - 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 Melodic y Gazebo 9

El siguiente tutorial le muestra cómo utilizar imágenes de contenedores para desarrollar con ROS y Gazebo 9 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.

├── HelloWorldSampleAppROSMelodicGazebo9 // Base Image │ └── Dockerfile ├── HelloWorldSampleAppROSMelodicGazebo9RobotApp // Image for Robot App │ ├── Dockerfile │ └── robot-entrypoint.sh ├── HelloWorldSampleAppROSMelodicGazebo9SimApp // 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 scripts de punto de entrada. Estos scripts obtienen los entornos para sus aplicaciones respectivas. Establecen la ruta para ejecutar comandos que le permiten iniciar la aplicación de robot y de simulación.

Crear una imagen base

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

  1. Guardar los siguientes comandos en un Dockerfile.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM ros:melodic ENV DEBIAN_FRONTEND noninteractive RUN apt-get clean RUN apt-get update && apt-get install -y \ lsb \ unzip \ wget \ curl \ sudo \ python-vcstool \ python-rosinstall \ python3-colcon-common-extensions \ ros-melodic-rviz \ ros-melodic-rqt \ ros-melodic-rqt-common-plugins \ devilspie \ xfce4-terminal \ ros-melodic-gazebo-ros-pkgs \ ros-melodic-gazebo-ros-control \ ros-melodic-turtlebot3 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/ros1.zip && unzip ros1.zip' RUN sh -c 'cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros1' RUN sudo rosdep fix-permissions RUN rosdep update
  2. Una vez que haya creado el Dockerfile, constrúyalo con los siguientes comandos en su terminal.

    cd ../HelloWorldSampleAppROSMelodicGazebo9 docker build -t helloworldsampleapprosmelodicgazebo9:latest .

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

Crear una imagen para la aplicación de robot

Una vez que haya creado la imagen base, cree la imagen para la aplicación de robot.

  1. 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 helloworldsampleapprosmelodicgazebo9:latest # Build the Robot application RUN cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros1/robot_ws && \ /bin/bash -c "source /opt/ros/melodic/setup.bash && vcs import < .rosinstall && rosdep install --rosdistro melodic --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 roslaunch hello_world_robot rotate.launch ENTRYPOINT [ "/home/robomaker/robot-entrypoint.sh" ]
  2. El siguiente comando crea la imagen de la aplicación del robot desde el Dockerfile.

    cd HelloWorldSampleAppROSMelodicGazebo9RobotApp/HelloWorldSampleAppROSMelodicGazebo9RobotApp docker build -t helloworldsampleapprosmelodicgazebo9robotapp:latest image/.
  3. 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-ros1/robot_ws source /opt/ros/melodic/setup.bash source /usr/share/gazebo-9/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.

  1. 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 helloworldsampleapprosmelodicgazebo9:latest # Build the Simulation application RUN cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros1/simulation_ws && \ /bin/bash -c "source /opt/ros/melodic/setup.bash && vcs import < .rosinstall && rosdep install --rosdistro melodic --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 roslaunch hello_world_simulation empty_world.launch ENTRYPOINT [ "/home/robomaker/simulation-entrypoint.sh" ]
  2. Guarde el siguiente script 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-ros1/simulation_ws source /opt/ros/melodic/setup.bash source /usr/share/gazebo-9/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 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 de Docker se ejecuta, puede enviarla a Amazon ECR y crear un trabajo de simulación.

  1. Utilice los siguientes comandos para ejecutar la aplicación Hello World en su entorno Linux local.

    docker run -it -e DISPLAY -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 \ helloworldsampleapprosmelodicgazebo9robotapp:latest
    docker run -it -e DISPLAY -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 \ helloworldsampleapprosmelodicgazebo9simapp:latest
  2. Ejecute los contenedores de la aplicación de robot y la aplicación de simulación para 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 $ rosrun gazebo_ros gzclient
  3. Agregue etiquetas a sus imágenes para mantenerlas organizadas. Utilice los siguientes comandos para etiquetar sus imágenes:

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