Avviso di fine del supporto: il 10 settembre 2025, AWS
interromperà il supporto per. AWS RoboMaker Dopo il 10 settembre 2025, non potrai più accedere alla AWS RoboMaker console o alle risorse. AWS RoboMaker Per ulteriori informazioni sulla transizione AWS Batch verso l'esecuzione di simulazioni containerizzate, consulta questo post del blog.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Esecuzione di un'applicazione di esempio con ROS 2 Foxy e Gazebo 11
Il seguente tutorial mostra come utilizzare le immagini dei container per lo sviluppo con ROS 2 Foxy e Gazebo 11, creando ed eseguendo l'applicazione robotica e l'applicazione di simulazione Hello World. È possibile far funzionare l'applicazione di esempio eseguendo i comandi descritti in questo documento.
Per questo tutorial, creiamo e utilizziamo tre immagini di contenitori. Quanto segue mostra la struttura delle directory che utilizziamo per questa applicazione di esempio.
├── HelloWorldSampleAppROS2FoxyGazebo11 // Base Image │ └── Dockerfile ├── HelloWorldSampleAppROS2FoxyGazebo11RobotApp // Image for Robot App │ ├── Dockerfile │ └── robot-entrypoint.sh ├── HelloWorldSampleAppROS2FoxyGazebo11SimApp // Image for Simulation App │ ├── Dockerfile │ └── simulation-entrypoint.sh
Ogni Dockerfile contiene le istruzioni necessarie per creare ogni immagine;
-
Il Dockerfile per l'immagine base contiene i comandi per configurare ROS e Gazebo.
-
Il Dockerfile per l'applicazione robot contiene i comandi per configurare l'applicazione robot Hello World.
-
Il Dockerfile per l'applicazione di simulazione contiene i comandi per configurare l'applicazione di simulazione Hello World.
Sia l'applicazione robotica che l'applicazione di simulazione dispongono di uno script entrypoint. Questi script forniscono gli ambienti per le rispettive applicazioni. Configurano il percorso in cui eseguire i comandi per avviare il robot e le applicazioni di simulazione.
Creazione di un'immagine di base
Per creare un'immagine di base, salvi i comandi per creare il tuo ambiente in un Dockerfile. Quindi crei il Dockerfile.
-
Salva i seguenti comandi in 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
Dopo aver creato il Dockerfile, crealo utilizzando i seguenti comandi sul tuo terminale.
cd ../HelloWorldSampleAppROS2FoxyGazebo11 docker build -t helloworldsampleappros2foxygazebo11:latest .
La creazione dell'immagine di base installa ROS 2 Foxy e Gazebo 11. È necessario installare entrambe le librerie per eseguire correttamente le applicazioni.
Creazione di un'immagine per l'applicazione Robot
Dopo aver creato l'immagine di base, puoi creare l'immagine per la tua applicazione robotica. Salvi il seguente script in un Dockerfile e lo crei. Questo script scarica l'applicazione robot Hello World e 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" ]
Il comando seguente crea l'immagine per l'applicazione robot dal Dockerfile.
cd HelloWorldSampleAppROS2FoxyGazebo11RobotApp/HelloWorldSampleAppROS2FoxyGazebo11RobotApp docker build -t helloworldsampleappros2foxygazebo11robotapp:latest .
Di seguito sono riportati i contenuti dello script che è possibile salvare comerobot-entrypoint.sh
. Questo script fornisce l'ambiente per l'applicazione robotica.
#!/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}"
Creazione di un'immagine per l'applicazione di simulazione
Dopo aver creato l'immagine di base e l'immagine per l'applicazione robot, puoi creare l'immagine per la tua applicazione di simulazione. Salvi il seguente script in un Dockerfile e lo crei. Questo script scarica l'applicazione robot Hello World e 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" ]
Il comando seguente crea l'immagine.
cd HelloWorldSampleAppROS2FoxyGazebo11SimApp/HelloWorldSampleAppROS2FoxyGazebo11SimApp docker build -t helloworldsampleappros2foxygazebo11simapp:latest .
Di seguito sono riportati i contenuti dello script che è possibile salvare comesimulation-entrypoint.sh
. Questo script fornisce l'ambiente per l'applicazione di simulazione.
#!/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}"
Esecuzione dell'applicazione e invio ad Amazon ECR
Dopo aver creato le immagini, assicurati che funzionino correttamente nell'ambiente Linux locale. Dopo aver verificato che l'immagine venga eseguita, puoi inviare l'immagine Docker ad Amazon ECR e creare un processo di simulazione.
I seguenti comandi ti danno la possibilità di eseguire l'applicazione Hello World nel tuo ambiente Linux locale.
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
Quando esegui l'applicazione robotica e i contenitori delle applicazioni di simulazione, puoi visualizzare la simulazione utilizzando lo strumento GUI di Gazebo. Usa i seguenti comandi per:
-
Connettiti al tuo contenitore su cui è in esecuzione l'applicazione di simulazione.
-
Visualizza la tua applicazione eseguendo l'interfaccia grafica utente (GUI) di 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
Puoi aggiungere tag alle tue immagini. I seguenti comandi ti danno la possibilità di etichettare le tue immagini.
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
Dopo aver verificato il corretto funzionamento dell'applicazione, puoi inviare il push ad Amazon ECR utilizzando i seguenti comandi.
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin
accountID
.dkr.ecr.us-west-2.amazonaws.com docker pushaccountID
.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleappros2foxygazebo11robotapp:latest docker pushaccountID
.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleappros2foxygazebo11simapp:latest
È quindi possibile eseguire un processo di simulazione sull'immagine. Per ulteriori informazioni sui lavori di simulazione, vedereSimulazione conAWS RoboMaker.