티스토리 뷰

은가

ROS:: rosdep, wstool 명령어의 역할과 package 의존성

알 수 없는 사용자 2023. 6. 15. 10:11

rosdep, 무엇일까?

여느 때처럼 Docker 위에 ROS Melodic을 설치하고 있었습니다. 

 

ROS 공식문서(바로가기)에 있는 설치 과정을 따라가다가, 문득 rosdep 명령어에 대한 궁금증이 있었는데도 불구하고 매번 그냥 지나친게 찜찜해졌습니다. 그래서 rosdep에 대해 정리 해 보았습니다.

 

처음으로 1.6 Dependencies for building packages 부분을 자세히 읽어 보았습니다.

 

요약하자면 이렇습니다. 우리는 ROS 안에서 하나의 패키지만을 사용하지 않습니다. 여러 개의 패키지들은 각각 독립적일 수도 있지만, prerequisite 패키지가 target 패키지에 영향을 주는 등 서로 "의존성"을 가질 수도 있습니다. 그리고, 필요한 prerequiste 패키지는 경우에 따라 하나일 수도, 여러 개 일 수도 있습니다. 만약 의존성에 의해 설치되어야 하는 prerequisite 패키지가 여러개라면, 매번 git clone 또는 다른 방법으로 설치를 해 주는게 여간 귀찮은 일이 아닙니다. `rosdep`, `wstool`, `rosinstall` 등의 명령어들이 이러한 경우에 빛을 발합니다. 간혹 유명한 github에서 소스 코드를 clone하여 build 해볼 때 때, installation 과정에서 `.rosinstall` 이라는 확장자의 파일을 이용해 보신 적이 있을 것 입니다. 이 파일 안에는 수많은 github 링크가 담져겨 있습니다. 따라서 이 파일을 한 번만 이용하더라도 수많은 의존성 패키지를 설치할 수 있게 됩니다. 한마디로, 의존성 패키지들을 설치하고 관리하는 `rosdep`, `wstool`, `rosinstall` 같은 명령어들을 ROS 설치 시 미리 깔아 두면 좋습니다.

 

아래는 공식 문서의 1.6 section에 나와 있는 설치 command를 발췌한 부분입니다.

sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

 


Initialization, 왜 해야 하는거지?

설치가 되었다면 이제 처음으로 해주어야 하는 것은, 바로 initialization입니다. (ROS 공식 문서에는 `rosdep` 명령어를 초기화 해 주는 방법만 소개가 되어 있으나, 사실 `wstool` 명령어 또한 초기화 해 줄 필요가 있습니다.) 그렇다면 rosdep 초기화는 왜 해주어야 하는 걸까요? 도움을 얻기 위해, rosdep 에 대한 설명이 되어 있는 ROS 공식 문서(바로가기)를 참고하였습니다. 

 

알 수 있는 정보는 아래와 같았습니다. 

 

1. `sudo rosdep init`은 update시 최소 한 번 실행되어야 한다.

이 명령어가 수행하는 역할은 명료합니다. `/etc/ros/rosdep/sorces.list.d` 폴더 내부에 `20-default.list`라는 소스 리스트를 생성합니다. 이후에 사용될 rosdep 명령어는 이 소스 리스트 내부에 적혀 있는 웹 링크를 읽음으로써 데이터를 불러 옵니다. 파일 내부를 살펴보면 아래와 같습니다. yaml 명령어를 이용하여 여러 개의 url에 접근하고 있습니다. ROS를 맨 처음 설치했을 때에는 local에서 아직 rosdep에 대한 (어디에서 데이터를 불러올지) 정의 조차 되어 있지 않기 때문에, `sudo rosdep init` 명령어를 통해 이 파일을 반드시 생성해 주어야 합니다. 

20-default.list 파일 내부

 

2. `rosdep update`는 sudo 명령어와 함께 실행되면 안된다.

