Menjalankan aplikasi sampel GPU dengan ROS2 Foxy dan Gazebo 11 - AWS RoboMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menjalankan aplikasi sampel GPU dengan ROS2 Foxy dan Gazebo 11

Tutorial ini menjelaskan cara menggunakan driver GPU dalam gambar kontainer untuk dikembangkan dengan ROS 2 Foxy dan Gazebo 11 dengan membuat dan menjalankan aplikasi robot Hello World dan aplikasi simulasi menggunakan tiga gambar kontainer yang diuraikan dalam contoh berikut.

├── SampleGPUBaseApp // Base Image │ └── Dockerfile ├── SampleGPURobotApp // Image for Robot App │ ├── Dockerfile │ └── robot-entrypoint.sh ├── SampleGPUSimulationApp // Image for Simulation App │ ├── Dockerfile │ └── simulation-entrypoint.sh

Setiap Dockerfile berisi instruksi yang diperlukan untuk membangun setiap gambar.

  • Dockerfile untuk gambar dasar mencakup perintah untuk mengatur driver ROS, Gazebo dan GPU.

  • Dockerfile untuk aplikasi robot menyertakan perintah untuk mengatur aplikasi robot Hello World.

  • Dockerfile untuk aplikasi simulasi termasuk perintah untuk mengatur aplikasi simulasi Hello World.

Baik aplikasi robot maupun aplikasi simulasi memiliki skrip entrypoint. Skrip ini sumber lingkungan untuk aplikasi masing-masing dan mengatur jalur bagi Anda untuk menjalankan perintah untuk memulai robot dan aplikasi simulasi Anda.

Membuat gambar GPU dasar

Berikut Dockerfile berisi perintah untuk membuat gambar dasar dari NVIDIA OpenGL dan menginstal DCV.

  • Simpan perintah berikut di Dockerfile diSampleGPUBaseAppdirektori.

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu20.04 ENV DEBIAN_FRONTEND="noninteractive" ENV QT_X11_NO_MITSHM=1 RUN apt-get clean RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ devilspie \ gnupg2 \ mesa-utils \ sudo \ unzip \ wget \ xfce4-terminal RUN wget https://d1uj6qtbmh3dt5.cloudfront.net/NICE-GPG-KEY && gpg --import NICE-GPG-KEY && \ wget https://d1uj6qtbmh3dt5.cloudfront.net/2021.2/Servers/nice-dcv-2021.2-11048-ubuntu1804-x86_64.tgz && \ tar xvzf nice-dcv-2021.2-11048-ubuntu1804-x86_64.tgz && \ cd nice-dcv-2021.2-11048-ubuntu1804-x86_64 && \ apt install -y ./nice-dcv-gl_2021.2.944-1_amd64.ubuntu1804.deb RUN apt update && apt -y install locales && \ locale-gen en_US en_US.UTF-8 && \ update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 ENV LANG=en_US.UTF-8 RUN apt-get update && apt-get install -y --no-install-recommends curl lsb-release RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null && \ apt update && \ apt install -y ros-foxy-desktop && \ /bin/bash -c "source /opt/ros/foxy/setup.bash" RUN apt -y install ros-foxy-gazebo-ros-pkgs RUN apt-key adv --fetch-keys 'http://packages.osrfoundation.org/gazebo.key' && \ apt update && \ apt install -y python3-rosdep git RUN if [ ! -f "/etc/ros/rosdep/sources.list.d/20-default.list" ]; then \ rosdep init; \ fi RUN rosdep update RUN apt-get install -y python3-apt python3-pip python3-vcstool python3-testresources RUN pip3 install -U pytest setuptools colcon-ros-bundle RUN useradd --create-home robomaker && \ sh -c 'echo "robomaker ALL=(root) NOPASSWD:ALL" >> /etc/sudoers' RUN sh -c 'mkdir -p /home/robomaker/workspace' && \ sh -c 'cd /home/robomaker/workspace && wget https://github.com/aws-robotics/aws-robomaker-sample-application-helloworld/archive/ros2.zip && unzip ros2.zip'

Setelah Anda membuat Dockerfile, buat menggunakan perintah berikut di terminal Anda.

cd SampleGPUBaseApp docker build -t samplegpubaseapp:latest .

