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

  • 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 도구들에서 비슷하게 적용됩니다.

Wiki: ko/ROS/Tutorials/rosbuild/NavigatingTheFilesystem (last edited 2013-07-02 16:55:27 by elitechrome)