Exécution d'un exemple d'application avec ROS 2 Foxy et Gazebo 11 - AWS RoboMaker

Avis de fin de support : le 10 septembre 2025, AWS le support de AWS RoboMaker. Après le 10 septembre 2025, vous ne pourrez plus accéder à la AWS RoboMaker console ni aux AWS RoboMaker ressources. Pour plus d'informations sur la transition AWS Batch afin de faciliter l'exécution de simulations conteneurisées, consultez ce billet de blog.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exécution d'un exemple d'application avec ROS 2 Foxy et Gazebo 11

Le didacticiel suivant explique comment utiliser des images de conteneurs pour développer avec ROS 2 Foxy et Gazebo 11, en créant et en exécutant l'application robot et l'application de simulation Hello World. Vous pouvez faire fonctionner l'exemple d'application en exécutant les commandes décrites dans ce document.

Pour ce didacticiel, nous créons et utilisons trois images de conteneur. Ce qui suit montre la structure de répertoires que nous utilisons pour cet exemple d'application.

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

Chaque Dockerfile contient les instructions nécessaires pour créer chaque image ;

  • Le Dockerfile pour l'image de base contient les commandes permettant de configurer ROS et Gazebo.

  • Le Dockerfile de l'application robot contient les commandes permettant de configurer l'application robot Hello World.

  • Le Dockerfile de l'application de simulation contient les commandes permettant de configurer l'application de simulation Hello World.

L'application robot et l'application de simulation possèdent toutes deux un script de point d'entrée. Ces scripts fournissent les environnements de leurs applications respectives. Ils configurent le chemin pour que vous puissiez exécuter des commandes pour démarrer votre robot et vos applications de simulation.

Création d'une image de base

Pour créer une image de base, vous enregistrez les commandes permettant de créer votre environnement dans un Dockerfile. Vous créez ensuite le Dockerfile.

  • Enregistrez les commandes suivantes dans 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

Après avoir créé le Dockerfile, créez-le à l'aide des commandes suivantes sur votre terminal.

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

La création de l'image de base installe ROS 2 Foxy et Gazebo 11. Les deux bibliothèques doivent être installées pour exécuter correctement vos applications.

Création d'une image pour l'application Robot

Après avoir créé l'image de base, vous pouvez créer l'image pour l'application de votre robot. Vous enregistrez le script suivant dans un Dockerfile et vous le créez. Ce script télécharge l'application robot Hello World et la configure.

# 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" ]

La commande suivante crée l'image de l'application robot à partir du Dockerfile.

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

Voici le contenu du script que vous pouvez enregistrer sousrobot-entrypoint.sh. Ce script fournit l'environnement de l'application 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}"

Création d'une image pour l'application de simulation

Après avoir créé l'image de base et l'image pour l'application robot, vous pouvez créer l'image pour votre application de simulation. Vous enregistrez le script suivant dans un Dockerfile et vous le créez. Ce script télécharge l'application robot Hello World et la configure.

# 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" ]

La commande suivante crée l'image.

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

Voici le contenu du script que vous pouvez enregistrer soussimulation-entrypoint.sh. Ce script fournit l'environnement de l'application de simulation.

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

Exécution de l'application et transfert de celle-ci vers Amazon ECR

Après avoir créé vos images, assurez-vous qu'elles s'exécutent correctement dans votre environnement Linux local. Après avoir vérifié que votre image fonctionne, vous pouvez transférer votre image Docker vers Amazon ECR et créer une tâche de simulation.

Les commandes suivantes vous permettent d'exécuter l'application Hello World dans votre environnement 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

Lorsque vous exécutez l'application robot et les conteneurs de l'application de simulation, vous pouvez visualiser la simulation à l'aide de l'outil graphique Gazebo. Utilisez les commandes suivantes pour :

  1. Connectez-vous à votre conteneur exécutant l'application de simulation.

  2. Visualisez votre application en exécutant l'interface utilisateur graphique (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

Vous pouvez ajouter des balises à vos images. Les commandes suivantes vous permettent de baliser vos images.

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

Après avoir vérifié que l'application fonctionne correctement, vous pouvez l'envoyer à Amazon ECR à l'aide des commandes suivantes.

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

Vous pouvez ensuite exécuter une tâche de simulation sur l'image. Pour plus d'informations sur les tâches de simulation, voirSimulation avecAWS RoboMaker.