Membangun gambar dasar menginstal ROS 2 Foxy, Gazebo 11, NVIDIA OpenGL, dan NICE-DCV.

Membuat Gambar untuk Aplikasi Robot

Setelah Anda membuat gambar dasar, Anda dapat membuat gambar untuk aplikasi robot Anda. Simpan script berikut di Dockerfile diSampleGPURobotAppdirektori dan membangunnya. Skrip ini mengunduh aplikasi robot Hello World dan mengaturnya.

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM samplegpubaseapp: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" ]

Berikut ini adalah isi dari script yang Anda simpan sebagairobot-entrypoint.sh. Script ini sumber lingkungan untuk aplikasi robot.

#!/bin/bash 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 printenv exec "${@:1}"

Perintah berikut membuat gambar untuk aplikasi robot dari Dockerfile.

cd SampleGPURobotApp docker build -t samplegpurobotapp:latest .

Membuat Gambar untuk Aplikasi Simulasi

Membuat Gambar untuk Aplikasi Simulasi

Setelah Anda membuat gambar dasar dan gambar untuk aplikasi robot, Anda dapat membuat gambar untuk aplikasi simulasi Anda. Anda menyimpan script berikut dalam Dockerfile diSampleGPUSimulationAppdirektori dan kemudian membangunnya. Script ini mengunduh aplikasi simulasi Hello World dan mengaturnya.

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM samplegpubaseapp: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" ]

Berikut ini adalah isi dari script yang Anda simpan sebagaisimulation-entrypoint.sh. Script ini sumber lingkungan untuk aplikasi simulasi.

#!/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 if [ ! -z $tmp_GAZEBO_MASTER_URI ]; then export GAZEBO_MASTER_URI=$tmp_GAZEBO_MASTER_URI unset tmp_GAZEBO_MASTER_URI fi source ./install/setup.sh printenv exec "${@:1}"

Perintah berikut menciptakan gambar.

cd SampleGPUSimulationApp docker build -t samplegpusimulationapp:latest .

Menjalankan aplikasi dan mendorongnya ke Amazon ECR

Setelah Anda membuat gambar Anda, pastikan mereka berjalan dengan benar di lingkungan Linux lokal Anda. Setelah Anda memeriksa apakah gambar Anda berjalan, Anda dapat mendorong image Docker Anda ke Amazon ECR dan membuat pekerjaan simulasi.

Perintah berikut memberi Anda kemampuan untuk menjalankan aplikasi Hello World di lingkungan Linux lokal Anda.

docker run -it -e DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ --name gpu_robot_app \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ samplegpurobotapp:latest docker run -it -e DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ --name gpu_sim_app \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ samplegpusimulationapp:latest

Ketika Anda menjalankan aplikasi robot dan wadah aplikasi simulasi, Anda dapat memvisualisasikan simulasi menggunakan alat Gazebo GUI. Gunakan perintah berikut untuk:

  • Hubungkan ke wadah Anda yang menjalankan aplikasi simulasi.

  • Visualisasikan aplikasi Anda dengan menjalankan Gazebo Graphical User Interface (GUI).

# 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 gpu_sim_app bash # Launch Gazebo from within the container $ /home/robomaker/simulation-entrypoint.sh ros2 launch gazebo_ros gzclient.launch.py

Anda dapat menambahkan tag ke gambar Anda. Perintah berikut memberi Anda kemampuan untuk menandai gambar Anda.

docker tag samplegpurobotapp:latest accountID.dkr.ecr.us-west-2.amazonaws.com/samplegpurobotapp:latest docker tag samplegpusimulationapp:latest accountID.dkr.ecr.us-west-2.amazonaws.com/samplegpusimulationapp:latest

Setelah Anda memverifikasi bahwa aplikasi berfungsi dengan benar, Anda dapat mendorongnya ke Amazon ECR menggunakan perintah berikut.

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/samplegpurobotapp:latest docker push accountID.dkr.ecr.us-west-2.amazonaws.com/samplegpusimulationapp:latest

Anda sekarang dapat menjalankan pekerjaan simulasi dengan GPU Compute menggunakan gambar-gambar ini. Untuk informasi lebih lanjut tentang pekerjaan simulasi, lihatSimulasi denganAWS RoboMaker.