작업공간 만들기

저작권: 쿼드(QUAD) 드론연구소 https://smartstore.naver.com/maponarooo

개요

작업 공간은 ROS2 패키지를 포함하는 디렉토리입니다. ROS2를 사용하기 전에 작업하려는 터미널에서 ROS2 작업 공간을 소싱해야 합니다. 이렇게 하면 해당 터미널에서 ROS2 패키지를 사용할 수 있습니다.

확장하려는 기존 ROS2 작업 공간 또는 "언더레이"를 방해하지 않고 새 패키지를 추가할 수 있는 보조 작업 공간인 "오버레이"를 소싱하는 옵션도 있습니다. 언더레이는 오버레이에 있는 모든 패키지의 종속성을 포함해야 합니다. 오버레이의 패키지는 언더레이의 패키지를 재정의합니다. 상위 언더레이의 패키지를 사용하는 각 연속 오버레이와 함께 여러 레이어의 언더레이 및 오버레이를 가질 수도 있습니다.

실습

1. ROS2 환경 소싱

기본 ROS 2 설치가 이 튜토리얼의 기반이 됩니다. (언더레이가 반드시 기본 ROS2 설치일 필요는 없음을 명심하십시오.)

(소스 또는 바이너리에서) ROS2를 설치한 방법과 사용 중인 플랫폼에 따라 정확한 소스 명령이 달라집니다.

source /opt/ros/humble/setup.bash

이러한 명령이 작동하지 않는 경우 따랐던 설치 가이드를 참조하십시오.

2. 새 디렉토리 생성

모범 사례는 모든 새 작업 공간에 대해 새 디렉터리를 만드는 것입니다. 이름은 중요하지 않지만 작업 공간의 용도를 나타내면 유용합니다.

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

또 다른 모범 사례는 작업 공간에 있는 모든 패키지를 src디렉토리에 넣는 것입니다. 위의 코드는 ros2_ws내부에 디렉토리를 생성한 다음 해당 src디렉토리로 이동합니다.

3. 샘플 리포지토리 복제

복제하기 전에 아직 ros2_ws/src 디렉토리에 있는지 확인하십시오 .

초보자 개발자 자습서의 나머지 부분에서는 고유한 패키지를 만들지만 지금은 기존 패키지를 사용하여 작업 공간을 함께 배치하는 연습을 하게 됩니다.

초보자: CLI 도구 자습서를 살펴본 경우 ros_tutorials 의 패키지 중 하나 인 turtlesim에 익숙할 것입니다 .

리포지토리에는 여러 분기가 있을 수 있습니다. 설치된 ROS 2 배포판을 대상으로 하는 것을 확인해야 합니다. 이 리포지토리를 복제할 때 -b 인수 뒤에 해당 분기를 추가합니다.

디렉터리 ros2_ws/src에서 다음 명령을 실행합니다.

git clone https://github.com/ros/ros_tutorials.git -b humble

이제 ros_tutorials작업 공간에 복제됩니다. ros_tutorials리포지토리 에는 이 자습서의 나머지 부분에서 사용할 turtlesim패키지가 포함되어 있습니다 . 이 저장소의 다른 패키지는COLCON_IGNORE 파일 을 포함하고 있기 때문에 빌드되지 않습니다.

지금까지 샘플 패키지로 작업공간을 채웠지만 아직 완전한 기능을 갖춘 작업공간은 아닙니다. 먼저 종속성을 해결한 다음 작업 영역을 빌드해야 합니다.

4. 종속성 해결

작업 영역을 빌드하기 전에 패키지 종속성을 해결해야 합니다. 모든 종속성이 이미 있을 수 있지만 모범 사례는 복제할 때마다 종속성을 확인하는 것입니다. 종속성이 누락되었음을 깨닫기 위해 오랜 시간을 기다린 후 빌드가 실패하는 것을 원하지 않을 것입니다.

작업공간(ros2_ws )의 루트에서 다음 명령을 실행하십시오.

cd ~/ros2_ws
rosdep install -i --from-path src --rosdistro humble -y

소스 또는 "fat" 아카이브에서 Linux에 ROS2를 설치한 경우 설치 지침에서 rosdep 명령을 사용해야 합니다. 다음은 원본 rosdep 섹션"fat" 아카이브 rosdep 섹션 입니다 .

이미 모든 종속성이 있는 경우 콘솔에서 다음을 반환합니다.

#All required rosdeps installed successfully

