Ausführen einer Beispielanwendung mit ROS 2 Foxy und Gazebo 11 - AWS RoboMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Ausführen einer Beispielanwendung mit ROS 2 Foxy und Gazebo 11

Das folgende Tutorial zeigt Ihnen, wie Sie Container-Images verwenden, um mit ROS 2 Foxy und Gazebo 11 zu entwickeln, indem Sie die Hello World-Roboteranwendung und Simulationsanwendung erstellen und ausführen. Sie können die Beispielanwendung zum Laufen bringen, indem Sie die in diesem Dokument beschriebenen Befehle ausführen.

Für dieses Tutorial erstellen und verwenden wir drei Container-Images. Im Folgenden wird die Verzeichnisstruktur gezeigt, die wir für diese Beispielanwendung verwenden.

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

Jedes Dockerfile enthält die Anweisungen, die zum Erstellen jedes Images erforderlich sind;

  • Das Dockerfile für das Basis-Image enthält die Befehle zum Einrichten von ROS und Gazebo.

  • Das Dockerfile für die Roboteranwendung enthält die Befehle zum Einrichten der Hello World-Roboteranwendung.

  • Das Dockerfile für die Simulationsanwendung enthält die Befehle zum Einrichten der Hello World-Simulationsanwendung.

Sowohl die Roboteranwendung als auch die Simulationsanwendung verfügen über ein Einstiegsskript. Diese Skripts beziehen die Umgebungen für ihre jeweiligen Anwendungen. Sie legen den Pfad fest, auf dem Sie Befehle ausführen können, um Ihre Roboter- und Simulationsanwendungen zu starten.

Erstellen eines Basisimages

Um ein Basis-Image zu erstellen, speichern Sie die Befehle zur Erstellung Ihrer Umgebung in einem Dockerfile. Anschließend erstellen Sie das Dockerfile.

  • Speichern Sie die folgenden Befehle in einer 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

Nachdem Sie das Dockerfile erstellt haben, erstellen Sie es mit den folgenden Befehlen auf Ihrem Terminal.

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

Beim Erstellen des Basis-Images werden ROS 2 Foxy und Gazebo 11 installiert. Sie müssen beide Bibliotheken installiert haben, um Ihre Anwendungen erfolgreich ausführen zu können.

Erstellen eines Images für die Roboteranwendung

Nachdem Sie das Basis-Image erstellt haben, können Sie das Image für Ihre Roboteranwendung erstellen. Sie speichern das folgende Skript in einem Dockerfile und erstellen es. Dieses Skript lädt die Hello World-Roboteranwendung herunter und richtet sie ein.

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

Der folgende Befehl erstellt das Image für die Roboteranwendung aus der Dockerfile.

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

Im Folgenden finden Sie den Inhalt des Skripts, das Sie speichern können alsrobot-entrypoint.sh. Dieses Skript bezieht die Umgebung für die Roboteranwendung.

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

Erstellen eines Images für die Simulationsanwendung

Nachdem Sie das Basisimage und das Image für die Roboteranwendung erstellt haben, können Sie das Image für Ihre Simulationsanwendung erstellen. Sie speichern das folgende Skript in einem Dockerfile und erstellen es. Dieses Skript lädt die Hello World-Roboteranwendung herunter und richtet sie ein.

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

Mit dem folgenden Befehl wird das Bild erstellt.

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

Im Folgenden finden Sie den Inhalt des Skripts, das Sie speichern können alssimulation-entrypoint.sh. Dieses Skript bezieht die Umgebung für die Simulationsanwendung.

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

Anwendung ausführen und an Amazon ECR übertragen

Nachdem Sie Ihre Images erstellt haben, stellen Sie sicher, dass sie in Ihrer lokalen Linux-Umgebung ordnungsgemäß ausgeführt werden. Nachdem Sie überprüft haben, ob Ihr Image ausgeführt wird, können Sie Ihr Docker-Image an Amazon ECR übertragen und einen Simulationsjob erstellen.

Mit den folgenden Befehlen können Sie die Hello World-Anwendung in Ihrer lokalen Linux-Umgebung ausführen.

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

Wenn Sie die Container der Roboteranwendung und der Simulationsanwendung ausführen, können Sie die Simulation mit dem Gazebo-GUI-Tool visualisieren. Verwenden Sie die folgenden Befehle, um:

  1. Stellen Sie eine Verbindung zu Ihrem Container her, auf dem die Simulationsanwendung ausgeführt wird.

  2. Visualisieren Sie Ihre Anwendung, indem Sie die grafische Benutzeroberfläche (GUI) von Gazebo ausführen.

# 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

Sie können Ihren Bildern Tags hinzufügen. Die folgenden Befehle geben Ihnen die Möglichkeit, Ihre Bilder zu taggen.

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

Nachdem Sie überprüft haben, dass die Anwendung ordnungsgemäß funktioniert, können Sie mithilfe der folgenden Befehle an Amazon ECR senden.

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

Anschließend können Sie einen Simulationsjob für das Image ausführen. Weitere Informationen zu Simulationsaufträgen finden Sie unterSimulation mitAWS RoboMaker.