ROS 2

ROS 2 Tutorials : Creating a workspace

정지홍 2025. 1. 13. 16:31

Creating a workspace — ROS 2 Documentation: Jazzy documentation

 

Creating a workspace — ROS 2 Documentation: Jazzy documentation

Before sourcing the overlay, it is very important that you open a new terminal, separate from the one where you built the workspace. Sourcing an overlay in the same terminal where you built, or likewise building where an overlay is sourced, may create comp

docs.ros.org

 

Goal

  • workspace를 생성하고 개발과 테스팅을 위해서 어떻게 overlay를 세팅할지 배울것이다.

 

background

  • workspace는 ROS 2 packages를 포함하고 있는 directory이다.
  • ROS 2를 사용하기 전에, 터미널의 ROS 2 workspace에 소싱하는 것이 필수적이다.
    • 소싱이란 특정 환경을 설정하는 과정을 의미. 
    • 그래야 ROS 2의 packages가 나의 터미널에서 사용하는 것이 가능하다.
  • 또한 overlay를 소싱하는 옵션도 존재한다. overlay는 기존의 ROS 2 workspace(즉, 언더레이)를 확장할 수 있는 2번째 workspace이다.
    • overlay는 새로운 packages를 추가할 수 있으나, 기존의 ROS 2 workspace에는 영향을 주지 않는다. 
      overlay에 있는 패키지는 underlay의 패키지를 덮어쓰며, 여러개의 underlay와 overlay를 사용할  수 있다.
      • 이러한 경우에는 각각의 overlay는 부모 underlay의 패키지를 사용할 수 있다.

 

Task

  • 1. 이번 튜토리얼에서는 ROS 2 installation이 주로 underlay로 사용될 것이다.
source /opt/ros/jazzy/setup.bash

 

  • 2. create a new directory
    • 매번 새로운 workspace를 만드는 것은 좋은 습관이다.
      • 이름은 문제가 없다. 하지만 어떠한 workspace는 알수있게 하는 것이 좋을 것이다.
    • 또 다른 좋은 습관은 모든 packages를 src directory에 넣는것이 좋다.
  • 3. clone a sample repo
    • 우선 패키지를 clone하기 전에 현재 위치가 ros2_ws/src인지 확인하자.
      • 추후의 튜토리얼에서는 나만의 패키지를 만들겠지만, 지금은 기존의 패키지를 사용해서 워크스페이스를 구성하자.
      • 다음의 명령어로 clone을 수행하자. 그러면 workspace에 ros_tutorials가 clone되어 있을 것이며, 여기에는 튜토리얼에서 사용할 turtlesim package가 존재한다. 
        • 현재의 workspace에는 샘플 package를 추가하였으니 완전한 상태가 아니다.
          • 그래서 이제 의존성 문제를 해결하고 workspace를 빌드해야한다.
git clone https://github.com/ros/ros_tutorials.git -b jazzy

  • 4. 의존성 해결
    • workspace를 빌드하기전에 package의 의존성을 해결해야한다. 이미 모든 의존성이 있을수 있으나, clone할때 마다 의존성을 확인하는 것이 좋다.
      • 그래야 빌드가 진행된 후에 의존성이 누락된 것을  알고 빌드에 실패하는 것을 피할 수 있다.
      • workspace의 root directory에서 아래의 명령어를 입력하자.
        • package는 package.xml 파일에 의존성을 선언한다. rosdep명령어는 이 선언을 확인하고 누락된 의존성 package를 설치한다. resdep에 대해서는 추후의 다른 튜토리얼에서 자세히 설명할 것임.
cd ..
rosdep install -i --from-path src --rosdistro jazzy -y

의존성이 준비되었다면 위와 같이 출력될 것이다.

  • 5. colcon을 가지고 workspace를 빌드하자.
colcon build

마지막에는 이와 같이 출력될것이다.
install directory는 workspace의 설정 파일들이 위치한 곳으로, 이 파일들로 overlay를 소싱할 수 있다.

  • 6. overlay 환경 설정
    • overlay를 소싱하기 전에, workspace를 빌드한 terminal과는 별개로 새로운 터미널을 여는것은 중요하다.
    • overlay를 빌드한 동일한 terninal에서 소싱하거나, overlay가 소싱된 상태에서 빌드하는 것은 복잡한 문제를 일으킬수있다.
    • 다음 명령어를 차례대로 입력하여, 새로운 터미널에서 ROS 2 환경을 underlay로 소싱해서, 그위에 overlay를 올릴수 있게 설정하자.
source /opt/ros/jazzy/setup.bash
cd ~/ros2_ws
source install/local_setup.bash

  • 7. overlay에서 turtlesim package를 실행하기
    • 하지만 저게 어떻게 main으로 설치된 turtlesim인지 overlay에서 running중인 turtlesim인지 알까?
      • overlay에서 package를 수정하고 별도로 다시 build하는 것이 가능하다.
      • overlay는 underlay보다 우선권을 가진다. 즉, overlay에서 수정한 내용이 underlay의 내용보다 먼저 적용됨.
        • 따라서 overlay에서 수정한 turtle을 실행하면, main의 turtlesim과 다른 것을 알 수 있다.
ros2 run turtlesim turtlesim_node
  • 8. overlay에서 수정해보자
    • 우선 overlay에서 turtlesim을 띄우자. ( 그림 1 ) 아직은 저렇게 출력될거임. 그리고 닫자.
    • 첫번째 터미널에서 다음과 같이 수정 ( 그림 2 ). 그리고 colcon build 명령어 입력
    • overlay가 소스된 터미널에서 다시 실행하면 윈도우 이름 변경되어있음 ( 그림 3 )
    • 그냥 새 창을 열어서 입력하면, 이름이 그대로임 ( 그림 4 )
    • ==> 여기서 볼 수  있는건 overlay를 수정하여도, underlay에게는 실질적으로 아무런 영향이 없다는 것이다.

그림 1
그림2
그림 3
그림 4

 

 

summary

  • 이번 튜토리얼에서는 underlay로 ROS 2의 기본 설치 경로를 소스하고, 새로운 workspace에서 package를 clone하고 빌드해서 overlay를 생성하였다.
  • overlay는 path 경로의 가장 앞부분에 추가된다. 따라서 overlay의 내용이 underlay보다 우선적으로 적용된다. 
    이를 통해서, 수정한 turtlesim이 underlay의 기본 turtlesim보다 우선적으로 실행되는 것을 확인했다.
  • overlay의 장점
    • 소규모의 package작업에 적합하다. 
    • 반복 작업시 빌드 시간을 줄일 수 있다.