rosdep를 사용하여 종속성 관리

목표: rosdep 를 사용하여 외부 종속성을 관리합니다.

이 튜토리얼에서는 rosdep 를 사용하여 외부 종속성을 관리하는 방법을 설명합니다.

Warning

현재로서 rosdep 는 Linux 및 macOS에서만 작동하며, Windows는 지원되지 않습니다. Windows 지원 계획은 https://github.com/ros-infrastructure/rosdep 에 추가 예정입니다.

rosdep가 무엇인가요?

rosdep 는 패키지 및 외부 라이브러리와 함께 작동할 수 있는 종속성 관리 유틸리티입니다. 패키지 또는 소프트웨어를 빌드하거나 설치하기 위한 종속성을 식별하고 설치하기 위한 명령 줄 도구입니다. rosdep 는 스스로 독자적인 패키지 관리자가 아니며, 시스템 및 종속성에 대한 자체 지식을 사용하여 특정 플랫폼에 설치할 적절한 패키지를 찾는 메타 패키지 관리자입니다. 실제 설치는 시스템 패키지 관리자 (예: Debian/Ubuntu의 apt, Fedora/RHEL의 dnf 등)를 사용하여 수행됩니다.

일반적으로 작업 영역을 빌드하기 전에 주로 호출되며 해당 작업 영역 내의 패키지의 종속성을 설치하는 데 사용됩니다.

하나의 패키지 또는 패키지 디렉토리 (예: 작업 영역)에서 작동할 수 있는 능력을 가지고 있습니다.

Note

이름에서 알 수 있듯이 rosdep 는 ROS에 특화되어 있는 것이 아니며 ROS 이외의 소프트웨어 프로젝트에서도 독립적인 Python 패키지로 설치하여 사용할 수 있습니다. rosdep 를 성공적으로 실행하려면 몇 가지 간단한 명령으로 공개 Git 저장소에서 다운로드할 수 있는 rosdep keys 가 사용 가능해야 합니다.

package.xml 파일에 대한 간략한 설명

package.xmlrosdep 가 종속성 집합을 찾는 소프트웨어 내에서 사용하는 파일입니다. package.xml 의 종속성 목록이 완전하고 정확한지 확인하는 것이 중요하며, 이렇게 함으로써 모든 도구가 패키지의 종속성을 결정할 수 있습니다. 누락 또는 잘못된 종속성은 사용자가 패키지를 사용하지 못하게 할 수 있고, 작업 영역 내의 패키지가 순서 없이 빌드되게 할 수 있으며, 패키지를 릴리스할 수 없게 할 수 있습니다.

package.xml 파일의 종속성은 일반적으로 rosdep keys 라고 합니다. 이러한 종속성은 패키지를 만든 사람들에 의해 package.xml 파일에 수동으로 추가되어야 하며, 패키지가 필요로 하는 내장 라이브러리 및 패키지의 철저한 목록이어야 합니다.

이러한 종속성은 다음 태그로 표시됩니다 (자세한 내용은 REP-149 참조):

<depend>

이것은 패키지의 빌드 시간 및 실행 시간에 모두 제공되어야 하는 종속성입니다. 의심스러운 경우 C++ 패키지의 경우 이 태그를 사용하세요. 순수한 Python 패키지는 일반적으로 빌드 단계가 없으므로 이 태그 대신에 <exec_depend> 를 사용해야 합니다.

<build_depend>

특정 종속성을 패키지 빌드에만 사용하고 실행 시간에는 사용하지 않는 경우 <build_depend> 태그를 사용할 수 있습니다.

이러한 유형의 종속성의 경우 패키지의 설치된 이진 파일은 해당 패키지가 설치되어 있지 않아도 됩니다.

그러나 패키지가 이 종속성에서 헤더를 내보내는 경우 문제가 발생할 수 있습니다. 이 경우 <build_export_depend> 도 필요합니다.

<build_export_depend>

만약 종속성에서 헤더를 내보내고 이 종속성에 의존하는 다른 패키지에서 필요한 경우 패키지가 필요합니다. 주로 헤더 및 CMake 구성 파일에 적용됩니다. 내보낸 라이브러리에 대한 라이브러리 패키지는 일반적으로 실행 시간에도 필요하기 때문에 <depend> 를 지정해야 합니다.

<exec_depend>

이 태그는 패키지를 실행할 때 필요한 공유 라이브러리, 실행 파일, Python 모듈, 실행 스크립트 및 기타 파일에 대한 종속성을 선언합니다.

<test_depend>

이 태그는 테스트에만 필요한 종속성을 선언합니다. 여기에 있는 종속성은 <build_depend>, <exec_depend>, 또는 <depend> 으로 지정된 키와 중복되어서는 안됩니다.

rosdep가 어떻게 작동하나요?

rosdep 는 경로 내 또는 특정 패키지의 package.xml 파일을 확인하고 저장된 rosdep keys 를 찾습니다. 그런 다음 이러한 키는 중앙 인덱스에서 해당 ROS 패키지 또는 소프트웨어 라이브러리를 다양한 패키지 관리자에서 찾기 위해 교차 참조됩니다. 마지막으로 패키지가 찾아지면 설치되어 사용할 준비가 됩니다!

rosdep 는 로컬 머신에 중앙 인덱스를 검색하여 실행될 때마다 네트워크에 액세스하지 않도록 작동합니다 (Debian/Ubuntu의 경우 이에 대한 구성은 /etc/ros/rosdep/sources.list.d/20-default.list 에 저장됩니다).

중앙 인덱스는 rosdistro 로 알려져 있으며 온라인에서 찾을 수 있습니다. 다음 섹션에서 자세히 살펴보겠습니다.

