[Documentation] [TitleIndex] [WordIndex

Note: This tutorial assumes that you have completed the previous tutorials: ROS 환경 설치와 설정.
(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

ROS 파일시스템의 탐색

Description: 이 자습서는 ROS의 파일시스템 개념과, 명령행 도구인 roscd, rosls, rospack을 다루고 있습니다.

Tutorial Level: BEGINNER

Next Tutorial: catkin에서 작업공간 만들기 ROS 패키지의 작성

파일시스템 개념의 간략한 소개

  • Packages: 패키지는 라이브러리들, 도구들, 실행파일 등을 담고 있는 ROS 소프트웨어 구조에서 최하위의 단계입니다.

  • Manifest: 매니페스트는 하나의 패키지에 대한 정보를 담고 있습니다. 이는 패키지간 의존성을 결정하는데 중요한 역할을 담당합니다.

  • Stacks: 스택은 상위레벨의 라이브러리를 형성하는 패키지들의 모음집입니다.

  • Stack Manifest: 이것은 일반적인 매니패스트와 유사합니다만, 스택을 위한 매니패스트라는 점만이 다릅니다.

직접 파일시스템을 들여다 보았을 때, 패키지스택을 구분하는 것은 매우 간단합니다.

  • 패키지는 manifest.xml파일을 가지고 있는 폴더입니다.
  • 스택은 stack.xml파일을 가지고 있는 폴더입니다.


filesystem_layout.png

파일시스템 도구

코드들은 다수의 ROS 패키지와 스택들 안에 이리저리 흩어져 있습니다. 이들을 찾아다니기 위해 lscd를 이용하는 것은 무척 지루한 일이 될 수 있습니다. 따라서 ROS에서는 보다 편리한 탐색을 위해 특별한 도구를 제공합니다.

rospack과 rosstack의 사용 방법

rospackrosstack은 패키지와 스택에 대한 정보를 얻을 수 있도록 도와줍니다. 이 자습서에서는 패키지 또는 스택의 경로를 반환해 주는 find 옵션에 대해서 다룰 것입니다.

사용 방법:

$ rospack find [package_name]
$ rosstack find [stack_name]

예시:

$ rospack find roscpp

예상 결과:

  • YOUR_INSTALL_PATH/share/roscpp

일례로 바이너리로 우분투 리눅스에 ROS Fuerte를 설치했을 경우에는 아래와 같이 보일 것입니다.

  • /opt/ros/fuerte/share/roscpp

roscd의 사용 방법

roscdrosbash 도구모음의 일부분입니다. 이 도구는 어떤 패키지 또는 스택의 폴더로 현재 위치를 바꾸어 주는 도구입니다. (cd)

사용 방법:

$ roscd [locationname[/subdir]]

예시:

$ roscd roscpp

현재 위치가 제대로 roscpp패키지의 위치로 변경되었는가 확인하기 위해 유닉스 명령어 pwd를 사용해 봅시다.

$ pwd

아래와 같은 형식으로 출력된다면 성공입니다.

  • YOUR_INSTALL_PATH/share/roscpp

YOUR_INSTALL_PATH/share/roscpp이 자습서의 초반에 소개한 rospack find 의 결과와 일치한다는 사실도 알아두시면 좋겠습니다.

다른 ROS 도구들과 마찬가지로 roscd$ROS_PACKAGE_PATH에 등록된 경로 안에 있는 ROS 패키지 만을 검색합니다. $ROS_PACKAGE_PATH의 값은 아래의 명령으로 확인할 수 있습니다.

$ echo $ROS_PACKAGE_PATH

$ROS_PACKAGE_PATH를 수정하지 않은 경우의 결과는 아래와 같습니다.

  • YOUR_INSTALL_PATH/share:YOUR_INSTALL_PATH/stacks

다른 환경변수와 비슷하게 $ROS_PACKAGE_PATH도 ':'을 이용해 복수의 경로를 추가할 수 있습니다.

하위 폴더

또한 roscd 는 패키지나 스택 안의 하위 폴더로 이동하는 데 쓰일 수 있습니다.

아래의 명령을 실행 해 보세요.

$ roscd roscpp/cmake
$ pwd

아래의 결과가 출력되면 정상입니다.

  • YOUR_INSTALL_PATH/share/roscpp/cmake

roscd의 특수한 사용 예시

roscd는 일반적인 패키지스택을 위한 도구로서 쓰이는 것 뿐 아니라 몇 가지 다른 활용도 가능합니다.

매개변수가 없는 roscd

매개변수가 없는 roscd를 실행하면 $ROS_WORKSPACE의 경로로 이동합니다.

예시:

$ roscd
$ pwd

결과:

  •  /home/user/fuerte_workspace

참고: Fuerte 이전 버전에서는, $ROS_ROOT로 이동하게 됩니다.

roscd log

roscd log는 ROS의 로그파일이 저장되는 폴더로 이동하는 명령입니다. 만약 한번도 ROS프로그램을 실행해 본 적이 없다면 폴더를 찾을 수 없다는 경고가 발생합니다.

한번 이상 ROS 프로그램을 실행해 보신 경우 아래의 명령을 수행해 보시길 바랍니다.

$ roscd log

rosls의 이용

roslsrosbash 도구모음의 일부입니다. 이것은 사용자가 지정한 패키지나 스택, 또는 일반적인 경로에 대해 바로 ls를 실행하는 것과 같은 결과를 보여줍니다.

사용 방법:

$ rosls [locationname[/subdir]]

예시:

$ rosls roscpp_tutorials

결과:

  • bin  cmake  manifest.xml  srv

Tab 자동완성

패키지의 정확한 이름을 일일히 입력하는 것은 매우 귀찮은 일입니다. 이전의 자습서에서 roscpp_tutorials를 일일히 입력하던 것을 떠올려 보시길 바랍니다. 다행스럽게도 ROS의 도구들은 TAB 자동완성을 지원합니다.

사용예시:

$ roscd roscpp_tut<<< now push the TAB key >>>

TAB키를 누르고 나면 나머지가 자동으로 완성됨을 보실 수 있을 것입니다.

  • $ roscd roscpp_tutorials/

사실 이 결과는 roscpp_tutorialsroscpp_tut로 시작하는 유일한 ROS 패키지였기 때문에 바로 자동완성이 작동한 것입니다.

한번 아래의 예제로 다시 시험해 보세요.

$ roscd tur<<< now push the TAB key >>>

TAB키를 누르면 자동으로 글자가 입력되는데, 이는 특정한 패키지를 가리키고 있는 것이 아닙니다.

  • $ roscd turtle

이 경우는 ROS상에 turtle로 시작하는 다양한 패키지가 있어 발생하는데, TAB키를 한번 더 눌러보면 turtle로 시작하는 모든 패키지의 목록을 얻을 수 있습니다.

  •   turtle_actionlib/  turtlesim/         turtle_tf/

그렇지만 명령줄에는 아직 아래와 같이 표시되고 있을 것입니다.

  • $ roscd turtle

이제 turtle의 뒤에 s를 입력하고 TAB을 눌러봅니다.

$ roscd turtles<<< now push the TAB key >>>

turtles로 시작하는 패키지는 하나밖에 없기 때문에 아래와 같은 결과가 출력됩니다.

  • $ roscd turtlesim/

복습

여러분들은 이제 ROS 도구들이 어떤 규칙을 가지고 이름지어 졌는지 감을 잡으셨으리라 생각합니다.

  • rospack = ros + pack(age)
  • rosstack = ros + stack
  • roscd = ros + cd
  • rosls = ros + ls

이러한 명명 규칙은 많은 ROS 도구들에서 비슷하게 적용됩니다.

파일시스템 개념의 간략한 소개

  • Packages: 패키지는 ROS 코드의 소프트웨어 구조 단위입니다. 각각의 패키지는 라이브러리, 실행파일, 스크립트 등을 담고 있습니다.

  • Manifest (package.xml): 매니패스트는 패키지에 대한 설명을 기록한 것입니다. 이것은 패키지간의 의존성과 패키지의 버전, 관리자, 라이센스 등의 메타 정보를 관리하는 데 쓰입니다.

Show    스택에 대하여...

참고: rosbuild를 사용하시던 사용자들은 스택의 개념이 사라진 것에 당황하셨을 지도 모릅니다. catkin에서는 보다 나은 패키지 배포를 위해 stack의 개념을 없앴습니다. catkin에서는 metapackages(en)을 정의해서 한 개의 VCS 저장소에 복수의 유사한 패키지를 모아 관리할 수 있습니다.

파일시스템 도구

ROS에서 코드는 여러 패키지에 산재되어 있습니다. lscd와 같은 명령어 만으로 이들을 찾아다니는 일은 매우 짜증스러운 일이 아닐 수 없습니다. 이를 위해 ROS에서는 몇 가지 도구를 제공합니다.

rospack 사용하기

rospack 은 패키지의 정보를 제공하는 도구입니다. 이 자습서에서는 패키지의 경로를 반환해 주는 find옵션만을 다루게 됩니다.

사용 방법:

# rospack find [package_name]

예시:

$ rospack find roscpp

결과:

  • YOUR_INSTALL_PATH/share/roscpp

우분투 리눅스에서 apt를 통해 ROS를 설치하신 분들이라면 정확히 아래와 같은 결과를 보여줄 것입니다.

  • /opt/ros/groovy/share/roscpp

roscd 사용하기

roscdrosbash 도구모음의 일부입니다. 이 도구는 패키지의 이름만으로 cd 처럼 폴더를 이동할 수 있습니다

사용 방법:

# roscd [locationname[/subdir]]

예시:

$ roscd roscpp

roscpp 패키지가 있는 폴더로 제대로 변경되었는가를 확인하기 위해 유닉스 명령어 pwd를 사용해 봅시다.

$ pwd

아래와 비슷한 결과가 출력된다면 성공입니다.

  • YOUR_INSTALL_PATH/share/roscpp

YOUR_INSTALL_PATH/share/roscpp이 자습서의 초반에 소개한 rospack find 의 결과와 일치한다는 사실도 알아두시면 좋겠습니다.

다른 ROS 도구들과 마찬가지로 roscd$ROS_PACKAGE_PATH에 등록된 경로 안에 있는 ROS 패키지 만을 검색합니다. $ROS_PACKAGE_PATH의 값은 아래의 명령으로 확인할 수 있습니다.

$ echo $ROS_PACKAGE_PATH

$ROS_PACKAGE_PATH를 수정하지 않은 경우의 결과는 아래와 같습니다.

  • YOUR_INSTALL_PATH/share:YOUR_INSTALL_PATH/stacks

다른 환경변수와 비슷하게 $ROS_PACKAGE_PATH도 ':'을 이용해 복수의 경로를 추가할 수 있습니다.

하위 폴더

또한 roscd 는 패키지나 스택 안의 하위 폴더로 이동하는 데 쓰일 수 있습니다.

아래의 명령을 실행 해 보세요.

$ roscd roscpp/cmake
$ pwd

아래의 결과가 출력되면 정상입니다.

  • YOUR_INSTALL_PATH/share/roscpp/cmake

roscd log

roscd log는 ROS의 로그파일이 저장되는 폴더로 이동하는 명령입니다. 만약 한번도 ROS프로그램을 실행해 본 적이 없다면 폴더를 찾을 수 없다는 경고가 발생합니다.

한번 이상 ROS 프로그램을 실행해 보신 경우 아래의 명령을 수행해 보시길 바랍니다.

$ roscd log

rosls 사용하기

roslsrosbash 도구모음의 일부입니다. 이것은 사용자가 지정한 패키지나 스택, 또는 일반적인 경로에 대해 바로 ls를 실행하는 것과 같은 결과를 보여줍니다.

사용 방법:

$ rosls [locationname[/subdir]]

예시:

$ rosls roscpp_tutorials

결과:

  • bin  cmake  manifest.xml  srv

Tab 자동완성

패키지의 정확한 이름을 일일히 입력하는 것은 매우 귀찮은 일입니다. 이전의 자습서에서 roscpp_tutorials를 일일히 입력하던 것을 떠올려 보시길 바랍니다. 다행스럽게도 ROS의 도구들은 TAB 자동완성을 지원합니다.

사용예시:

$ roscd roscpp_tut<<< now push the TAB key >>>

TAB키를 누르고 나면 나머지가 자동으로 완성됨을 보실 수 있을 것입니다.

  • $ roscd roscpp_tutorials/

사실 이 결과는 roscpp_tutorialsroscpp_tut로 시작하는 유일한 ROS 패키지였기 때문에 바로 자동완성이 작동한 것입니다.

한번 아래의 예제로 다시 시험해 보세요.

$ roscd tur<<< now push the TAB key >>>

TAB키를 누르면 자동으로 글자가 입력되는데, 이는 특정한 패키지를 가리키고 있는 것이 아닙니다.

  • $ roscd turtle

이 경우는 ROS상에 turtle로 시작하는 다양한 패키지가 있어 발생하는데, TAB키를 한번 더 눌러보면 turtle로 시작하는 모든 패키지의 목록을 얻을 수 있습니다.

  •   turtle_actionlib/  turtlesim/         turtle_tf/

그렇지만 명령줄에는 아직 아래와 같이 표시되고 있을 것입니다.

  • $ roscd turtle

이제 turtle의 뒤에 s를 입력하고 TAB을 눌러봅니다.

$ roscd turtles<<< now push the TAB key >>>

turtles로 시작하는 패키지는 하나밖에 없기 때문에 아래와 같은 결과가 출력됩니다.

  • $ roscd turtlesim/

복습

여러분들은 이제 ROS 도구들이 어떤 규칙을 가지고 이름지어 졌는지 감을 잡으셨으리라 생각합니다.

  • rospack = ros + pack(age)
  • roscd = ros + cd
  • rosls = ros + ls

이러한 명명 규칙은 많은 ROS 도구들에서 비슷하게 적용됩니다.

이제 여러분은 ROS를 맘껏 누빌 수 있게 되었습니다. 다음 자습서로 이동합니다. catkin에서 작업공간 만들기.


2019-11-16 12:58