ROS2 Foxy와 Gazebo 11를 사용하여 GPU 샘플 애플리케이션 실행 - AWS RoboMaker

지원 종료 알림: 는 2025 AWS 년 9월 10일에 에 대한 지원을 중단합니다 AWS RoboMaker. 2025년 9월 10일 이후에는 AWS RoboMaker 콘솔 또는 AWS RoboMaker 리소스에 더 이상 액세스할 수 없습니다. 컨테이너화된 시뮬레이션 실행을 돕기 AWS Batch 위해 로 전환하는 방법에 대한 자세한 내용은 이 블로그 게시물을 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

ROS2 Foxy와 Gazebo 11를 사용하여 GPU 샘플 애플리케이션 실행

이 튜토리얼에서는 다음 예제에 설명된 세 개의 컨테이너 이미지를 사용하여 Hello World 로봇 애플리케이션과 시뮬레이션 애플리케이션을 만들고 실행함으로써 컨테이너 이미지 내에서 GPU 드라이버를 사용하여 ROS 2 Foxy 및 Gazebo 11로 개발하는 방법을 설명합니다.

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

각 Dockerfile에는 각 이미지를 빌드하는 데 필요한 지침이 있습니다.

  • 기본 이미지의 Dockerfile에는 ROS, Gazebo, GPU 드라이버를 설정하는 명령이 포함되어 있습니다.

  • 로봇 애플리케이션용 Dockerfile에는 Hello World 로봇 애플리케이션을 설정하는 명령이 포함되어 있습니다.

  • 시뮬레이션 애플리케이션용 Dockerfile에는 Hello World 시뮬레이션 애플리케이션을 설정하는 명령이 포함되어 있습니다.

로봇 애플리케이션과 시뮬레이션 애플리케이션 모두 엔트리 포인트 스크립트가 있습니다. 이 스크립트는 해당 애플리케이션의 환경을 소싱하고 로봇 및 시뮬레이션 애플리케이션을 시작하기 위한 명령을 실행할 경로를 설정합니다.

기본 GPU 이미지 생성

다음 Dockerfile에는 NVIDIA OpenGL에서 기본 이미지를 생성하고 DCV를 설치하는 명령이 포함되어 있습니다.

  • SampleGPUBaseApp 디렉터리의 Dockerfile에 다음 명령을 저장합니다.

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

Dockerfile을 생성한 후 터미널에서 다음 명령을 사용하여 빌드합니다.

cd SampleGPUBaseApp docker build -t samplegpubaseapp:latest .

기본 이미지를 빌드하려면 ROS 2 Foxy, Gazebo 11, NVIDIA OpenGL, NICE-DCV를 설치합니다.

로봇 애플리케이션용 이미지 생성

기본 이미지를 만든 후, 로봇 애플리케이션용 이미지를 만들 수 있습니다. 다음 스크립트를 SampleGPURobotApp 디렉터리의 Dockerfile에 저장하고 빌드합니다. 이 스크립트는 Hello World 로봇 애플리케이션을 다운로드하고 설정합니다.

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

robot-entrypoint.sh로 저장한 스크립트의 콘텐츠는 다음과 같습니다. 이 스크립트는 로봇 애플리케이션에 대한 환경을 소싱합니다.

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

다음 명령은 Dockerfile에서 로봇 애플리케이션용 이미지를 생성합니다.

cd SampleGPURobotApp docker build -t samplegpurobotapp:latest .

시뮬레이션 애플리케이션에 대한 이미지 생성

시뮬레이션 애플리케이션에 대한 이미지 생성

기본 이미지와 로봇 애플리케이션의 이미지를 만든 후 시뮬레이션 애플리케이션용 이미지를 만들 수 있습니다. 다음 스크립트를 SampleGPUSimulationApp 디렉터리의 Dockerfile에 저장하고 빌드합니다. 이 스크립트는 Hello World 시뮬레이션 애플리케이션을 다운로드하고 설정합니다.

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

simulation-entrypoint.sh로 저장한 스크립트의 콘텐츠는 다음과 같습니다. 이 스크립트는 시뮬레이션 애플리케이션의 환경을 소싱합니다.

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

다음 명령은 이미지를 생성합니다.

cd SampleGPUSimulationApp docker build -t samplegpusimulationapp:latest .

애플리케이션을 실행하고 Amazon ECR로 푸시하기

이미지를 생성한 후에는 로컬 Linux 환경에서 제대로 실행되는지 확인하세요. 이미지가 실행되는지 확인한 후, 도커 이미지를 Amazon ECR로 푸시하고 시뮬레이션 작업을 생성할 수 있습니다.

다음 명령을 사용하면 로컬 Linux 환경에서 Hello World 애플리케이션을 실행할 수 있습니다.

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

로봇 애플리케이션과 시뮬레이션 애플리케이션 컨테이너를 실행하면 Gazebo GUI 도구를 사용하여 시뮬레이션을 시각화할 수 있습니다. 다음 명령을 사용하십시오.

  • 시뮬레이션 애플리케이션을 실행하는 컨테이너에 연결합니다.

  • Gazebo 그래픽 사용자 인터페이스(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

이미지에 태그를 추가할 수 있습니다. 다음 명령을 사용하면 이미지에 태그를 지정할 수 있습니다.

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

애플리케이션이 제대로 작동하는지 확인한 후 다음 명령을 사용하여 Amazon ECR로 푸시할 수 있습니다.

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

이제 이러한 이미지를 사용하여 GPU 컴퓨팅으로 시뮬레이션 작업을 실행할 수 있습니다. 시뮬레이션 작업에 대한 자세한 내용은 AWS RoboMaker를 이용한 시뮬레이션 섹션을 참조하십시오.