다음으로 실행할 명령어인 `rosdep update`는 위에서 생성한 소스 리스트를 실제적으로 사용하여, rosdep 데이터베이스를 업데이트 합니다. 아래와 같이, 소스 리스트에 있던 url들을 Hit 한다는 결과가 출력됩니다. 주의할 점은, sudo 명령어와 함께 실행될 경우, 나중에 permission error를 초래할 수도 있다고 하는데 왜 그런지는 나중에 따로 다루어 보도록 하겠습니다.

`rosdep update` 커맨드 실행 결과


wstool, 무엇일까?

추가적으로, `wstool` 명령어를 이용할 때도 비슷한 과정을 거쳐야 합니다.

 

ntnu-arl 에서 개발된 gbplanner2(바로가기)를 다운받아 돌려 보려고 시도했습니다. 

 

gbplanner2의 경우, ntnu-arl에서 개발해 둔 패키지들의 의존성이 매우 높습니다. 따라서 github installation 문서를 살펴보면 "Clone and update the required packages:" 라는 스텝에서 `wstool` 명령어를 사용하여 `.rosinstall` 파일로 의존 패키지들을 설치하는 것을 볼 수 있습니다. wstool을 사용하는 방법은 아래와 같습니다. 공식 문서(바로가기)를 참조했습니다.

 

1. `cd ~/catkin_ws`

워크스페이스 내부로 이동합니다.

 

2. `wstool init src`

이 명령어는 비어있는 워크스페이스의 src 폴더를 초기화 하여 rosinstall 파일을 생성합니다.

(만약 src 파일 내부에 base로 삼을 rosinstall 파일이 이미 있는 상태라면, 이 스텝은 건너뛴 상태로 3번 스텝으로 이동합니다.)

 

3. `wstool init src [path/to/target_rosinstall_file.rosinstall]`

만약 2번 스텝을 수행했다면, 이 스텝은 건너뛰어도 좋습니다. 이 명령어는 src 파일 내부에 base로 삼을 rosinstall 파일 위에, target rosinstall 파일을 병합하여 초기화 하는 역할을 합니다.

 

3. `wstool merge -t src [path/to/target_rosinstall_file.rosinstall]`

이 명령어는 추가로 rosinstall 파일을 병합하는 역할을 합니다. src 폴더 내부에 이미 존재하는 rosinstall 파일 위에, target rosinstall 파일을 가져와 덮어씌웁니다. `wstool update`를 진행하기 전, 최종적으로 update에 사용할 rosinstall 파일을 수정하는 역할을 합니다.

 

4. `wstool update -t src` 

이 명령어는 가장 최근 버전인 rosinstall 파일을 이용하여 패키지들을 다운로드 하는 역할을 합니다.

 

 


참조 링크

- ROS melodic installation 공식 document : http://wiki.ros.org/melodic/Installation/Ubuntu

 

melodic/Installation/Ubuntu - ROS Wiki

We are building Debian packages for several Ubuntu platforms, listed below. These packages are more efficient than source-based builds and are our preferred installation method for Ubuntu. Note that there are also packages available from Ubuntu upstream. P

wiki.ros.org

- ROS rosdep document : http://wiki.ros.org/rosdep

 

rosdep - ROS Wiki

rosdep is a command-line tool for installing system dependencies. New documentation As of ROS fuerte, rosdep is now a stand-alone tool that you can download and use separately: External rosdep documentation. Quick reference Installing rosdep Do prefer apt

wiki.ros.org

- ntnu-arl gbplanner_ros : https://github.com/ntnu-arl/gbplanner_ros

 

GitHub - ntnu-arl/gbplanner_ros: Graph-based Exploration Planner for Subterranean Environments

Graph-based Exploration Planner for Subterranean Environments - GitHub - ntnu-arl/gbplanner_ros: Graph-based Exploration Planner for Subterranean Environments

github.com

- ROS wstool document : http://wiki.ros.org/wstool

 

wstool - ROS Wiki

It is recommended to use vcstool instead of wstool. Command-line tools for maintaining a workspace of projects from multiple version-control systems. wstool provides commands to manage several local SCM repositories (supports git, mercurial, subversion, ba

wiki.ros.org

 

 

읽어주셔서 감사합니다 :)

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31