Executando um aplicativo de amostra com ROS 2 Foxy e Gazebo 11 - AWS RoboMaker

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 com ROS 2 Foxy e Gazebo 11

O tutorial a seguir mostra como usar imagens de contêiner para desenvolver com ROS 2 Foxy e Gazebo 11, criando e executando o aplicativo robótico “Hello World” e o aplicativo de simulação. Você pode fazer com que o aplicativo de amostra funcione executando os comandos descritos neste documento.

Para este tutorial, criamos e usamos três imagens de contêiner. A seguir, mostramos a estrutura de diretórios que usamos para esse aplicativo de exemplo.

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

Cada Dockerfile tem as instruções necessárias para criar cada imagem;

  • O Dockerfile da imagem base tem os comandos para configurar o ROS e o Gazebo.

  • O Dockerfile para o aplicativo de robô tem os comandos para configurar o aplicativo de robô “Hello World”.

  • O Dockerfile do aplicativo de simulação tem 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. Eles configuram o caminho para você executar comandos para iniciar seus aplicativos de robô e simulação.

Criação de uma imagem base

Para criar uma imagem base, você salva os comandos para criar seu ambiente em um Dockerfile. Depois, você pode criar o Dockerfile.

  • Salve os comandos a seguir em um 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

Depois de criar o Dockerfile, crie-o usando os seguintes comandos no seu terminal.

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

A construção da imagem base instala ROS 2 Foxy e Gazebo 11. Você precisa de ambas as bibliotecas instaladas para executar seus aplicativos com êxito.

Criando uma imagem para o aplicativo de robô

Depois de criar a imagem base, você pode criar a imagem para seu aplicativo de robô. Você salva o script a seguir em um Dockerfile e o cria. 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 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" ]

O comando a seguir cria a imagem para o aplicativo do robô a partir do Dockerfile.

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

Veja a seguir o conteúdo do script que você pode salvar como robot-entrypoint.sh. Esse script fornece o ambiente do aplicativo do robô.

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

Criação de 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 e o cria. 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 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" ]

O comando a seguir cria a imagem.

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

Veja a seguir o conteúdo do script que você pode salvar 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 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}"

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 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

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:

  1. Conectar-se ao contêiner executando o aplicativo de simulação.

  2. 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 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 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

Depois de verificar se o aplicativo está funcionando corretamente, você pode enviar 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/helloworldsampleappros2foxygazebo11robotapp:latest docker push accountID.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleappros2foxygazebo11simapp:latest

Em seguida, você pode executar um trabalho de simulação na imagem. Para obter mais informações sobre trabalhos de simulação, consulte Simulação com o AWS RoboMaker.