내 package.xml에 어떤 키를 넣어야 하는지 어떻게 알 수 있나요?

좋은 질문이며, 다행히도 물어보셔서 기쁩니다!

  • 패키지에서 package.xml에 종속되는 패키지를 ROS 기반인 경우 ROS 생태계 1 에 릴리스된 경우, 예를 들어 nav2_bt_navigator 와 같은 경우, 패키지의 이름을 사용할 수 있습니다.

  • 특정 ROS 배포판에 대한 모든 릴리스된 ROS 패키지 목록을 찾을 수 있습니다. 예를 들어, 주어진 ROS 배포판에 대한 https://github.com/ros/rosdistro/의 <distro>/distribution.yaml (예: humble/distribution.yaml)에서 확인할 수 있습니다.

  • 패키지에서 패키지가 아닌 ROS 패키지, 일반적으로 “시스템 종속성”이라고 하는 것에 종속되기를 원하는 경우 특정 라이브러리의 키를 찾아야 합니다. 일반적으로 다음 두 가지 파일이 있습니다:

키를 찾으려면 이러한 파일에서 라이브러리를 검색하고 이름을 찾으세요. 이것이 package.xml 파일에 넣을 키입니다.

예를 들어, 패키지가 훌륭한 문서화에 중요성을 부여하기 때문에 doxygen 에 종속성이 있는 경우를 상상해보십시오 (힌트 힌트). 우리는 rosdep/base.yaml 에서 doxygen 을 검색하고 다음과 같이 찾을 수 있습니다.

doxygen:
  arch: [doxygen]
  debian: [doxygen]
  fedora: [doxygen]
  freebsd: [doxygen]
  gentoo: [app-doc/doxygen]
  macports: [doxygen]
  nixos: [doxygen]
  openembedded: [doxygen@meta-oe]
  opensuse: [doxygen]
  rhel: [doxygen]
  ubuntu: [doxygen]

즉, 우리의 rosdep 키는 doxygen 이며, 이는 다른 운영 체제 패키지 관리자에서 다른 이름으로 해석될 것입니다.

만약 내 라이브러리가 rosdistro에 없다면 어떻게 해야 하나요?

rosdistro 에 라이브러리가 없다면 오픈 소스 소프트웨어 개발의 위대함을 경험할 수 있습니다. 직접 추가할 수 있습니다! rosdistro에 대한 풀 리퀘스트는 일반적으로 일주일 이내에 병합됩니다.

새로운 rosdep 키를 기여하는 방법에 대한 자세한 지침은 여기 에서 찾을 수 있습니다. 어떤 이유로든 이러한 기여가 공개적으로 기여되지 않을 경우 rosdistro를 포크하고 사용을 위한 대체 인덱스를 유지할 수 있습니다.

rosdep 도구를 어떻게 사용하나요?

rosdep 설치

ROS와 함께 rosdep 를 사용하는 경우 ROS 배포와 함께 편리하게 제공됩니다. 이것이 rosdep 를 얻는 권장 방법입니다. 다음 명령을 사용하여 설치할 수 있습니다.

apt-get install python3-rosdep

Note

Debian 및 Ubuntu에서는 python3-rosdep2 라는 비슷한 이름의 패키지가 있습니다. 해당 패키지가 설치된 경우 python3-rosdep 를 설치하기 전에 제거해야 합니다.

ROS 이외의 환경에서 rosdep 를 사용하는 경우 시스템 패키지를 사용할 수 없을 수 있습니다. 이 경우 https://pypi.org/에서 직접 설치할 수 있습니다.

pip install rosdep

rosdep 작동

이제 rosdep, package.xml, 및 rosdistro 에 대한 몇 가지 이해를 얻었으므로 도구 자체를 사용할 준비가 되었습니다! 첫 번째로, rosdep 를 처음 사용하는 경우 다음과 같이 초기화해야 합니다.

sudo rosdep init
rosdep update

이렇게 하면 rosdep가 초기화되며 update 는 로컬 캐시된 rosdistro 인덱스를 업데이트합니다. 가끔 update 를 실행하여 최신 인덱스를 얻는 것이 좋습니다.

마지막으로 rosdep install 을 실행하여 종속성을 설치할 수 있습니다. 일반적으로 이 명령은 모든 종속성을 설치하려는 작업 영역을 한 번에 많은 패키지와 함께 호출하여 모든 종속성을 설치합니다. 작업 영역의 루트 디렉토리에서 소스 코드를 포함하는 src 디렉토리가 있다고 가정하면 다음과 같이 나타납니다.

rosdep install --from-paths src -y --ignore-src

위 명령을 분석해보겠습니다:

  • --from-paths src 는 키를 해결하기 위한 package.xml 파일을 확인할 경로를 지정합니다.

  • -y 는 패키지 관리자에서 수락하지 않고 프롬프트 없이 설치하기 위해 모든 프롬프트에 대한 기본값이 임을 의미합니다.

  • --ignore-src 는 rosdep 키가 존재하더라도 작업 영역 자체에 패키지가 포함되어 있으면 종속성을 설치하지 않도록 지정합니다.

추가 인수 및 옵션이 있습니다. 더 자세한 내용은 rosdep -h 를 사용하거나 http://docs.ros.org/en/independent/api/rosdep/html/ 의 rosdep에 대한 보다 완벽한 문서를 참조하세요.

1(1,2)

“ROS 생태계에 릴리스”는 패키지가 ROS 생태계 1 내의 하나 이상의 <distro>/distribution.yaml 디렉토리에 나열되어 있음을 의미합니다. rosdistro 데이터베이스 에서 확인할 수 있습니다.