패키지는 package.xml 파일에서 종속성을 선언합니다(다음 자습서에서 패키지에 대해 자세히 알아볼 것입니다). 이 명령은 해당 선언을 살펴보고 누락된 선언을 설치합니다. rosdep는다른 튜토리얼(출시 예정)에서 자세히 알아볼 수 있습니다 .

rosdep

rosdep은 ROS2 작업공간 안의 소스에 빌드에 필요한 종속성을 자동으로 설치하는 유용한 툴 입니다.

최초 실행시 다음과 같이 초기와 작업을 수행해 주어야 합니다.

sudo rosdep init
rosdep update --include-eol-distros

5. colcon 으로 작업공간 구축

이제 작업 공간의 루트( ros2_ws)에서 다음 명령을 사용하여 패키지를 빌드할 수 있습니다.

colcon build

콘솔은 다음 메시지를 반환합니다.

Starting >>> turtlesim
Finished <<< turtlesim [5.49s]

Summary: 1 package finished [5.58s]

메모

colcon build다음에 대한 기타 유용한 인수 :

  • --packages-up-to원하는 패키지와 모든 종속성을 빌드하지만 전체 작업 공간은 빌드하지 않음(시간 절약)

  • --symlink-install파이썬 스크립트를 조정할 때마다 다시 빌드하지 않아도 됩니다.

  • --event-handlers console_direct+빌드하는 동안 콘솔 출력을 보여줍니다(그렇지 않으면 디렉토리에서 찾을 수 있음 log).

빌드가 완료되면 ls를작업 공간 루트( ~/ros2_ws)에서 입력하면 colcon이 새 디렉토리를 생성한 것을 볼 수 있습니다.

build  install  log  src

install디렉토리는 오버레이를 소싱하는 데 사용할 수 있는 작업 공간의 설정 파일이 있는 곳입니다.

6. 오버레이 소싱

오버레이를 소싱하기 전에 작업 공간을 구축한 터미널과 별도로 새 터미널을 여는 것이 매우 중요합니다. 빌드한 동일한 터미널에서 오버레이를 소싱하거나 마찬가지로 오버레이가 소싱된 위치에서 빌드하면 복잡한 문제가 발생할 수 있습니다.

새 터미널에서 기본 ROS2 환경을 "언더레이"로 소싱하여 "위에" 오버레이를 구축할 수 있습니다.

source /opt/ros/humble/setup.bash

작업 공간의 루트로 이동합니다.

cd ~/ros2_ws

루트에서 오버레이를 소싱합니다.

source install/local_setup.bash

그러나 이것이 메인 설치의 turtlesim이 아니라 오버레이 turtlesim이 실행되고 있다는 것을 어떻게 알 수 있습니까?

효과를 볼 수 있도록 오버레이에서 turtlesim을 수정해 보겠습니다.

  • 언더레이와 별도로 오버레이에서 패키지를 수정하고 다시 빌드할 수 있습니다.

  • 오버레이는 언더레이보다 우선합니다.

7. 오버레이 수정

Turtlesim 창의 제목 표시줄을 편집하여 오버레이에서 turtlesim을수정할 수 있습니다 . 이렇게 하려면~/ros2_ws/src/ros_tutorials/turtlesim/src 에서 turtle_frame.cpp파일을 찾습니다 . 선호하는 텍스트 편집기로 turtle_frame.cpp 파일을엽니다 .

52행에서 setWindowTitle("TurtleSim");함수를 볼 수 있습니다 . "TurtleSim"값을 "MyTurtleSim"로 변경 하고 파일을 저장합니다.

이전에 실행한 첫 번째 터미널로 돌아가서 colcon build다시 실행합니다.

두 번째 터미널(오버레이 소스)로 돌아가서 turtlesim을 다시 실행합니다.

ros2 run turtlesim turtlesim_node

이제 Turtlesim 창의 제목 표시줄에 "MyTurtleSim"이 표시됩니다.

기본 ROS2 환경이 이전에 이 터미널에서 소싱되었지만 ros2_ws환경의 오버레이가 언더레이의 내용보다 우선합니다.

언더레이가 여전히 손상되지 않았는지 확인하려면 새 터미널을 열고 ROS 2 설치만 소싱하십시오. Turtlesim을 다시 실행하십시오

ros2 run turtlesim turtlesim_node

오버레이의 수정 사항이 실제로 언더레이의 어떤 항목에도 영향을 미치지 않았음을 확인할 수 있습니다.

Last updated

Was this helpful?