ROS Melodic과 Gazebo 9를 사용하여 샘플 애플리케이션 실행 - AWS RoboMaker

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

ROS Melodic과 Gazebo 9를 사용하여 샘플 애플리케이션 실행

다음 튜토리얼에서는 Hello World 로봇 애플리케이션 및 시뮬레이션 애플리케이션을 만들고 실행하여 컨테이너 이미지를 사용해 ROS 및 Gazebo 9로 개발하는 방법을 보여줍니다. 이 문서에 설명된 명령을 실행하여 샘플 애플리케이션이 작동하도록 할 수 있습니다.

이 튜토리얼에서는 세 개의 컨테이너 이미지를 만들고 사용합니다. 다음은 이 예제 애플리케이션에 사용하는 디렉터리 구조를 보여줍니다.

├── HelloWorldSampleAppROSMelodicGazebo9 // Base Image │ └── Dockerfile ├── HelloWorldSampleAppROSMelodicGazebo9RobotApp // Image for Robot App │ ├── Dockerfile │ └── robot-entrypoint.sh ├── HelloWorldSampleAppROSMelodicGazebo9SimApp // Image for Simulation App │ ├── Dockerfile │ └── simulation-entrypoint.sh

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

  • 기본 이미지의 Dockerfile에는 ROS 및 Gazebo를 설정하는 명령이 있습니다.

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

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

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

기본 이미지 생성

기본 이미지를 생성하려면 예제의 명령을 저장하여 Dockerfile에 환경을 생성합니다. 그런 다음 Dockerfile을 빌드합니다.

  1. 다음 명령을 Dockerfile에 저장합니다.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM ros:melodic ENV DEBIAN_FRONTEND noninteractive RUN apt-get clean RUN apt-get update && apt-get install -y \ lsb \ unzip \ wget \ curl \ sudo \ python-vcstool \ python-rosinstall \ python3-colcon-common-extensions \ ros-melodic-rviz \ ros-melodic-rqt \ ros-melodic-rqt-common-plugins \ devilspie \ xfce4-terminal \ ros-melodic-gazebo-ros-pkgs \ ros-melodic-gazebo-ros-control \ ros-melodic-turtlebot3 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/ros1.zip && unzip ros1.zip' RUN sh -c 'cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros1' RUN sudo rosdep fix-permissions RUN rosdep update
  2. Dockerfile을 생성한 후 터미널에서 다음 명령을 사용하여 빌드합니다.

    cd ../HelloWorldSampleAppROSMelodicGazebo9 docker build -t helloworldsampleapprosmelodicgazebo9:latest .

기본 이미지를 빌드하면 ROS Melodic과 Gazebo 9가 설치됩니다. 애플리케이션을 성공적으로 실행하려면 두 라이브러리를 모두 설치해야 합니다.

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

기본 이미지를 만든 후 로봇 애플리케이션용 이미지를 만듭니다.

  1. 다음 스크립트를 Dockerfile에 저장하고 빌드합니다. 이 스크립트는 Hello World 로봇 애플리케이션을 다운로드하고 설정합니다.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM helloworldsampleapprosmelodicgazebo9:latest # Build the Robot application RUN cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros1/robot_ws && \ /bin/bash -c "source /opt/ros/melodic/setup.bash && vcs import < .rosinstall && rosdep install --rosdistro melodic --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 roslaunch hello_world_robot rotate.launch ENTRYPOINT [ "/home/robomaker/robot-entrypoint.sh" ]
  2. 다음 명령을 사용하여 Dockerfile에서 로봇 애플리케이션용 이미지를 생성합니다.

    cd HelloWorldSampleAppROSMelodicGazebo9RobotApp/HelloWorldSampleAppROSMelodicGazebo9RobotApp docker build -t helloworldsampleapprosmelodicgazebo9robotapp:latest image/.
  3. 다음은 robot-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-ros1/robot_ws source /opt/ros/melodic/setup.bash source /usr/share/gazebo-9/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}"

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

기본 이미지와 로봇 애플리케이션의 이미지를 만든 후 시뮬레이션 애플리케이션용 이미지를 만들 수 있습니다.

  1. 다음 스크립트를 Dockerfile에 저장하고 빌드합니다. 이 스크립트는 Hello World 로봇 애플리케이션을 다운로드하고 설정합니다.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 FROM helloworldsampleapprosmelodicgazebo9:latest # Build the Simulation application RUN cd /home/robomaker/workspace/aws-robomaker-sample-application-helloworld-ros1/simulation_ws && \ /bin/bash -c "source /opt/ros/melodic/setup.bash && vcs import < .rosinstall && rosdep install --rosdistro melodic --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 roslaunch hello_world_simulation empty_world.launch ENTRYPOINT [ "/home/robomaker/simulation-entrypoint.sh" ]
  2. 다음 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-ros1/simulation_ws source /opt/ros/melodic/setup.bash source /usr/share/gazebo-9/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}"

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

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

  1. 다음 명령을 사용하여 로컬 Linux 환경에서 Hello World 애플리케이션을 실행합니다.

    docker run -it -e DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ helloworldsampleapprosmelodicgazebo9robotapp:latest
    docker run -it -e DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ \ -u robomaker -e ROBOMAKER_GAZEBO_MASTER_URI=http://localhost:5555 \ -e ROBOMAKER_ROS_MASTER_URI=http://localhost:11311 \ helloworldsampleapprosmelodicgazebo9simapp:latest
  2. 로봇 애플리케이션과 시뮬레이션 애플리케이션 컨테이너를 실행하여 Gazebo GUI 도구를 사용하여 시뮬레이션을 시각화합니다. 다음 명령을 사용하십시오.

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

    2. 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 sim_app bash # Launch Gazebo from within the container $ rosrun gazebo_ros gzclient
  3. 이미지에 태그를 추가하여 정리된 상태를 유지할 수 있습니다. 다음 명령을 사용하여 이미지에 태그를 지정합니다.

    docker tag helloworldsampleapprosmelodicgazebo9robotapp:latest accountID.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleapprosmelodicgazebo9robotapp:latest
    docker tag helloworldsampleapprosmelodicgazebo9simapp:latest accountID.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleapprosmelodicgazebo9simapp:latest
  4. 애플리케이션이 제대로 작동하는지 확인한 후 다음 명령을 사용하여 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/helloworldsampleapprosmelodicgazebo9robotapp:latest docker push accountID.dkr.ecr.us-west-2.amazonaws.com/helloworldsampleapprosmelodicgazebo9simapp:latest

그런 다음 이미지에서 시뮬레이션 작업을 실행할 수 있습니다. 시뮬레이션 작업에 대한 자세한 내용은 AWS RoboMaker를 이용한 시뮬레이션 섹션을 참조하십시오.